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

Claude Tool Use 怎么用?从零到生产的完整教程(2026)

上周接了个需求做一个能查天气、查数据库、还能发邮件的 AI 助手。一开始想着用 LangChain 套一层后来发现 Claude 原生的 Tool Use也叫 Function Calling已经很成熟了根本不需要额外框架。但官方文档写得有点绕我踩了不少坑才把整条链路跑通。把摸索出来的东西全写下来让你少走弯路。Claude Tool Use 是 Anthropic 提供的原生函数调用能力允许你在对话中定义工具函数Claude 会自动判断何时调用哪个工具、提取参数你执行函数后把结果返回给它它再生成最终回答。目前 Claude Sonnet 4.6 和 Opus 4.6 都支持Sonnet 性价比最高Opus 复杂推理更强。先说结论维度说明支持模型Claude Opus 4.6、Sonnet 4.6、Haiku 4.6协议格式Anthropic 原生格式 / OpenAI 兼容格式均可核心流程定义工具 → 发送请求 → Claude 返回工具调用 → 你执行函数 → 结果回传 → Claude 生成回答并行调用支持一次可调用多个工具嵌套调用支持工具结果可触发新一轮工具调用踩坑重灾区tool_result 的 content 必须是字符串、工具描述写得烂会导致调用率暴跌核心流程一图看懂本地工具函数Claude API你的代码本地工具函数Claude API你的代码发送消息 工具定义返回 tool_use要调用哪个工具、参数是什么执行本地函数返回执行结果把 tool_result 回传Claude 生成最终回答这个流程是整个 Tool Use 的骨架后面的代码全是围绕这个转的。环境准备pipinstallopenai httpx这里用的是 OpenAI SDK。因为很多聚合平台都兼容 OpenAI 协议Claude 的 Tool Use 在 OpenAI 兼容模式下也能正常工作切换模型零成本。方案一基础 Tool Use单工具调用先来最简单的场景——让 Claude 调用一个查天气的函数。importjsonfromopenaiimportOpenAI clientOpenAI(api_keyyour-api-key,base_urlhttps://api.ofox.ai/v1# 聚合接口一个 Key 调 Claude/GPT/Gemini)# 1. 定义工具tools[{type:function,function:{name:get_weather,description:获取指定城市的当前天气信息包括温度、湿度、天气状况,parameters:{type:object,properties:{city:{type:string,description:城市名称如北京、上海、深圳},unit:{type:string,enum:[celsius,fahrenheit],description:温度单位默认摄氏度}},required:[city]}}}]# 2. 你的本地函数实际项目中这里调真实 APIdefget_weather(city:str,unit:strcelsius)-dict:# 模拟数据实际替换成真实天气 APIfake_data{北京:{temp:22,humidity:45,condition:晴},上海:{temp:26,humidity:72,condition:多云},深圳:{temp:31,humidity:80,condition:雷阵雨},}datafake_data.get(city,{temp:20,humidity:50,condition:未知})ifunitfahrenheit:data[temp]data[temp]*9/532data[city]city data[unit]unitreturndata# 3. 发送请求messages[{role:user,content:深圳今天天气怎么样适合跑步吗}]responseclient.chat.completions.create(modelclaude-sonnet-4.6,messagesmessages,toolstools,tool_choiceauto# 让 Claude 自己决定要不要调工具)# 4. 处理工具调用assistant_messageresponse.choices[0].messageifassistant_message.tool_calls:# Claude 决定调用工具messages.append(assistant_message)# 先把 assistant 消息加进去fortool_callinassistant_message.tool_calls:func_nametool_call.function.name func_argsjson.loads(tool_call.function.arguments)print(fClaude 要调用:{func_name}({func_args}))# 执行本地函数iffunc_nameget_weather:resultget_weather(**func_args)# 把结果回传注意content 必须是字符串messages.append({role:tool,tool_call_id:tool_call.id,content:json.dumps(result,ensure_asciiFalse)})# 5. 让 Claude 根据工具结果生成最终回答final_responseclient.chat.completions.create(modelclaude-sonnet-4.6,messagesmessages,toolstools)print(final_response.choices[0].message.content)else:# Claude 觉得不需要调工具直接回答了print(assistant_message.content)实测输出Claude 要调用: get_weather({city: 深圳}) 深圳今天31°C湿度80%有雷阵雨。不太建议户外跑步哦 湿度太高容易中暑雷阵雨也不安全。建议等晚上凉快点再去 或者去室内跑步机上练练。Claude 不是机械地把数据复述一遍它会结合天气数据给出建议。这就是 Tool Use 比硬编码模板强的地方。方案二多工具 自动循环调用真实项目很少只有一个工具。下面这个例子定义了三个工具并且实现了自动循环——Claude 可能调完一个工具还想调另一个代码自动处理。importjsonfromopenaiimportOpenAI clientOpenAI(api_keyyour-api-key,base_urlhttps://api.ofox.ai/v1)# 定义多个工具tools[{type:function,function:{name:search_products,description:根据关键词搜索商品返回商品列表名称、价格、库存,parameters:{type:object,properties:{keyword:{type:string,description:搜索关键词},max_results:{type:integer,description:最多返回几条默认5}},required:[keyword]}}},{type:function,function:{name:get_product_reviews,description:获取指定商品ID的用户评价摘要,parameters:{type:object,properties:{product_id:{type:string,description:商品ID}},required:[product_id]}}},{type:function,function:{name:create_order,description:创建订单。注意仅在用户明确表示要购买时才调用,parameters:{type:object,properties:{product_id:{type:string},quantity:{type:integer,description:购买数量默认1}},required:[product_id]}}}]# 模拟业务函数defsearch_products(keyword,max_results5):return[{id:P001,name:f机械键盘-{keyword}款,price:359,stock:42},{id:P002,name:f薄膜键盘-{keyword}入门,price:89,stock:156},]defget_product_reviews(product_id):reviews{P001:{score:4.7,count:2341,summary:手感好Cherry轴就是有点吵},P002:{score:4.1,count:892,summary:便宜够用适合办公},}returnreviews.get(product_id,{score:0,summary:暂无评价})defcreate_order(product_id,quantity1):return{order_id:ORD20260329001,status:created,product_id:product_id,quantity:quantity}# 函数路由FUNC_MAP{search_products:search_products,get_product_reviews:get_product_reviews,create_order:create_order,}defchat_with_tools(user_input:str):messages[{role:system,content:你是一个电商购物助手帮用户搜索商品、查看评价、下单购买。},{role:user,content:user_input}]max_rounds5# 防止死循环forround_numinrange(max_rounds):responseclient.chat.completions.create(modelclaude-sonnet-4.6,messagesmessages,toolstools,tool_choiceauto)msgresponse.choices[0].message# 没有工具调用说明 Claude 准备好回答了ifnotmsg.tool_calls:returnmsg.content# 有工具调用执行并回传messages.append(msg)fortool_callinmsg.tool_calls:func_nametool_call.function.name func_argsjson.loads(tool_call.function.arguments)print(f [Round{round_num1}] 调用{func_name}({func_args}))resultFUNC_MAP[func_name](**func_args)messages.append({role:tool,tool_call_id:tool_call.id,content:json.dumps(result,ensure_asciiFalse)})return工具调用轮次超限请简化问题# 测试answerchat_with_tools(我想买个键盘打代码用帮我看看有啥推荐的评价好的那种)print(answer)跑起来后Claude 会先调search_products看到结果后自动调get_product_reviews查评价再综合两次结果给出推荐。两轮工具调用全自动。踩坑记录这部分是我花时间最多的地方。坑 1tool_result 的 content 不是字符串直接报错content字段必须是字符串不能直接传 dict。# ❌ 错误写法messages.append({role:tool,tool_call_id:tool_call.id,content:{temp:22}# 这会报 422 错误})# ✅ 正确写法messages.append({role:tool,tool_call_id:tool_call.id,content:json.dumps({temp:22},ensure_asciiFalse)})坑 2工具描述写太简单Claude 不调或者乱调这个坑比较隐蔽。我一开始给get_weather的 description 写的是获取天气三个字。结果 Claude 经常不调这个工具直接瞎编一个天气回答。description 要写清楚三件事这个函数干什么、输入什么、返回什么。参数的 description 也一样别偷懒。# ❌ 太简单description:获取天气# ✅ 写清楚description:获取指定城市的当前天气信息返回温度数字、湿度百分比、天气状况文字描述坑 3忘记把 assistant message 加回 messages这个 bug 特别坑报错信息还不明显。Claude 返回工具调用后必须先把那条 assistant 消息原封不动加回 messages再加 tool result顺序不能乱。# ❌ 漏掉了 assistant messagemessages.append({role:tool,tool_call_id:tool_call.id,content:result_str})# ✅ 先加 assistant再加 tool resultmessages.append(assistant_message)# 这一步不能少messages.append({role:tool,tool_call_id:tool_call.id,content:result_str})坑 4并行工具调用时 tool_call_id 必须一一对应Claude 有时候一次返回多个 tool_calls比如同时查两个城市的天气。每个 tool_result 的tool_call_id必须和对应的 tool_call 匹配搞混了就 400 错误。用上面for tool_call in msg.tool_calls的写法就不会出问题。tool_choice 参数详解这个参数控制 Claude 调不调工具、怎么调值行为适用场景autoClaude 自己决定推荐大多数场景none禁止调工具纯聊天轮次required强制必须调工具你确定这轮一定要调工具{type: function, function: {name: xxx}}强制调指定工具流程编排、测试90% 的时候用auto就够了。只有在做严格的多步骤流程编排时才需要强制指定。小结Claude Tool Use 的核心就是那个请求-调用-回传的循环搞懂这个剩下的都是细节。重点记四条description 要写详细、content 必须是字符串、assistant message 不能漏、循环要设上限防死循环。我现在用的方案是通过 ofox.ai 的聚合接口调 Claude它是一个 AI 模型聚合平台一个 API Key 可以调 Claude Opus 4.6、GPT-5、Gemini 3 等 50 模型低延迟直连支持支付宝付款。换模型不用改代码Claude 的 Tool Use 和 GPT-5 的 Function Calling 用同一套代码就能跑方便对比效果。代码我放 Gist 上了直接 copy 就能跑。有问题评论区见。

相关文章:

Claude Tool Use 怎么用?从零到生产的完整教程(2026)

上周接了个需求,做一个能查天气、查数据库、还能发邮件的 AI 助手。一开始想着用 LangChain 套一层,后来发现 Claude 原生的 Tool Use(也叫 Function Calling)已经很成熟了,根本不需要额外框架。但官方文档写得有点绕&…...

TurboWarp Packager:让Scratch作品突破平台限制的跨平台打包工具

TurboWarp Packager:让Scratch作品突破平台限制的跨平台打包工具 【免费下载链接】packager Converts Scratch projects into HTML files, zip archives, or executable programs for Windows, macOS, and Linux. 项目地址: https://gitcode.com/gh_mirrors/pack/…...

电脑PC下载SMART200PLC和SMART 触摸屏程序的方法

西门子S7-200smartPLC和smart触摸屏通过本笔记本下载程序时,笔记本和smart触摸屏需完成相应设置,即笔记本电脑和smart触摸屏需通过固定IP通信下载程序,设置方法如下,本文档设置之前默认已将电脑、PLC和触摸屏通过RJ45接口网线连接…...

DeOldify图像上色服务完整流程:基于Flask的Web服务部署与使用

DeOldify图像上色服务完整流程:基于Flask的Web服务部署与使用 1. 项目概述与核心功能 DeOldify图像上色服务是一个基于深度学习技术的Web应用,能够将黑白或褪色的老照片自动转换为彩色图像。这个项目通过简单的Web界面,让用户无需任何技术背…...

springboot+vue基于web的大学生课程排课管理系统设计

目录 功能模块分析后台管理系统(SpringBoot)前端系统(Vue) 技术实现要点 项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 功能模块分析 后台管理系统(SpringBoot&…...

CTF新手必看:攻防世界幂数加密题解(附Python脚本)

CTF密码学实战:从零破解幂数加密的完整指南 第一次接触CTF密码学题目时,看到那串神秘数字"8842101220480224404014224202480122",我的大脑就像被加密了一样完全空白。直到理解了幂数加密的精髓,才发现这不过是字母游戏…...

基于hadoop+spark+hive 机器学习物流管理系统 货运路线规划系统 智慧交通 计算机毕业设计 Echarts可视化

1、项目介绍 技术栈: Python语言、Django框架、Echarts可视化、MySQL数据库、HTML、报表、物流信息、多角色登录、物流管理该系统采用python和django两种常见的框架,通过MVT来实现对数据集 成和分析,从而更好地满足各种需求。此外&#xff0c…...

手把手教你用FreeRTOS创建第一个任务:从栈初始化到SVC调用的完整流程

深入解析FreeRTOS任务启动机制:从栈初始化到任务切换的实战指南 在嵌入式开发领域,实时操作系统(RTOS)已成为复杂项目的标配工具。作为开源RTOS中的佼佼者,FreeRTOS凭借其轻量级、可移植性强等特点,在STM32等Cortex-M系列MCU上广…...

泛微OA E9提醒功能实战:手把手教你用HTML美化定时邮件,告别枯燥系统通知

泛微OA E9邮件提醒设计指南:打造高转化率的HTML通知模板 每周五下午3点,市场部的李经理都会收到一封来自OA系统的周报提醒邮件。与往常不同的是,这次邮件的设计让人眼前一亮——精致的品牌配色、清晰的行动按钮、适配手机的版式布局。原本被…...

APIFox签名生成实战:从环境变量配置到MD5签名一键搞定

APIFox签名生成实战:从环境变量配置到MD5签名一键搞定 在接口开发与测试过程中,签名机制是保障接口安全性的重要手段。APIFox作为一款强大的API协作平台,提供了灵活的脚本功能,能够帮助开发者快速实现签名生成与自动化测试。本文将…...

当LLM学会“思考”算法逻辑:拆解EoH如何用“思想+代码”协同进化,碾压传统自动设计

当LLM成为算法设计师:揭秘EoH如何用“思维代码”双螺旋进化重塑自动算法设计 想象一下,你正在指挥一支由建筑师和施工队组成的特殊团队。建筑师负责绘制蓝图,施工队负责将蓝图变为现实。但与传统团队不同,你的建筑师能根据施工反…...

SMT贴片机核心构造与PCB组装效率提升全解析

1. SMT贴片机核心构造解析 SMT贴片机作为电子制造产线的"心脏",其构造精密程度直接决定了PCB组装的效率和质量。现代贴片机就像一台高度智能化的机器人,由机械系统、电子控制系统和视觉系统三大部分组成。我拆解过不少机型,发现它们…...

告别“瞎测”:如何用Tessent ATPG生成高效测试向量(Pattern)提升芯片良率

芯片测试效率革命:Tessent ATPG实战指南与良率提升策略 在半导体行业,每一纳秒的测试时间缩减都可能转化为数百万美元的成本节约。当芯片设计进入7nm以下工艺节点时,制造缺陷导致的良率问题愈发突出,传统测试方法已无法满足现代芯…...

TCGA数据下载神器gdc-client实战:Win10系统闪退问题一网打尽

TCGA数据高效下载指南:gdc-client在Win10系统的深度优化与故障排除 1. 为什么选择gdc-client下载TCGA数据? 对于生物信息学研究者来说,获取TCGA(癌症基因组图谱)数据是开展肿瘤基因组学研究的第一步。然而,…...

在国产麒麟V10系统上,用kubeadm一步步搭建3个master节点的k8s高可用集群(含haproxy+keepalived配置)

国产麒麟V10系统上构建高可用Kubernetes集群实战指南 在信息技术自主可控的大背景下,国产操作系统正逐步成为企业级基础设施的重要选择。本文将详细介绍如何在麒麟V10(Kylin V10)操作系统上,从零开始搭建一个包含3个Master节点的高…...

告别Zabbix!轻量级监控神器Netdata在Ubuntu 22.04上的花式玩法

告别Zabbix!轻量级监控神器Netdata在Ubuntu 22.04上的花式玩法 1. 为什么Netdata正在重新定义监控体验 凌晨三点,服务器告警短信惊醒睡梦中的你。手忙脚乱连上VPN,却发现只是Zabbix又一个误报——这样的场景是否似曾相识?传统监控…...

AI赋能无障碍:CYBER-VISION在智能导盲场景中的落地实践

AI赋能无障碍:CYBER-VISION在智能导盲场景中的落地实践 1. 引言:当科技照亮黑暗 想象一下,当你闭上眼睛走在繁忙的街道上,周围是川流不息的人群和车辆。对于全球2.85亿视障人士来说,这不仅是想象,而是每天…...

GEE实战指南:Sentinel-2多光谱植被指数批量计算与优化

1. 为什么需要植被指数? 植被指数是遥感领域用来量化植被生长状态的核心指标。简单来说,就像医生用体温计判断病人是否发烧一样,我们可以通过卫星数据计算出的植被指数,快速了解一片区域的植被健康状况。Sentinel-2卫星提供的多光…...

吃透Redis核心数据结构:从原理到实战,避开90%的坑

Redis之所以能成为分布式系统的“性能神器”,核心在于其高效的内存数据结构设计。很多开发者对Redis的认知停留在“SET/GET缓存”,只会用最基础的字符串类型,却忽略了List、Hash、Set、ZSet等核心结构的强大能力,导致代码冗余、性…...

AI 创作者指南:09.AI 作为你的创作运营助理

第 9 篇 AI 作为你的创作运营助理 多模态魔法刚玩完,你现在一篇文章能变10种形态,是不是已经觉得内容像会“分身术”了?😊 来,第三部分继续!第9篇——AI 作为你的创作运营助理。 以前你自己盯排期、想矩阵、试标题,累得像管家婆。现在AI直接当你的“运营小秘书”,帮你…...

Python 性能优化避坑指南:回归风险防控、基准压测与安全回滚实战

Python 性能优化避坑指南:回归风险防控、基准压测与安全回滚实战 📌 性能优化,为什么总让人又爱又怕? Python 从 1991 年 Guido van Rossum 创造至今,已成长为全球开发者首选“胶水语言”。其简洁优雅的语法、动态类…...

GHelper终极指南:华硕笔记本性能优化的完整解决方案

GHelper终极指南:华硕笔记本性能优化的完整解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址:…...

解决QGIS 3.22.4编译后启动报错:从‘dll未加载’到‘plugins缺失’的实战排错记录

QGIS 3.22.4编译后启动报错的深度排查与解决方案 当你终于完成了QGIS 3.22.4的源码编译,满怀期待地双击qgis.exe时,却遭遇了"qgis_app.dll无法加载"的报错。这就像跑完马拉松却在终点线前摔倒一样令人沮丧。但别担心,这些问题其实都…...

墨语灵犀效果展示:康沃尔语复兴运动口号→中文新文化运动风格译文

墨语灵犀效果展示:康沃尔语复兴运动口号→中文新文化运动风格译文 1. 翻译效果惊艳呈现 墨语灵犀作为一款融合古典美学与现代AI技术的深度翻译工具,在语言转换过程中展现出令人惊叹的文化适应能力。本次展示以康沃尔语复兴运动口号为源文本&#xff0c…...

Windows个性化视觉增强:TranslucentTB打造专属任务栏体验

Windows个性化视觉增强:TranslucentTB打造专属任务栏体验 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 您是否曾感到Window…...

OpenClaw儿童模式:基于百川2-13B打造家长控制的作业辅导助手

OpenClaw儿童模式:基于百川2-13B打造家长控制的作业辅导助手 1. 为什么需要AI作业辅导助手? 作为两个小学生的家长,我深刻体会到辅导作业的"痛"。每天晚上检查数学题、批改作文、讲解错题的过程,常常让亲子关系变得紧…...

学术探险家的秘密武器:书匠策AI,解锁课程论文新宇宙!

在学术的浩瀚星空中,每一位学子都是勇敢的探险家,怀揣着对知识的渴望,踏上探索未知的征途。而课程论文,则是这场探险中不可或缺的“星际导航图”,指引着我们穿越知识的迷雾,抵达真理的彼岸。但你是否曾遇到…...

XCOM 2模组管理终极解决方案:AML启动器效率革命指南

XCOM 2模组管理终极解决方案:AML启动器效率革命指南 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/…...

PyQt5实战:用QTreeView+QStandardItemModel快速构建你的第一个树形文件浏览器(附完整代码)

PyQt5实战:用QTreeViewQStandardItemModel快速构建你的第一个树形文件浏览器 每次看到电脑资源管理器左侧那整齐的目录树,你是否好奇过它是如何实现的?今天我们就用PyQt5的QTreeView和QStandardItemModel组件,从零开始打造一个简…...

拆解Lite-HRNet的‘轻量’魔法:ShuffleBlock与CCWBlock如何省下80%算力

拆解Lite-HRNet的‘轻量’魔法:ShuffleBlock与CCWBlock如何省下80%算力 在计算机视觉领域,高分辨率网络(HRNet)因其出色的特征保持能力而备受推崇,但随之而来的计算成本却让许多实际应用望而却步。Lite-HRNet的出现&a…...