| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- """
- 第 5 步:让 Qwen Agent 自己决定是否调用 MCP 工具。
- 前面 step2/step3 是我们在代码里手动调用工具:
- tool_map["search_hotels"].ainvoke(...)
- 这一步变成:
- 用户用自然语言提问
- Qwen 判断该调用 search_transport 还是 search_hotels
- MCP Server 执行工具
- Qwen 根据工具结果回答
- 运行:
- python step5_qwen_agent_use_mcp.py
- """
- from __future__ import annotations
- import asyncio
- import os
- import sys
- from pathlib import Path
- from dotenv import load_dotenv
- from langchain.agents import create_agent
- from langchain_mcp_adapters.client import MultiServerMCPClient
- from langchain_openai import ChatOpenAI
- def build_qwen_model() -> ChatOpenAI:
- load_dotenv()
- api_key = os.getenv("DASHSCOPE_API_KEY")
- if not api_key:
- raise RuntimeError("请先在 .env 里填写 DASHSCOPE_API_KEY。")
- return ChatOpenAI(
- api_key=api_key,
- base_url=os.getenv("QWEN_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1"),
- model=os.getenv("QWEN_MODEL", "qwen-plus"),
- temperature=0.2,
- )
- async def main() -> None:
- server_file = Path(__file__).with_name("my_mcp_demo.py").resolve()
- client = MultiServerMCPClient(
- {
- "travel-tools": {
- "transport": "stdio",
- "command": sys.executable,
- "args": [str(server_file)],
- }
- }
- )
- tools = await client.get_tools()
- print("Qwen Agent 可用的 MCP 工具:", [tool.name for tool in tools])
- model = build_qwen_model()
- agent = create_agent(
- model=model,
- tools=tools,
- system_prompt=(
- "你是一个旅行助手。"
- "当用户询问住宿时,优先使用 search_hotels 工具;"
- "当用户询问城市间交通时,优先使用 search_transport 工具;"
- "拿到工具结果后,用中文自然语言回答。"
- ),
- )
- result = await agent.ainvoke(
- {
- "messages": [
- {
- "role": "user",
- "content": "我想 2026-08-15 从成都去重庆玩 3 天 2 晚,帮我看看交通和住宿怎么安排。",
- }
- ]
- }
- )
- print("\nQwen Agent 最终回答:")
- print(result["messages"][-1].content)
- if __name__ == "__main__":
- asyncio.run(main())
|