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

使用Ollama实现工具调用的原理及Python代码实现

实现原理

这里以支持工具调用的qwen3为例,介绍实现原理。

1、安装ollama,下载并启动qwen3模型。

ollama run qwen3

2、向ollama发送对话请求。

POST http://localhost:11434/api/chat

body

{"model":"qwen3:latest","messages":[{"role":"user","content":"今天北京的天气怎么样?"}],"stream":true,"tools":[{"type":"function","function":{"name":"get_current_weather","description":"获取当前天气","parameters":{"type":"object","properties":{"location":{"type":"string","description":"城市名称","enum":["北京","上海","广州"]}},"required":["location"]}}}]}

模型返回tool_calls消息,要求调用get_current_weather工具。

{"model":"qwen3:latest","created_at":"2025-05-04T14:16:37.5915052Z","message":{"role":"assistant","content":"","tool_calls":[{"function":{"name":"get_current_weather","arguments":{"location":"北京"}}}]},"done":false}

3、把聊天历史和工具返回的结果一起发送给模型即可。

POST http://localhost:11434/api/chat

body

{"model":"qwen3:latest","messages":[{"role":"user","content":"今天北京的天气怎么样?"},{"role":"tool","content":"北京的天气是晴朗,25摄氏度","name":"get_current_weather"}],"stream":true,"tools":[{"type":"function","function":{"name":"get_current_weather","description":"获取当前天气","parameters":{"type":"object","properties":{"location":{"type":"string","description":"城市名称","enum":["北京","上海","广州"]}},"required":["location"]}}}]}

模型返回结果。

<think> 好的,用户问今天北京的天气怎么样。我需要先调用get_current_weather函数来获取天气信息。根据工具中的定义,这个函数需要location参数,且北京是允许的选项之一。所以,我应该生成一个工具调用,指定北京作为地点。然后,假设函数返回了晴朗和25度的数据,我需要用自然的中文回复用户,说明天气情况。确保回答简洁明了,符合用户的需求。 </think> 今天北京的天气是晴朗的,气温25摄氏度,适合外出活动。

Python源码

importrequests api_base="http://localhost:11434"defget_current_weather(location:str):iflocation=="北京":return"北京的天气是晴朗,25摄氏度"eliflocation=="上海":return"上海的天气是多云,20摄氏度"else:return"广州的天气是晴朗,25摄氏度"message={"model":"qwen3:latest","messages":[{"role":"user","content":"今天北京的天气怎么样?"}],"stream":False,"tools":[{"type":"function","function":{"name":"get_current_weather","description":"获取当前天气","parameters":{"type":"object","properties":{"location":{"type":"string","description":"城市名称","enum":["北京","上海","广州"],}},"required":["location"],},},}],}# 第一轮对话result=requests.post(f"{api_base}/api/chat",json=message)print(result.text)message["messages"].append({"role":"tool","content":get_current_weather("北京"),"name":"get_current_weather",})# 第二轮对话result=requests.post(f"{api_base}/api/chat",json=message)print(result.text)

返回结果:

{"model":"qwen3:latest","created_at":"2025-05-04T14:40:17.5745628Z","message":{"role":"assistant","content":"","tool_calls":[{"function":{"name":"get_current_weather","arguments":{"location":"北京"}}}]},"done_reason":"stop","done":true,"total_duration":12648830200,"load_duration":12336100,"prompt_eval_count":152,"prompt_eval_duration":354411300,"eval_count":108,"eval_duration":12280590400}
{"model":"qwen3:latest","created_at":"2025-05-04T14:40:35.5741283Z","message":{"role":"assistant","content":"\u003cthink\u003e\n好的,用户问今天北京的天气怎么样。我需要先调用get_current_weather函数来获取天气信息 。根据工具里的函数定义,参数是location,必须是北京、上海或广州中的一个。用户提到的是北京,所以参数没问题。 调用函数后,假设返回的结果是晴朗,25度。然后我要组织回答,用自然的中文告诉用户天气情况,包括天气状况和温度 ,并保持口语化,避免使用专业术语或格式。确认没有其他参数需要处理,直接回答即可。\n\u003c/think\u003e\n\n今 天北京的天气是晴朗的,气温在25摄氏度左右,非常适合外出活动哦!"},"done_reason":"stop","done":true,"total_duration":17993911600,"load_duration":13278100,"prompt_eval_count":173,"prompt_eval_duration":685325300,"eval_count":139,"eval_duration":17292244200}

原文:手把手教你用Ollama实现工具调用,三行Python代码看懂MCP原理 - 超腾开源

http://www.jsqmd.com/news/909008/

相关文章:

  • Raw Accel终极鼠标加速指南:7种曲线类型让你的游戏体验飞升
  • 2026恩施市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一修哥咨询
  • ai-medical-model-32bit实战教程:3行代码构建你的私人医疗AI助手
  • 技术变革下的焦虑应对:构建个人技术演进体系与实战策略
  • G3800,MG3660,MG3640S,ts3380,MG5380,MG5480,MG6280,G5080,TS8380,MG6380报错5B00,P07,E08,1700,5b04废墨垫清零,亲测
  • 2026阜新市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一修哥咨询
  • Z-Anime模型原理揭秘:S3-DiT架构如何实现6B参数高效推理
  • Beyond Compare 5终极激活指南:5分钟免费获取永久授权密钥
  • UnrealPakViewer:终极Pak文件分析工具,深度解密虚幻引擎资源封装
  • CANN鸿蒙推理AscendCL接口文档
  • 全球大脑层技术正从“感知驱动”迈向“认知驱动与软硬协同”新阶段
  • Arm Development Studio历史版本下载与工程实践指南
  • 2026年铜雕塑厂家推荐及景观雕塑生产厂家优点解析 - 栗子测评
  • 2026年太原汉图装饰性价比高吗? - mypinpai
  • 如何理解Illustrious XL v0.1架构:Stable Diffusion XL模型原理解析指南 [特殊字符]
  • LC正弦波振荡器设计避坑指南:Multisim仿真中如何平衡起振、幅度与频率稳定度
  • Raw Accel终极指南:7种鼠标加速曲线让你的游戏体验飞升
  • 从Typecho反序列化到Git仓库Getshell:一次完整的BugKu PRA靶场渗透实战复盘(含所有Payload)
  • 别再只做Logistic回归了!用Stata和R搞定GLMM(广义线性混合模型),处理非正态和重复测量数据
  • 从DVWA的upload漏洞看PHP文件上传安全:一个后端开发者的防御实战笔记
  • 5分钟零配置:Jable视频下载终极方案
  • AI专著撰写必备:精选AI工具,快速产出20万字专著书稿!
  • 浙江全日制高复学校 2026 报名条件与流程解析 - 玖叁鹿
  • 2026专业低露点实验室装修公司推荐:驰川建设领衔,口碑出众的微生物实验室装修公司盘点 - 栗子测评
  • 别再乱拔了!移动硬盘盘符从F变E的保姆级修复教程(附磁盘管理工具详解)
  • 如何快速配置虚拟手柄驱动:Windows玩家的完整指南
  • 2026广东靠谱全屋定制品牌评测:欧雅尊领衔 - 服务品牌热点
  • 终极指南:ppf-contact-solver如何引领人工智能与物理模拟融合新趋势
  • LoRA微调LLM实现自动化硬件断言生成
  • 2026年仿威图机柜费用排名,哪家费用低? - mypinpai