MCP 및 Cloud Run을 사용하여 엔터프라이즈 거버넌스 인식 에이전트 배포

1. 소개

이 Codelab은 거버넌스를 인식하는 AI 에이전트를 빌드하는 방법을 알아보는 2부작 시리즈의 일부입니다.

(지식 카탈로그 측면 유형을 등록하고, BigQuery 테이블에 측면을 적용하고, AGY CLI를 통해 로컬에서 규칙을 테스트하여 데이터 기반을 설정하는 방법을 다루는 이 시리즈의 첫 번째 부분을 읽어보세요. 👉 1부 읽기)

하지만 로컬 CLI에서 테스트하는 것은 시작에 불과합니다. 전체 회사에 이 기능을 출시하려면 중앙 집중식 보안, 표준화된 AI 도구 연결, 에이전트의 로직을 조정하고 친숙한 채팅 인터페이스를 제공하는 적절한 애플리케이션 프레임워크가 필요합니다.

두 번째 파트에서는 이러한 문제를 해결하고 프로덕션으로 확장합니다. 맞춤 MCP 서버를 배포하는 대신 에이전트를 Google 관리형 Knowledge Catalog MCP 서버에 직접 연결합니다. 그런 다음 Google의 에이전트 개발 키트 (ADK)를 사용하여 실제 에이전트 애플리케이션을 빌드하고, 로컬 에이전트 스킬에서 거버넌스 규칙을 로드하고, 전문적인 웹 UI와 함께 Cloud Run에 배포합니다.

.

사용자가 ADK UI와 상호작용하면 다음 순서가 발생합니다.

8912d1983c34ee8e.png

학습할 내용

  • 모델 컨텍스트 프로토콜 (MCP)을 사용하여 AI 에이전트가 Google Cloud 데이터와 상호작용하는 방식을 표준화하는 방법
  • ADK 에이전트가 Google 관리 Knowledge Catalog MCP 서버에 연결하는 방법입니다.
  • 공유 에이전트 스킬에서 거버넌스 규칙을 동적으로 로드하는 방법
  • Cloud Run에 에이전트를 배포하고 ADK의 내장 웹 플레이그라운드를 실행하는 방법

필요한 항목

  • 결제가 사용 설정된 Google Cloud 프로젝트.
  • Google Cloud Shell에 액세스할 수 있습니다.
  • Cloud Run, IAM 서비스 계정, Python에 대한 기본적인 이해
  • 1부에서 생성된 BigQuery 데이터 세트 및 Knowledge Catalog 측면 (삭제한 경우 아래에 다시 만드는 빠른 스크립트가 제공되니 걱정하지 마세요.)

주요 개념

  • 모델 컨텍스트 프로토콜 (MCP): MCP는 AI 에이전트의 '범용 USB-C 케이블'과 같습니다. MCP는 모든 AI 모델에 맞춤 API 통합 코드를 작성하는 대신 AI가 Knowledge Catalog 및 BigQuery와 같은 엔터프라이즈 데이터 도구에 안전하게 연결할 수 있는 표준 방법을 제공합니다.
  • 에이전트 개발 키트 (ADK): AI 에이전트의 엔드 투 엔드 개발을 간소화하기 위해 Google에서 설계한 유연한 오픈소스 프레임워크입니다. 소프트웨어 엔지니어링 원칙을 에이전트 생성에 적용하여 복잡한 도구를 조정하고, 상태를 관리하고, 테스트 및 배포를 위해 빌드된 개발자 UI를 쉽게 실행할 수 있습니다.
  • Gemini Enterprise Agent Platform(GEAP): Google Cloud에 AI 에이전트를 배포하기 위한 엔터프라이즈급 호스팅 및 오케스트레이션 환경입니다.

2. 설정 및 요건

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.

Cloud Shell 활성화

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

환경이 연결되었음을 보여주는 Google Cloud Shell 터미널 스크린샷

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.

환경 초기화

Cloud Shell을 열고 프로젝트 변수를 설정하여 모든 명령어가 올바른 인프라를 타겟팅하도록 합니다.

export PROJECT_ID=$(gcloud config get-value project)
gcloud config set project $PROJECT_ID
export REGION="us-central1"

필요한 API 사용 설정

데이터 파운데이션을 관리하고, Vertex AI 모델을 실행하고, Cloud Run에서 ADK 에이전트를 호스팅하는 데 필요한 최소한의 Google Cloud API를 사용 설정합니다.

gcloud services enable \
    dataplex.googleapis.com \
    bigquery.googleapis.com \
    aiplatform.googleapis.com \
    run.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com

체크포인트: 재개 또는 재빌드?

이것은 파트 2이므로 에이전트가 작동하려면 파트 1의 관리 데이터가 필요합니다. 다음 중 하나를 선택하세요.

경로 A: 1부를 완료했는데 리소스가 아직 실행 중인 경우

좋습니다. 작업 디렉터리로 이동하면 계속 진행할 수 있습니다.

cd ~/devrel-demos/data-analytics/governance-context

경로 B: 1부를 건너뛰었거나 리소스를 삭제했습니다 (정리됨).

걱정하지 마세요. 아래에 '패스트 트랙' 명령 블록이 제공되어 있습니다. 이렇게 하면 1부에서와 마찬가지로 BigQuery 데이터 레이크가 자동으로 다시 빌드되고, 측면 유형이 등록되며, 거버넌스 메타데이터가 정확하게 적용됩니다.

# 1. Clone the repo and navigate to the working directory
git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos
git sparse-checkout set data-analytics/governance-context
cd data-analytics/governance-context

# 2. Rebuild the BigQuery datasets and tables
chmod +x ./setup_bq_tables.sh
./setup_bq_tables.sh

# 3. Register the Knowledge Catalog aspect type
gcloud dataplex aspect-types create official-data-product-spec \
    --location="${REGION}" \
    --project="${PROJECT_ID}" \
    --metadata-template-file-name="aspect_template.json"

# 4. Generate and apply aspects (governance rules)
chmod +x ./generate_payloads.sh ./apply_governance.sh
./generate_payloads.sh
./apply_governance.sh

3. 중앙 집중식 데이터 컨트롤 플레인 (관리형 MCP)

실제 엔터프라이즈 환경에서는 안전한 중앙 집중식 컨트롤 플레인이 필요합니다. 맞춤 MCP 서버 컨테이너를 빌드하고 Cloud Run에 배포하는 대신 에이전트를 Google 관리형 Knowledge Catalog MCP 서버에 직접 연결합니다.

이 관리형 엔드포인트를 활용하면 다음을 달성할 수 있습니다.

  1. 유지관리 불필요: MCP 서버의 컨테이너, 확장, 패치를 관리할 필요가 없습니다.
  2. 표준화: 에이전트는 모델 컨텍스트 프로토콜 (SSE 전송)을 사용하여 표준의 보안 Google API 엔드포인트에 연결됩니다.
  3. 제어된 범위: MCP 서버는 필요한 메타데이터 도구 (search_entries, lookup_context, lookup_entry)만 노출하여 읽기 전용의 거버넌스 우선 추론 루프를 적용합니다.

Google 관리형 Knowledge Catalog MCP 서버는 다음 보안 URL을 통해 액세스할 수 있습니다.

https://dataplex.googleapis.com/mcp

이 API는 서드 파티 Google API이므로 에이전트는 ID 토큰이 아닌 표준 Google Cloud OAuth2 액세스 토큰을 사용하여 인증해야 합니다. 이 인증은 애플리케이션 코드에서 자동으로 처리됩니다.

4. ADK로 에이전트 백엔드 빌드

안전한 관리형 데이터 컨트롤 플레인이 있습니다. 이제 AI 에이전트가 사용자 입력 처리, MCP 서버 호출 시점 결정, 출력 형식 지정과 같은 로직을 오케스트레이션하는 프레임워크가 필요합니다.

Google의 에이전트 개발 키트 (ADK)를 사용합니다. ADK는 코드 중심 프레임워크로, 에이전트 로직을 FastAPI 백엔드로 자동 래핑하고 즉시 테스트할 수 있는 기본 제공 웹 인터페이스를 제공합니다.

Cloud Shell 편집기에서 에이전트 코드 열기

터미널에 전체 파일을 덤프하는 대신 Cloud Shell 편집기에서 파일을 열어 코드를 쉽게 검사, 수정, 이해할 수 있도록 하겠습니다.

터미널에서 아래 명령어를 실행하고 편집기에서 코드 구조를 확인합니다. 이 애플리케이션은 Google의 에이전트 개발 키트 (ADK)를 사용하여 빌드됩니다.

cd ~/devrel-demos/data-analytics/governance-context/mcp_server

# Copy the governance skill directory inside the application bundle so it packages during Cloud Run deployment
mkdir -p skills
cp -r ../.agents/skills/knowledge-catalog-governance skills/

cloudshell edit agent.py

(참고: agent.py에는 Google Cloud OAuth2 인증 및 토큰 새로고침을 처리하여 에이전트가 Google 관리형 Knowledge Catalog API와 안전하게 통신할 수 있도록 하는 상단의 상용구 코드가 포함되어 있습니다.)

1. 네이티브 스킬 로드

고도로 최적화된 에이전트를 빌드하기 위해 ADK의 기본 load_skill_from_dir를 사용하여 외부 에이전트 스킬 디렉터리에서 거버넌스 명령어를 로드합니다. 이 접근 방식을 사용하면 점진적 공개가 가능합니다.

  • L1 메타데이터: 에이전트는 시작 시 스킬의 이름과 설명만 로드합니다. 이 최소 컨텍스트를 통해 LLM은 많은 양의 토큰을 미리 소비하지 않고도 스킬을 사용해야 하는 시점을 식별할 수 있습니다.
  • L2 요청 사항: SKILL.md 내부의 전체 명령 집합은 모델이 관련성이 있다고 판단하는 경우에만 런타임에 동적으로 가져옵니다.
base_dir = Path(__file__).parent
governance_skill = load_skill_from_dir(
    base_dir / "skills" / "knowledge-catalog-governance"
)

# Bundle the skill and MCP tools together into a SkillToolset
governance_skill_toolset = skill_toolset.SkillToolset(
    skills=[governance_skill],
    additional_tools=[tools]
)

2. 에이전트 조정

ADK를 사용하면 여러 에이전트를 함께 연결하여 복잡한 에이전트 동작을 조정할 수 있습니다. 두 개의 전문 에이전트로 구성된 SequentialAgent 워크플로를 정의합니다.

  • governance_researcher: governance_skill_toolset 및 Knowledge Catalog MCP tools가 장착되어 있습니다. 쿼리가 데이터 카탈로그 및 규정 준수 범위에 속하는지 확인한 다음 시스템 안내에 삽입된 환경 변수를 사용하여 Knowledge Catalog에 쿼리합니다.
  • compliance_formatter: 원시 JSON 메타데이터 검색 결과를 정리된 대답으로 변환하거나 요청이 범위를 벗어난 경우 범위 경계를 적절하게 설명합니다.
# 1. Researcher Agent (has access to the encapsulated SkillToolset)
governance_researcher = LlmAgent(
    name="governance_researcher",
    model=model_name,
    description="Dynamically interprets metadata schema (Booleans/Enums) and searches for assets using strict syntax.",
    instruction=f"""
    You are a governance researcher. Your job is to verify Knowledge Catalog metadata rules and find compliant assets for the user's query.
    
    YOUR ACTIVE ENVIRONMENT CONTEXT:
    - Google Cloud Project ID: {project_id}
    - Location (Region): {location}

    YOUR WORKFLOW:
    1. First, check if the user query is related to data analytics assets, database tables, or data compliance.
       - If YES: Call `load_skill` with `name="knowledge-catalog-governance"` to load the rules, then use search/lookup tools to locate a certified compliant table.
       - If NO (e.g., general chit-chat, unrelated tasks): Skip skill loading and output a JSON object indicating it is out of scope:
         {"error": "out_of_scope", "message": "The query does not pertain to data catalog search or governance compliance."}
    2. Populate the required projectId and location parameters in tool calls with the active environment parameters.
    3. Return the verified table's metadata in JSON format as your final research output.
    """,
    tools=[governance_skill_toolset, tools],
    output_key="research_data"
)

# 2. Formatter Agent (formats the output or explains out-of-scope errors)
compliance_formatter = LlmAgent(
    name="compliance_formatter",
    model=model_name,
    description="Formats the JSON research data into a helpful response for the user.",
    instruction="""
    You are the **Intelligent Data Governance Specialist**.
    Your job is to explain the findings of the governance research clearly to the user.

    **YOUR GOAL:**
    1. If the researcher found a matching table (valid JSON with table metadata):
       - Explain the logical connection between the User's Request, the Governance Schema (translated criteria), and the Recommended Table.
       - Use the following RESPONSE TEMPLATE:
         - **Analysis:** "I analyzed the metadata schema and translated your request into the following technical criteria:..."
         - **Recommendation:** "Based on this, I recommend the following table:"
           - **Table:** [Insert Table Name]
           - **Description:** [Insert Table Description]
         - **Verification:** "This asset is a verified match because: [Explain the verification details]."
    2. If the researcher returned an 'out_of_scope' error or no matching tables were found:
       - Apologize politely and explain that no data asset currently matches the strict governance criteria defined in `official-data-product-spec`.
       - Clearly state what domain of questions this agent is certified to answer (e.g., Data Catalog Search and Data Governance compliance).
    """
)

# 3. Orchestrated Workflow (Exported as root_agent)
root_agent = SequentialAgent(
    name="governance_workflow",
    description="Workflow to learn metadata rules, search with strict syntax, and recommend assets.",
    sub_agents=[
        governance_researcher,
        compliance_formatter,
    ]
)

런타임 변수 구성

에이전트를 실행하려면 관리형 MCP 서버의 위치를 알려주고 프로젝트와 리전을 구성해야 합니다. 이러한 변수는 ADK가 런타임에 읽을 .env 파일에 저장됩니다.

다음 명령어를 실행하여 .env 파일을 생성합니다. MCP_SERVER_URL는 Google 관리 Knowledge Catalog API 엔드포인트를 직접 가리킵니다.

export MCP_SERVER_URL="https://dataplex.googleapis.com/mcp"

echo MCP_SERVER_URL=$MCP_SERVER_URL > .env
echo GOOGLE_GENAI_USE_VERTEXAI=1 >> .env
echo GOOGLE_CLOUD_PROJECT=$PROJECT_ID >> .env
echo GOOGLE_CLOUD_LOCATION=$REGION >> .env

5. 에이전트를 로컬에서 실행하고 테스트

에이전트를 클라우드에 배포하기 전에 Cloud Shell에서 로컬로 실행하여 동작을 확인해야 합니다. 에이전트는 Google Cloud Logging 및 ADK 라이브러리를 비롯한 여러 Python 패키지에 종속되므로 이러한 종속 항목을 설치하기 위해 로컬 가상 환경을 설정합니다.

Cloud Shell에서 로컬로 실행할 때 에이전트는 활성 Google Cloud 사용자 사용자 인증 정보를 자동으로 사용하므로 Vertex AI 및 Knowledge Catalog에 액세스하는 데 필요한 권한이 이미 있습니다.

  1. mcp_server 디렉터리로 이동하여 가상 환경을 만들고 종속 항목을 설치합니다.
cd ~/devrel-demos/data-analytics/governance-context/mcp_server

# Create a virtual environment using uv
uv venv
source .venv/bin/activate

# Install the dependencies listed in requirements.txt
uv pip install -r requirements.txt
  1. 터미널에서 대화형 채팅 세션을 시작합니다.
adk run .
  1. 세션이 시작되면 프롬프트가 표시됩니다. 다음과 같이 쿼리를 입력하여 에이전트의 거버넌스 로직을 테스트합니다.
I need the Q1 revenue summary for our internal board meeting.

에이전트는 요청을 처리하고, 관리형 MCP 서버를 통해 Knowledge Catalog를 쿼리하고, 터미널에 직접 추천과 이유를 출력합니다.

  1. 대화형 세션을 종료하려면 exit 또는 quit를 입력하거나 Ctrl+C를 누릅니다. 종료한 후 가상 환경을 비활성화할 수 있습니다.
deactivate

6. 프로덕션에 에이전트 배포

이제 로컬에서 에이전트를 확인했으므로 프로덕션 용도로 Google Cloud에 배포할 수 있습니다.

서비스 계정 만들기

보안을 위해 배포된 에이전트는 개인 사용자 인증 정보로 실행하면 안 됩니다. 최소 권한의 원칙에 따라 에이전트의 별도 ID (knowledge-catalog-agent-sa)를 만듭니다.

다음 명령어를 실행하여 서비스 계정을 만듭니다.

export AGENT_SA=knowledge-catalog-agent-sa
export AGENT_SERVICE_ACCOUNT="${AGENT_SA}@${PROJECT_ID}.iam.gserviceaccount.com"

gcloud iam service-accounts create ${AGENT_SA} \
    --display-name="Service Account for Knowledge Catalog Agent"

권한 부여

에이전트가 거버넌스 검사를 MCP 서버에 위임하더라도 작동하려면 기본 권한이 필요합니다.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/aiplatform.user"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/dataplex.catalogAdmin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/bigquery.dataViewer"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/mcp.toolUser"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/viewer"

Cloud Run에 배포

마지막으로 Cloud Run에 에이전트를 배포합니다. 다음 명령어는 현재 디렉터리의 Dockerfile를 사용하여 컨테이너 이미지를 빌드하고, 이를 Artifact Registry에 업로드하고, Cloud Run에 배포합니다. 완료하는 데 1~3분 정도 걸릴 수 있습니다.

gcloud run deploy knowledge-catalog-agent \
  --source . \
  --project=$PROJECT_ID \
  --region=$REGION \
  --service-account=$AGENT_SERVICE_ACCOUNT \
  --allow-unauthenticated \
  --clear-base-image \
  --labels created-by=adk

이 명령어가 완료되면 서비스 URL (예: https://knowledge-catalog-agent-xyz.run.app)이 출력됩니다. 해당 링크를 클릭하여 완전히 관리되는 생성형 AI 채팅 인터페이스를 엽니다.

12a5fa4c2aaf381f.png

7. 실제 상담사 테스트

이제 에이전트가 라이브 상태이므로 거버넌스 시나리오를 테스트해 보겠습니다. 로직은 동일하지만 이제 내부 상태와 도구 실행을 시각화하는 배포된 ADK 웹 그라운드와 상호작용합니다.

이전 단계에서 생성한 서비스 URL (예: https://knowledge-catalog-agent-xyz.run.app)을 브라우저에서 엽니다. 다음 프롬프트를 붙여넣습니다.

"My dashboard needs to show what's happening right now with our ad spend. I can't wait for the overnight load. What do you recommend?"

개발자 UI에서 에이전트의 추론 프로세스를 관찰합니다.

  1. 의도 인식: 에이전트가 '지금'과 '밤새 기다릴 수 없어'를 파싱합니다.
  2. 메타데이터 조회: [PROJECT_ID].us-central1.official-data-product-spec.update_frequency=REALTIME_STREAMING 쿼리를 사용하여 MCP 도구 search_entries를 호출합니다.
  3. 선택:mkt_realtime_campaign_performance가 이러한 기준을 충족함을 나타냅니다.
  4. 대답: 상담사가 실시간 표를 추천합니다.

e0da615724199e.png

중요한 이유:

이 거버넌스 메타데이터가 없으면 LLM은 데이터가 24시간 전 데이터라는 사실을 무시하고 'ad_spend'라는 열이 있다는 이유만으로 fin_monthly_closing_internal 테이블을 추천할 가능성이 큽니다. 메타데이터 컨텍스트로 인해 비즈니스 오류가 발생하지 않았습니다.

'이사회 회의' 프롬프트를 테스트하여 데이터 제품 등급 측면에 따라 에이전트가 다양한 표로 전환하는 방식을 확인할 수도 있습니다.

"We are preparing the deck for an internal Board of Directors meeting next week. I need the numbers to be absolutely finalized, trustworthy, and kept strictly confidential. Which table is safe to use?"

8. 삭제

Google Cloud 계정에 비용이 청구되지 않도록 하려면 다음 단계에 따라 이 Codelab에서 생성된 모든 인프라를 삭제하세요.

데이터 레이크 삭제

정리 스크립트를 사용하여 BigQuery 테이블, 데이터 세트, Knowledge Catalog 측면 정의를 해체합니다.

cd ~/devrel-demos/data-analytics/governance-context
chmod +x ./cleanup_data_lake.sh
./cleanup_data_lake.sh

Cloud Run 서비스 삭제

실행 중인 컨테이너의 활성 청구를 중지하려면 컴퓨팅 리소스를 삭제하세요.

gcloud run services delete knowledge-catalog-agent --region=$REGION --quiet

빌드 아티팩트 및 스테이징 스토리지 정리

ADK 에이전트를 배포할 때 시스템에서 컨테이너 이미지를 자동으로 빌드하고 소스 코드를 임시 Cloud Storage 버킷에 업로드했습니다.

Artifact Registry 저장소와 Cloud Storage 스테이징 버킷을 삭제합니다.

# Delete the repository used for the agent build
gcloud artifacts repositories delete cloud-run-source-deploy \
    --location=$REGION \
    --quiet

# Delete the staging bucket created by Cloud Run source deploy
gcloud storage rm --recursive gs://run-sources-${PROJECT_ID}-${REGION}

ID 및 권한 삭제

먼저 IAM 정책 바인딩을 삭제한 다음 서비스 계정을 삭제합니다.

# Remove IAM roles granted to the Agent Service Account
gcloud projects remove-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/aiplatform.user" --quiet

gcloud projects remove-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/dataplex.catalogViewer" --quiet

gcloud projects remove-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/mcp.toolUser" --quiet

gcloud projects remove-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$AGENT_SERVICE_ACCOUNT" \
  --role="roles/bigquery.dataViewer" --quiet

# Delete the Service Account
gcloud iam service-accounts delete $AGENT_SERVICE_ACCOUNT --quiet

로컬 구성 삭제

마지막으로 Cloud Shell에서 로컬 구성 파일과 환경 변수를 정리합니다.

# Uninstall the AGY CLI plugin
agy plugin uninstall dataplex

# Remove local repository files and unset variables
cd ~
rm -rf ~/devrel-demos
unset MCP_SERVER_URL
unset AGENT_SERVICE_ACCOUNT

9. 수고하셨습니다

엔드 투 엔드 거버넌스 인식 생성형 AI 에이전트를 성공적으로 배포했습니다.

이 2부로 구성된 Codelab에서는 간단한 프롬프트 엔지니어링을 넘어 강력한 프로덕션 레디 아키텍처를 구현했습니다. 데이터 거버넌스를 생성형 AI의 전제 조건으로 취급하여 모델이 인증되지 않았거나 할루시네이션된 데이터를 가져오지 못하도록 하는 체계적인 방법을 마련했습니다.

핵심 내용

  • 메타데이터를 통한 결정론적 AI: LLM이 열 이름을 기반으로 올바른 테이블을 추측하도록 하는 대신 Google 관리 Knowledge Catalog MCP 서버를 사용하여 엄격한 추론 루프를 적용하여 모델이 테이블을 추천하기 전에 데이터 인증을 확인하도록 했습니다.
  • 분리된 아키텍처: 프런트엔드 에이전트에는 데이터베이스 로직이 포함될 필요가 없습니다. MCP 표준을 통해서만 통신하면 됩니다. 즉, 향후 AI 모델이나 클라이언트를 동일한 관리 백엔드에 연결할 수 있습니다.
  • 업무 분리: IAM ID를 격리하여 최소 권한의 원칙을 적용했습니다. 사용자 대상 ADK 에이전트는 모델 호출 및 API 라우팅으로 제한된 권한으로 작동합니다.
  • 코드 중심 에이전트 오케스트레이션: Google 에이전트 개발 키트 (ADK)를 활용하여 Python 에이전트 로직을 확장 가능한 FastAPI 백엔드로 즉시 래핑하고, 내장된 개발자 UI를 사용하여 에이전트의 내부 도구 실행을 시각화하고 디버그했습니다.

다음 단계