MCP之PYTHON对接大模型遇到的坑
公众号:冒泡的肥皂
往期
- 上篇JAVA版本的:MCP对接Spring AI Alibaba遇到的坑
环境准备
python的本地安装就跳过了,IDE用自己的使用的就可以了
安装UV
pip install uv
设置您的环境
# 创建项目目录
uv init mcp-client
cd mcp-client
# 创建虚拟环境
uv venv
# 激活虚拟环境
# 在 Windows 上:
.venv\Scripts\activate
# 在 Unix 或 MacOS 上:
source .venv/bin/activate
# 安装所需的包
uv add mcp anthropic python-dotenv
# 删除样板文件
rm hello.py
# 创建我们的主文件
touch client.py
设置您的 API 密钥
需要到使用模型的官网找到对应的密钥。
创建一个 .env 文件来存储它:
创建 .env 文件
touch .env
将您的密钥添加到 .env 文件中:
ANTHROPIC_API_KEY=<your key here>
确保您的 ANTHROPIC_API_KEY 保持安全!
uv的一些命令
官方文档中给的流程图感觉不是太清晰,然后我找了一个流程图
这个流程图我再次发一下,因为对比上篇java版本的(MCP对接Spring AI Alibaba遇到的坑),python更能体会每步的流程(感觉java的封装的比较深吧
网上demo遇到的常见问题
最常见的报错1:
报错:ModuleNotFoundError: No module named 'mcp'
这问题的报错原因:因为工具加载的时候是通过命令的方式启动加载的。但是你参考的有些地方却写的是python(python环境没有安装mcp的包),改成uv就可以了等于切换了环境。
# 根据脚本类型选择执行命令
command = "uv" if is_python else "node"
server_params = StdioServerParameters(
command=command,
args=["run", server_script_path],
env=None
)
最常见的报错2:
报错:在大模型返回信息-》调用本地server-》本地信息在上传个大模型(报错)
⚠️ 发生错误: Error code: 400 - {'error': {'code': 'invalid_parameter_error', 'param': None, 'message': '<400> InternalError.Algo.InvalidParameter: messages with role "tool" must be a response to a preceeding message with "tool_calls".', 'type': 'invalid_request_error'}, 'id': 'chatcmpl-5801dfcb-208a-913e-930c-b830159810af', 'request_id': '5801dfcb-208a-913e-930c-b830159810af'}
这问题的报错原因:role的问题,把工具调用后返回给大模型做处理的时候,role:tool改为role:funcion就可以了。
#原有的信息再拼接个工具调用内容返回给大模型的参数组装
messages.append({
"role": "function",
"content": result_content,
"tool_call_id": tool['id'],
#"tool_calls": tool_calls
})