دمج خادم Developer Knowledge MCP مع وكلاء الذكاء الاصطناعي المخصّصين

يوضّح لك هذا البرنامج التعليمي كيفية ربط خادم MCP البعيد الخاص بـ Developer Knowledge بأُطر عمل مخصّصة لوكلاء الذكاء الاصطناعي تم إنشاؤها باستخدام LangChain وLlamaIndex وAutoGen.

من خلال ربط وكلاء الذكاء الاصطناعي المخصّصين بخادم بروتوكول سياق النموذج (MCP) البعيد، يمكن لوكلائك البحث بشكل ديناميكي عن مستندات مطوّري البرامج الموثوقة والحديثة من Google واستردادها، والتي تغطي Google Cloud وFirebase وAndroid وGoogle Maps Platform وChrome وغير ذلك.

المتطلبات الأساسية

يجب استيفاء المتطلبات الأساسية التالية قبل البدء:

  1. إنشاء مفتاح Developer Knowledge API: فعِّل واجهة Developer Knowledge API وأنشئ مفتاح واجهة برمجة تطبيقات في مشروعك على Google Cloud باتّباع دليل إعداد مفتاح واجهة برمجة التطبيقات.
  2. إنشاء مفتاح Gemini API: أنشئ مفتاح API في Google AI Studio للمصادقة على نماذج Gemini، أو أعِد استخدام مفتاح Google Cloud API إذا كانت واجهة Generative Language API مفعّلة عليه.
  3. ضبط متغيرات البيئة: اضبط مفاتيح واجهة برمجة التطبيقات كمتغيرات بيئة في نافذة الأوامر:

    export DEVELOPERKNOWLEDGE_API_KEY="YOUR_API_KEY"
    export GEMINI_API_KEY="YOUR_GEMINI_API_KEY"
    
  4. تثبيت Python: تأكَّد من أنّ بيئة التطوير تستخدم الإصدار 3.10 أو إصدارًا أحدث من Python.

الربط باستخدام LangChain

يمكن لتطبيقات LangChain الاتصال بخوادم HTTP MCP البعيدة باستخدام حزمة langchain-mcp-adapters أو عمليات نقل برامج MCP العادية.

تثبيت الحِزم التابعة

ثبِّت حِزم Python المطلوبة لكلّ من LangChain وGemini وMCP:

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

ضبط وكيل LangChain

يربط المثال التالي خادم Developer Knowledge MCP بوكيل 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 من خلال مواصفات الأدوات، ما يسمح لوكلاء الاسترجاع بالبحث في مستندات Developer Knowledge أثناء الاستدلال.

تثبيت الحِزم التابعة

ثبِّت حِزم LlamaIndex الأساسية وGemini LLM وعناصر تكامل أدوات MCP:

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

ضبط إعدادات وكيل LlamaIndex

يوضّح المثال التالي كيفية الاتصال بخادم MCP البعيد باستخدام BasicMCPClient، وتضمينه في McpToolSpec، وربط الأدوات التي تم استردادها بـ FunctionAgent المستند إلى LlamaIndex والمزوّد بميزة "مدعوم من 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

يمكن لوكلاء Microsoft AutoGen التفاعل مع خوادم MCP البعيدة باستخدام إضافة autogen-ext MCP، ما يتيح التعاون بين عدة وكلاء مع إمكانية الوصول إلى مستندات المطوّرين الرسمية من Google.

تثبيت الحِزم التابعة

ثبِّت حِزم AutoGen الأساسية وحِزم إضافة MCP:

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

إعداد وكيل AutoGen

يوضّح المثال التالي كيفية الاتصال بخادم MCP البعيد باستخدام StreamableHttpServerParams وتسجيل أدوات Developer Knowledge باستخدام 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())

أفضل الممارسات المتعلّقة بدمج الوكلاء

عند إنشاء وكلاء الذكاء الاصطناعي المخصّصين باستخدام خادم Developer Knowledge MCP، اتّبِع الإرشادات التالية:

  • تحسين طلبات البحث: تضمين أسماء منتجات محدّدة وكلمات رئيسية ذات صلة في طلب البحث باللغة الطبيعية بدلاً من المصطلحات العامة، لأنّ أداتَي search_documents وanswer_query تتطابقان مع دلالات طلب البحث.
  • إدارة الرموز المميزة في نافذة السياق: استخدِم answer_query للحصول على إجابات مباشرة مستخلَصة من مجموعة مستندات Google، وتجنَّب طلب محتوى الصفحة الكامل باستخدام get_documents إلا إذا كانت تفاصيل المقتطف من search_documents غير كافية.
  • تأمين مفاتيح واجهة برمجة التطبيقات: خزِّن مفاتيح واجهة برمجة التطبيقات Developer Knowledge API وGemini API في متغيرات البيئة أو أنظمة إدارة الأسرار العادية، ولا تبرمج بيانات الاعتماد بشكل ثابت في الرمز البرمجي.

الخطوات التالية

يمكنك الاطّلاع على المراجع التالية لمعرفة المزيد عن خادم Developer Knowledge MCP: