iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
生成式 AI

nutc_imac_Agent拼裝車系列 第 14

Day 14 使用 ADK 串接 FastMCP Server

  • 分享至 

  • xImage
  •  

昨天我們透過 FastMCP 成功建立了一個簡單的 MCP Server,裡面只有一個簡單的工具 sayHello,能夠回傳一段打招呼的訊息。

今天,我要挑戰的是使用 ADK (Agent Development Kit),把這個 MCP Server 串接進一個 Agent 裡,讓 Agent 可以透過 MCP 工具來打招呼。這樣做的好處是,我們可以用統一的方式去管理 Agent 的 LLM 與 工具 Tools,而 MCP server 只需要專心提供功能即可。

1. MCP Server (回顧昨天)

我們昨天寫的 mcp_server.py 長這樣:

mcp = FastMCP("My MCP Server")

@mcp.tool
def sayHello(text: str) -> str:
    """回傳一段打招呼的訊息。"""
    return f"Hello, {text}!"

if __name__ == "__main__":
    mcp.run()

這個 Server 透過 mcp.run(),會使用 stdio 來跟外部溝通。

2. 在 ADK 端建立 Agent

agent = Agent(
    model=LiteLlm(
        model=os.getenv("OPENAI_API_MODEL"),
        api_key=os.getenv("OPENAI_API_KEY"),
    ),
    name="gent",
    description=prompt.AGENT_DESCRIPTION,
    instruction=prompt.AGENT_INSTRUCTION,
    tools=[
        MCPToolset(
            connection_params=StdioConnectionParams(
                server_params=StdioServerParameters(
                    command="python",
                    args=["mcp_server.py"], # 指定昨天的 MCP server
                    env=os.environ.copy(),
                )
            )
        )
    ]
)

3. 設定 Agent Prompt

在 prompt.py 裡,只讓 Agent 做打招呼:

AGENT_DESCRIPTION = """
這是一個專門用來打招呼的 Agent。
"""

AGENT_INSTRUCTION = """
- 當使用者輸入「打招呼」或相關需求時,請回覆一段簡單的招呼語。
- 如果輸入內容與打招呼無關,請直接回覆「我只能打招呼。」。
- 所有回覆一律使用繁體中文。
"""

4. 寫一個簡單的 Fastapi 端點進行測試

load_dotenv()
app = FastAPI()

class QueryRequest(BaseModel):
    query: str


session_service = InMemorySessionService()
artifacts_service = InMemoryArtifactService()

@app.post("/query")
async def ask_agent(request: QueryRequest):

    session = await session_service.create_session(
        state={"skip_agent": False},
        app_name="backend",
        user_id="user",
    )
    session_id = session.id

    # 設定傳進 Agent 的內容
    parts = [types.Part(text=request.query)]

    content = types.Content(role="user", parts=parts)

    # 建立執行 Agent 的 Runner
    runner = Runner(
        app_name="backend",
        agent=app_agent,
        artifact_service=artifacts_service,
        session_service=session_service,
    )

    # 執行 Agent
    events_async = runner.run_async(
        session_id=session_id, user_id="user", new_message=content
    )

    # 獲取回傳內容
    response = []
    async for event in events_async:
        if event.content:
            for part in event.content.parts:
                if part.text:
                    response.append(part.text)

    return {"response": "\n".join(response)}

5. 透過 curl 直接進行測試

https://ithelp.ithome.com.tw/upload/images/20250928/20150369Oi2kBteuJj.png


上一篇
Day 13 透過 FastMCP 開發 MCP Server
系列文
nutc_imac_Agent拼裝車14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言