模型上下文协议(Model Context Protocol, MCP)可帮助大模型使用外部工具与数据,相比 Function Calling,MCP 更灵活且易于使用。本文介绍通过阿里云百炼模型服务接入 MCP 的方法。
效果展示
以上组件仅供您参考,已对工具名称与入参进行简化,且并未真实发送请求。
前提条件
您需要已获取API Key并配置API Key到环境变量。
本文以 qwen-plus-latest
模型为例,子业务空间的 API Key 请确保主账号已为该业务空间进行模型授权。
通过代码调用 MCP 工具
Qwen-Agent 是通义实验室推出的 Agent 开发框架,充分利用了通义千问模型的指令遵循、工具使用、规划与记忆能力。
Qwen Chat 当前使用 Qwen-Agent 框架作为后端引擎。
1. 安装依赖
运行以下命令安装qwen-agent
依赖。
Python 版本建议不低于 3.10。
pip install -U "qwen-agent[gui,mcp]"
2. 添加 MCP 服务并运行代码
以高德地图与网页部署 MCP 服务器为例。前往ModelScope的MCP 广场,分别找到高德地图与EdgeOne Pages,通过右侧的通过SSE URL连接服务获取专属URL。
高德地图可以完成路径规划、天气查询等功能;EdgeOne Pages 可以将 HTML 内容部署为可公网访问的链接。
用 MCP 服务的专属 URL 替换tools
中的对应位置并运行代码。
import os
from qwen_agent.agents import Assistant
# LLM 配置
llm_cfg = {
"model": "qwen-plus-latest",
"model_server": "https://dashscope.aliyuncs.com/compatible-mode/v1",
# 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx"
"api_key": os.getenv("DASHSCOPE_API_KEY"),
}
# 系统消息
system = "你是会天气查询、地图查询、网页部署的助手"
# 工具列表
tools = [
{
"mcpServers": {
"amap-maps": {
"type": "sse",
# 替换为您的 URL
"url": "https://mcp.api-inference.modelscope.net/xxx/sse",
},
"edgeone-pages-mcp": {
"type": "sse",
# 替换为您的 URL
"url": "https://mcp.api-inference.modelscope.net/xxx/sse",
},
}
}
]
# 创建助手实例
bot = Assistant(
llm=llm_cfg,
name="助手",
description="高德地图、天气查询、公网链接部署",
system_message=system,
function_list=tools,
)
messages = []
while True:
query = input("\nuser question: ")
if not query.strip():
print("user question cannot be empty!")
continue
messages.append({"role": "user", "content": query})
bot_response = ""
is_tool_call = False
tool_call_info = {}
for response_chunk in bot.run(messages):
new_response = response_chunk[-1]
if "function_call" in new_response:
is_tool_call = True
tool_call_info = new_response["function_call"]
elif "function_call" not in new_response and is_tool_call:
is_tool_call = False
print("\n" + "=" * 20)
print("工具调用信息:", tool_call_info)
print("工具调用结果:", new_response)
print("=" * 20)
elif new_response.get("role") == "assistant" and "content" in new_response:
incremental_content = new_response["content"][len(bot_response):]
print(incremental_content, end="", flush=True)
bot_response += incremental_content
messages.extend(response_chunk)
提问示例:
我爸妈今天下午到萧山机场,请你规划一条从萧山机场到阿里巴巴云谷园区的公共交通路线(地铁和巴士都可),并且部署为公网链接,这样我就可以转发给我爸妈了
Qwen Agent 调用 MCP 工具后进行回复:
已为您规划好从萧山机场到阿里巴巴云谷园区的公共交通路线,并生成了专属网页链接,方便您转发给父母。
您可以通过以下链接查看详细的出行指南:
**[点击查看出行指南](https://mcp.edgeone.site/share/xxx_xxx)**
该指南包含:
- **最快路线**(约109分钟):地铁19号线 → 公交343路
- **备选路线**(换乘少):地铁19号线 → 公交349路
- 详细的步行指引和换乘说明
- 实用的出行小贴士(如使用支付宝扫码乘车等)
祝您父母旅途顺利!
Qwen-Agent 提供了可视化界面进行交互,请替换以下代码中的 URL 后运行:
import os
from qwen_agent.agents import Assistant
from qwen_agent.gui import WebUI
# LLM 配置
llm_cfg = {
"model": "qwen-plus-latest",
"model_server": "https://dashscope.aliyuncs.com/compatible-mode/v1",
# 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx"
"api_key": os.getenv("DASHSCOPE_API_KEY"),
}
# 系统消息
system = "你是会天气查询、地图查询、网页部署的助手"
# 工具列表
tools = [
{
"mcpServers": {
"amap-maps": {
"type": "sse",
# 替换为您的 URL
"url": "https://mcp.api-inference.modelscope.net/xxx/sse",
},
"edgeone-pages-mcp": {
"type": "sse",
# 替换为您的 URL
"url": "https://mcp.api-inference.modelscope.net/xxx/sse",
},
}
}
]
# 创建助手实例
bot = Assistant(
llm=llm_cfg,
name="助手",
description="高德地图、天气查询、公网链接部署",
system_message=system,
function_list=tools,
)
WebUI(bot).run()
界面显示Running on local URL: http://127.0.0.1:7860
后访问该链接。
通过可视化界面调用 MCP 工具
阿里云百炼的智能体应用与工作流应用:请参见接入智能体应用和工作流应用。
第三方大模型客户端:支持多种主流大模型客户端,例如 Cherry Studio。
该文章对您有帮助吗?