ผสานรวมเซิร์ฟเวอร์ MCP ความรู้สำหรับนักพัฒนาแอปกับ AI Agent ที่กำหนดเอง

บทแนะนำนี้แสดงวิธีเชื่อมต่อเซิร์ฟเวอร์ MCP ความรู้ของนักพัฒนาซอฟต์แวร์ระยะไกลกับเฟรมเวิร์ก AI Agent ที่กำหนดเอง ซึ่งสร้างด้วย LangChain, LlamaIndex และ AutoGen

การเชื่อมต่อเอเจนต์ AI ที่กำหนดเองกับเซิร์ฟเวอร์ Model Context Protocol (MCP) ระยะไกลจะช่วยให้เอเจนต์ค้นหาและดึงเอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ของ Google ที่เชื่อถือได้และเป็นข้อมูลล่าสุดซึ่งครอบคลุม Google Cloud, Firebase, Android, Google Maps Platform, Chrome และอื่นๆ ได้แบบไดนามิก

ข้อกำหนดเบื้องต้น

ทำตามข้อกำหนดเบื้องต้นต่อไปนี้ก่อนเริ่ม

  1. สร้างคีย์ API ของ Developer Knowledge: เปิดใช้ Developer Knowledge API และสร้างคีย์ API ในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google โดยทำตาม คำแนะนำในการตั้งค่าคีย์ API
  2. สร้างคีย์ Gemini API: สร้างคีย์ API ใน Google AI Studio เพื่อตรวจสอบสิทธิ์ โมเดล Gemini หรือใช้คีย์ Google Cloud API ซ้ำหากเปิดใช้ Generative Language API ในคีย์นั้น
  3. ตั้งค่าตัวแปรสภาพแวดล้อม: ตั้งค่าคีย์ API เป็นตัวแปรสภาพแวดล้อมในเทอร์มินัล

    export DEVELOPERKNOWLEDGE_API_KEY="YOUR_API_KEY"
    export GEMINI_API_KEY="YOUR_GEMINI_API_KEY"
    
  4. ติดตั้ง Python: ตรวจสอบว่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ใช้ Python 3.10 ขึ้นไป

เชื่อมต่อโดยใช้ LangChain

แอปพลิเคชัน LangChain สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MCP HTTP ระยะไกลได้โดยใช้แพ็กเกจ langchain-mcp-adapters หรือการรับส่งไคลเอ็นต์ MCP มาตรฐาน

ติดตั้งการอ้างอิง

ติดตั้งแพ็กเกจ Python ที่จำเป็นสำหรับ LangChain, Gemini และ MCP โดยทำดังนี้

pip install langgraph langchain-google-genai langchain-mcp-adapters mcp

กำหนดค่า LangChain Agent

ตัวอย่างต่อไปนี้จะเชื่อมต่อเซิร์ฟเวอร์ MCP ของ Developer Knowledge กับเอเจนต์ LangChain ReAct ที่ขับเคลื่อนโดย Gemini สคริปต์จะสร้างอินสแตนซ์ MultiServerMCPClient โดยใช้การรับส่ง streamable_http แนบส่วนหัว HTTP ของ X-Goog-Api-Key และ โหลดเครื่องมือระยะไกลลงใน create_react_agent

import asyncio
import os

from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent

async def run_langchain_agent():
    api_key = os.environ.get("DEVELOPERKNOWLEDGE_API_KEY")
    if not api_key:
        raise ValueError(
            "DEVELOPERKNOWLEDGE_API_KEY environment variable is required."
        )

    gemini_api_key = os.environ.get("GEMINI_API_KEY")
    if not gemini_api_key:
        raise ValueError("GEMINI_API_KEY environment variable is required.")

    # Configure remote MCP connection for Developer Knowledge
    client = MultiServerMCPClient(
        {
            "google-developer-knowledge": {
                "url": "https://developerknowledge.googleapis.com/mcp",
                "transport": "streamable_http",
                "headers": {
                    "X-Goog-Api-Key": api_key,
                },
            }
        }
    )
    tools = await client.get_tools()

    # Initialize Gemini model and ReAct agent
    llm = ChatGoogleGenerativeAI(
        model="gemini-2.5-flash",
        temperature=0,
        google_api_key=gemini_api_key,
    )
    agent = create_react_agent(llm, tools)

    # Run agent query
    response = await agent.ainvoke(
        {
            "messages": [
                (
                    "user",
                    "How do I list Google Cloud Storage buckets in Python?",
                )
            ]
        }
    )
    print("\nAgent Response:\n", response["messages"][-1].content)

if __name__ == "__main__":
    asyncio.run(run_langchain_agent())

เชื่อมต่อโดยใช้ LlamaIndex

LlamaIndex รองรับการผสานรวมเซิร์ฟเวอร์ MCP ผ่านข้อกำหนดของเครื่องมือ ซึ่งช่วยให้ Agent การดึงข้อมูลสามารถค้นหาเอกสาร Developer Knowledge ในระหว่างการให้เหตุผลได้

ติดตั้งการอ้างอิง

ติดตั้งแพ็กเกจหลักของ LlamaIndex, Gemini LLM และการผสานรวมเครื่องมือ MCP โดยทำดังนี้

pip install llama-index llama-index-tools-mcp llama-index-llms-google-genai

กำหนดค่า Agent ของ LlamaIndex

ตัวอย่างต่อไปนี้เชื่อมต่อกับเซิร์ฟเวอร์ MCP ระยะไกลโดยใช้ BasicMCPClient ห่อด้วย McpToolSpec และเชื่อมโยงเครื่องมือที่ดึงมากับ LlamaIndex FunctionAgent ที่ขับเคลื่อนโดย Gemini

import asyncio
import os

from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.google_genai import GoogleGenAI
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec

async def run_llamaindex_agent():
    api_key = os.environ.get("DEVELOPERKNOWLEDGE_API_KEY")
    if not api_key:
        raise ValueError(
            "DEVELOPERKNOWLEDGE_API_KEY environment variable is required."
        )

    gemini_api_key = os.environ.get("GEMINI_API_KEY")
    if not gemini_api_key:
        raise ValueError("GEMINI_API_KEY environment variable is required.")

    # Connect to the remote Developer Knowledge MCP endpoint
    mcp_client = BasicMCPClient(
        "https://developerknowledge.googleapis.com/mcp",
        headers={"X-Goog-Api-Key": api_key},
    )
    mcp_tool_spec = McpToolSpec(client=mcp_client)
    tools = await mcp_tool_spec.to_tool_list_async()

    # Create LlamaIndex FunctionAgent with Gemini
    llm = GoogleGenAI(model="gemini-2.5-flash", api_key=gemini_api_key)
    agent = FunctionAgent(tools=tools, llm=llm)

    # Query the agent
    response = await agent.run(
        "What are the default limits and quotas for the Developer Knowledge"
        " API?"
    )
    print("\nAgent Response:\n", str(response))

if __name__ == "__main__":
    asyncio.run(run_llamaindex_agent())

เชื่อมต่อโดยใช้ AutoGen

Agent ของ Microsoft AutoGen สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MCP ระยะไกลได้โดยใช้autogen-extส่วนขยาย MCP ซึ่งช่วยให้การทำงานร่วมกันแบบหลาย Agent พร้อมสิทธิ์เข้าถึงเอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์อย่างเป็นทางการของ Google Developers

ติดตั้งการอ้างอิง

ติดตั้งแพ็กเกจส่วนขยายหลักและ MCP ของ AutoGen โดยทำดังนี้

pip install autogen-agentchat "autogen-ext[mcp,openai]"

กำหนดค่า Agent ของ AutoGen

ตัวอย่างต่อไปนี้เชื่อมต่อกับเซิร์ฟเวอร์ MCP ระยะไกลโดยใช้ StreamableHttpServerParams และลงทะเบียนเครื่องมือความรู้สำหรับนักพัฒนาซอฟต์แวร์ด้วย AutoGen AssistantAgent ที่ขับเคลื่อนโดย Gemini

import asyncio
import os

from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_ext.tools.mcp import StreamableHttpServerParams, mcp_server_tools

async def run_autogen_agent():
    api_key = os.environ.get("DEVELOPERKNOWLEDGE_API_KEY")
    if not api_key:
        raise ValueError(
            "DEVELOPERKNOWLEDGE_API_KEY environment variable is required."
        )

    gemini_api_key = os.environ.get("GEMINI_API_KEY")
    if not gemini_api_key:
        raise ValueError("GEMINI_API_KEY environment variable is required.")

    # Retrieve remote MCP tools for Developer Knowledge by using Streamable HTTP
    server_params = StreamableHttpServerParams(
        url="https://developerknowledge.googleapis.com/mcp",
        headers={"X-Goog-Api-Key": api_key},
    )
    dk_tools = await mcp_server_tools(server_params)

    # Initialize model client with Gemini and assistant agent
    model_client = OpenAIChatCompletionClient(
        model="gemini-2.5-flash",
        api_key=gemini_api_key,
        base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
    )
    developer_assistant = AssistantAgent(
        name="google_docs_assistant",
        model_client=model_client,
        tools=dk_tools,
        system_message=(
            "You are a developer assistant specializing in Google APIs and"
            " SDKs. Use Developer Knowledge tools to retrieve verified"
            " documentation."
        ),
    )

    # Run query with team runner
    team = RoundRobinGroupChat([developer_assistant], max_turns=5)
    stream = team.run_stream(
        task=(
            "Explain how to configure Firebase Cloud Messaging topic"
            " subscriptions."
        )
    )

    async for message in stream:
        print(message)

if __name__ == "__main__":
    asyncio.run(run_autogen_agent())

แนวทางปฏิบัติแนะนำสำหรับการผสานรวมเอเจนต์

เมื่อสร้าง AI Agent ที่กำหนดเองด้วยเซิร์ฟเวอร์ MCP ความรู้สำหรับนักพัฒนาซอฟต์แวร์ ให้ทำตามหลักเกณฑ์ต่อไปนี้

  • ปรับแต่งคำค้นหา: ใส่ชื่อสินค้าที่เฉพาะเจาะจงและคีย์เวิร์ดที่เกี่ยวข้องในคำค้นหาภาษาธรรมชาติแทนที่จะใช้คำทั่วไป เนื่องจากเครื่องมือ search_documents และ answer_query จะจับคู่ตามความหมายของคำค้นหา
  • จัดการโทเค็นหน้าต่างบริบท: ใช้ answer_query เพื่อรับคำตอบโดยตรง จากคลังเอกสาร และหลีกเลี่ยงการขอเนื้อหาทั้งหน้า ด้วย get_documents เว้นแต่รายละเอียดข้อมูลโค้ดจาก search_documents ไม่เพียงพอ
  • รักษาความปลอดภัยของคีย์ API: จัดเก็บคีย์ Developer Knowledge API และ Gemini API ในตัวแปรสภาพแวดล้อมหรือระบบ Secret Manager มาตรฐาน และอย่าฮาร์ดโค้ดข้อมูลเข้าสู่ระบบในโค้ด

ขั้นตอนถัดไป

ดูข้อมูลเพิ่มเติมเกี่ยวกับเซิร์ฟเวอร์ MCP ของ Developer Knowledge ได้จากแหล่งข้อมูลต่อไปนี้