# python_mcp_02_openai_agent **Repository Path**: enzoism/python_mcp_02_openai_agent ## Basic Information - **Project Name**: python_mcp_02_openai_agent - **Description**: 使用OpenAI的Agent框架开发MCP - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-11 - **Last Updated**: 2025-05-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python-MCPAgent开发-DeepSeek版本 > 尝试Windows使用Python完成【McpServer】+【McpAgent】开发,当前使用OpenAI-Agents框架进行开发 ![](https://i-blog.csdnimg.cn/direct/c11a133b786e4b16b3b86dcfab9d63a1.png) --- ## 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(本地服务->直接运行) ![](https://i-blog.csdnimg.cn/direct/cfbc6e1fd1b74fde8f5b4c4fa9783f68.png) --- ## 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_client_server --- ## 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 os from 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(): # ⑤创建一个Agent agent = 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()) ``` ![](https://i-blog.csdnimg.cn/direct/78a2e1d4fddf4afb858d1a60499a79ea.png)