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

智能体 MCP 调用流

image

 

"""
简单的智能体 Demo
使用阿里千问判断并调用对应的 MCP 工具
"""
import os
from openai import OpenAI# 阿里千问 API 配置(兼容 OpenAI 格式)
client = OpenAI(api_key=os.getenv("DASHSCOPE_API_KEY", "sk-xxxxxxxxxxxxxxxxxxxx"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)# 定义工具(模拟 MCP 工具)
TOOLS = [{"type": "function","function": {"name": "get_weather","description": "获取指定城市的天气信息","parameters": {"type": "object","properties": {"city": {"type": "string", "description": "城市名称,如:北京、上海"}},"required": ["city"]}}},{"type": "function","function": {"name": "get_time","description": "获取当前时间","parameters": {"type": "object", "properties": {}}}},{"type": "function","function": {"name": "calculate","description": "进行数学计算","parameters": {"type": "object","properties": {"expression": {"type": "string", "description": "数学表达式,如:1+2*3"}},"required": ["expression"]}}}
]# 工具实现(写死的数据)
def get_weather(city: str) -> str:weather_data = {"北京": "晴,5°C,北风3级","上海": "多云,12°C,东风2级","广州": "阴,20°C,南风1级",}return weather_data.get(city, f"暂不支持查询 {city} 的天气")def get_time() -> str:from datetime import datetimereturn datetime.now().strftime("%Y-%m-%d %H:%M:%S")def calculate(expression: str) -> str:try:return str(eval(expression))except:return "计算出错"# 工具调用映射
TOOL_FUNCTIONS = {"get_weather": get_weather,"get_time": get_time,"calculate": calculate,
}def run_agent(user_input: str):"""运行智能体"""print(f"\n用户: {user_input}")# 1. 调用千问,让它判断使用哪个工具response = client.chat.completions.create(model="qwen-plus",messages=[{"role": "system", "content": "你是一个智能助手,根据用户需求调用合适的工具。"},{"role": "user", "content": user_input}],tools=TOOLS,tool_choice="auto")msg = response.choices[0].message# 2. 如果模型决定调用工具if msg.tool_calls:tool_call = msg.tool_calls[0]func_name = tool_call.function.nameargs = eval(tool_call.function.arguments) if tool_call.function.arguments else {}print(f"智能体决定调用: {func_name}({args})")# 3. 执行工具result = TOOL_FUNCTIONS[func_name](**args)print(f"工具返回: {result}")# 4. 把结果返回给模型生成最终回复final_response = client.chat.completions.create(model="qwen-plus",messages=[{"role": "system", "content": "你是一个智能助手"},{"role": "user", "content": user_input},msg,{"role": "tool", "tool_call_id": tool_call.id, "content": result}])print(f"智能体: {final_response.choices[0].message.content}")else:# 不需要工具,直接回复print(f"智能体: {msg.content}")if __name__ == "__main__":# 测试几个场景run_agent("北京天气怎么样?")run_agent("现在几点了?")run_agent("帮我算一下 123 * 456")run_agent("你好")

  结果:

用户: 北京天气怎么样?
智能体决定调用: get_weather({'city': '北京'})
工具返回: 晴,5°C,北风3级
智能体: 今天北京天气晴朗,气温为5°C,有北风3级。建议外出时注意保暖,适当增添衣物。用户: 现在几点了?
智能体决定调用: get_time({})
工具返回: 2025-12-30 11:27:43
智能体: 现在是2025年12月30日,星期二,上午11点27分。用户: 帮我算一下 123 * 456
智能体决定调用: calculate({'expression': '123*456'})
工具返回: 56088
智能体: 123 × 456 = 56088用户: 你好
智能体: 你好!有什么我可以帮你的吗?

  

http://www.gsyq.cn/news/186114.html

相关文章:

  • EFQRCode与CoreGraphics集成终极指南:从理论到实践的5步性能优化方案
  • 骑马修栅栏(fence)(信息学奥赛一本通- P1375)
  • 适配器工厂怎么选择?2025插墙式适配器工厂推荐 - 栗子测评
  • WeKnora智能知识平台极速部署手册:从小白到专家的完整指南
  • JMeter Prometheus插件终极指南:快速构建实时性能监控体系
  • 2025年热门的气动点胶阀/顶针式点胶阀厂家最新实力排行 - 品牌宣传支持者
  • 2025单多袋式过滤机器厂家推荐 南京博滤产能领先专利众多服务优质 - 爱采购寻源宝典
  • AlphaFold蛋白质结构预测完全手册:从序列到三维模型的终极指南
  • 2025年深圳翻译机构哪家好?商务翻译生产/服务公司专业排名测评推荐 - myqiye
  • Git diff比较两个TensorFlow模型配置文件差异
  • Volatility3内存取证终极指南:从入门到实战精通
  • 液动/智能拍门厂家推荐哪家好?2025实力品牌TOP10揭晓 - 栗子测评
  • 戴森球计划工厂蓝图优化终极方案:如何解决5大常见生产瓶颈问题
  • 2025年终北京卫浴商场推荐:TOP5排名揭晓,基于品牌覆盖与用户口碑深度对比。 - 品牌推荐
  • Jupyter nbconvert导出Notebook为PDF报告
  • 2025年热门的金属圆锯机/圆锯片圆锯机厂家最新推荐排行榜 - 品牌宣传支持者
  • Cheetah-Software四足机器人控制框架:5步快速入门指南
  • 2025文旅改造公司TOP5权威推荐:新深度测评指南,甄选企业助力文旅焕新腾飞 - 工业品牌热点
  • 2025年终产业园区推荐:服务能力与园区规模双维度实测TOP5排名。 - 品牌推荐
  • 2025年终汕头厂房公司推荐:安全标准与客户满意度双维度实测TOP5盘点。 - 品牌推荐
  • diskinfo定期巡检预防TensorFlow存储空间不足风险
  • 一站式解决方案:TensorFlow-v2.9镜像 + GPU算力租用服务
  • 2025年伸缩悬臂货架定制厂家权威评测,重型货架超强承重/板材放置架/铁板货架/伸缩悬臂货架/横梁式货架伸缩悬臂货架厂商排行榜单 - 品牌推荐师
  • Elden Ring Diffusion终极指南:5步打造专业级黑暗奇幻艺术
  • 抗干扰设计考量:有源蜂鸣器和无源区分项目应用
  • S32DS与S32K烧录调试问题快速理解
  • 开源计量计费平台Lago:重新定义基于使用量的价值定价
  • 5分钟搞定AutoHotkey键盘布局切换器:告别多语言输入烦恼的终极方案
  • Vue.Draggable内存优化探索:从页面卡顿到性能提升的实践之旅
  • 使用SSH执行远程TensorFlow训练脚本无需图形界面