当前位置: 首页 > news >正文

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())

相关文章:

  • iOS实名认证模块的具体实现过程(swift)
  • 【C++】16.继承
  • 【东枫科技】使用LabVIEW进行深度学习开发
  • SaaS场快订首页的前端搭建【持续更新】
  • 【每日一题 | 2025年5.5 ~ 5.11】搜索相关题
  • JavaWeb, Spring, Spring Boot
  • 《Go小技巧易错点100例》第三十一篇
  • 画立方体软件开发笔记 js-pytorch xlsx 导出 excel pnpm安装
  • Apache Flink 与 Flink CDC:概念、联系、区别及版本演进解析
  • 【EBNF】EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解
  • Active-Prompt:结合思维链的主动提示用于大型语言模型
  • ElasticSearch入门详解
  • Git初始化相关配置
  • GO语言内存管理结构
  • Nginx的增强与可视化!OpenResty Manager - 现代化UI+高性能反向代理+安全防护
  • Flutter基础()
  • 【C/C++】无符号调试:GDB解栈实战指南
  • 学习和测试WebApi项目限制客户端ip访问接口(基于中间件)
  • 深度学习入门:从神经网络基础到前向传播全面解析
  • [洛谷刷题8]
  • 李强会见巴西总统卢拉
  • 科创板年内第3家!健信超导IPO获受理,拟募资8.65亿
  • 人大新闻教育70年丨16759门课程里的时代密码
  • 水豚“豆包”出逃已40天,扬州茱萸湾景区追加悬赏
  • 27岁杨阳拟任苏木镇党委副职,系2020年内蒙古自治区选调生
  • 中美瑞士会谈后中国会否取消矿产出口许可要求?外交部回应