Python-MCPAgent开发-DeepSeek版本
Python-MCPAgent开发-DeepSeek版本
尝试Windows使用Python完成【McpServer】+【McpAgent】开发,当前使用OpenAI-Agents框架进行开发
1-核心知识点
- 先完成【LLM】配置
- 再完成【McpServer】开发
- 再完成【Agent】开发
- 完成【LLM】+【McpServer】+【Agent】请求互通
2-思路整理
1-开发思路
- 1-熟悉【SSE模式的MCPServer】开发
- 2-熟悉【stdio模式的MCPServer】开发
- 3-熟悉【启动MCPServer】的三种方式
- 3.1-直接启动:python mcp_server.py
- 3.2-代码中uv使用:subprocess.Popen([“uv”, “run”, server_file])
- 3.3-使用mcpInspector网页:mcp dev mcp_server.py
- 4-熟悉【Agent增强外部能力】的两种方式
- 4.1-调用tool:Agent(name=“Assistant”, instructions=“用中文回复”, tools=[get_weather])
- 4.2-调用tool:Agent(name=“Assistant”, instructions=“用中文回复”, mcp_servers=[mcp_server])
2-Tool和MCP的区别
都可以通过【平台】把肚子填饱,但是是两种【经济模式】
- 1)Tool->自家厨房
- 2)MCP->快餐外卖(一套标准的经济体系,商家和骑手语言可以互通)
3-MCP Inspector调试-两种方式
- 使用Node运行后-再调用Python脚本
- 直接使用python的mcp[cline]命令
4-Agent调用3种方式
- 1-直接使用tool
- 2-运行mcpServer_sse(远程服务->直接运行+subprocess子进程)
- 3-运行mcpServer_stdio(本地服务->直接运行)
3-参考网址
- 1)OpenAI的官方文档:https://openai.github.io/openai-agents-python/
- 2)MCP官网的Python样例:https://github.com/openai/openai-agents-python/tree/main
- 3)个人开发代码仓库:https://gitee.com/enzoism/python_mcp_02_openai_agent
4-动手实践
1-【McpServer】开发
直接参考:https://blog.csdn.net/2301_77717148/article/details/147455632
- openAI代码:https://github.com/openai/openai-agents-python/blob/main/examples/model_providers/custom_example_provider.py
- 【McpServer】个人开发代码仓库:https://gitee.com/enzoism/python_mcp_client_server/tree/master/mcp_server
2-【McpClient】开发
直接参考官网记录开发过程
1-空工程初始化环境
mkdir my_project
cd my_project
python -m venv .venv
2-激活环境
# Windows
source .venv/Scripts/activate
# Mac
source .venv/bin/activate
3-添加依赖
对应的依赖是在激活的环境中
# 1-安装MCP和Openai-agents
pip install uv httpx mcp openai-agents
4-创建.env文件
添加对应的环境变量
BASE_URL=https://api.deepseek.com/v1
API_KEY=sk-XXX
MODEL_NAME=deepseek-chat
5-创建
直接参考MCP官网的PythonClient样例:https://github.com/openai/openai-agents-python/blob/main/examples/model_providers/custom_example_provider.py
补充说明:MCP官网的PythonClient样例,没有进行环境变量的加载,在代码中我们使用dotenv进行记载(
代码基本上就是复制过来了,只做了少量的修改)
import asyncio
import osfrom agents import (Agent,Model,ModelProvider,OpenAIChatCompletionsModel,RunConfig,Runner,function_tool,set_tracing_disabled,
)
from dotenv import load_dotenv
from openai import AsyncOpenAI# 环境变量加载相关# 加载.env文件
load_dotenv()
# 从.env文件中获取BASE_URL、API_KEY、MODEL_NAME信息
BASE_URL = os.getenv("BASE_URL") or ""
API_KEY = os.getenv("API_KEY") or ""
MODEL_NAME = os.getenv("MODEL_NAME") or ""if not BASE_URL or not API_KEY or not MODEL_NAME:raise ValueError("请通过环境变量或代码设置EXAMPLE_BASE_URL、EXAMPLE_API_KEY、EXAMPLE_MODEL_NAME。")"""
本例使用自定义提供程序调用Runner.run()的部分,并直接调用OpenAI进行其他操作。
步骤:1. 创建一个自定义的OpenAI客户端。
2. 创建一个使用自定义客户端的ModelProvider。
3. 在调用Runner.run()时使用ModelProvider,仅在我们想使用自定义LLM提供程序时。
注意,在本例中,我们假设您没有从platform.openai.com获取API密钥,因此禁用了跟踪。
如果您有API密钥,您可以选择设置`OPENAI_API_KEY`环境变量或调用set_tracing_export_api_key()来设置跟踪特定的密钥。
"""
# ①创建一个自定义的OpenAI客户端-Client
client = AsyncOpenAI(base_url=BASE_URL, api_key=API_KEY)
set_tracing_disabled(disabled=True)# ②创建一个使用自定义客户端的-ModelProvider
class DeepSeekModelProvider(ModelProvider):def get_model(self, model_name: str | None) -> Model:return OpenAIChatCompletionsModel(model=model_name or MODEL_NAME, openai_client=client)# ③实例化ModelProvider对象
CUSTOM_MODEL_PROVIDER = DeepSeekModelProvider()# ④定义一个工具函数
@function_tool
def get_weather(city: str):print(f"[debug] getting weather for {city}")return f"The weather in {city} is sunny."async def main():# ⑤创建一个Agentagent = Agent(name="Assistant", instructions="你只能用中文进行回复", tools=[get_weather])# ⑥获取Agent对话的结果result = await Runner.run(agent,"给我讲一个笑话吧!",run_config=RunConfig(model_provider=CUSTOM_MODEL_PROVIDER),)print(result.final_output)# ⑦获取Agent对话的结果-没有配置RunConfig使用的是OpenAI的默认模型# result = await Runner.run(# agent,# "给我讲一个笑话吧!",# )# print(result.final_output)if __name__ == "__main__":asyncio.run(main())