掘金 人工智能 前天 14:48
Claude Tool Use 的案例使用
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入解析了Claude的Tool Use功能,该功能允许模型调用外部工具来增强其能力,尤其在数学计算和信息检索等任务中表现出色。文章详细阐述了工具调用的响应机制,包括如何判断是否需要调用工具以及工具调用响应的结构。同时,探讨了工具结果的本地运行与返回,以及如何处理执行异常。此外,文章还通过数学计算助手、发送邮件和搜索产品等应用案例,展示了Tool Use的实际应用,并提供了完整的代码实现和扩展工作流。

🧰 Claude的Tool Use功能通过检查API响应中的`stop_reason`字段来判断是否需要调用工具,`stop_reason: "tool_use"`表示需要调用工具,而`stop_reason: "end_turn"`表示正常对话结束。工具调用响应结构包含`ToolUseBlock`,其中包含工具调用的唯一标识符`id`、使用的工具名称`name`和符合`input_schema`的输入参数`input`。

➗ 大模型在进行数学计算时可能不够精确,可以通过工具增强能力,本地定义计算器函数(含加减乘除),让模型调用而非自行计算。实现要点包括准备函数JSON描述和本地可执行函数,函数入参设计需考虑操作类型(enum 限定加减乘除)和两个操作数(必须参数)。

📧 发送邮件外部函数需要符合一定的函数描述规范,包括`name`(需符合正则,如`send_email`)、`description`(明确功能说明,如“向指定收件人发送带主题和内容的邮件”)和`input_schema`(定义参数类型和约束,如必需参数`to`、`subject`、`body`均为`string`类型)。建议复制标准模板后修改键值,保持JSON结构不变。

🔎 搜索产品外部函数的参数设计特点包括枚举类型(如`category`参数限定为`["electronics","clothing","home","toys","sports"]`)、可选参数(如`max_price`,`number`类型,用于价格筛选)和必需参数(仅`query`,产品名称/关键词)。每个参数需包含`type`和`description`字段,如`query`的`description`应说明“产品名称或搜索关键词,如'iPhone 13 Pro'”。

一、Claude Tool Use 工作流程概述

Claude 的 Tool Use 功能允许模型调用外部工具来增强其能力,特别适用于数学计算、信息检索等任务。

1. 工具调用响应机制

2. 工具结果的本地运行与返回

3. 工具使用结果的最终响应

4. 可选步骤与工作流程


二、应用案例

1. 数学计算助手

大模型在进行数学计算时可能不够精确,例如将 1,984,135 * 9,343,116 错误计算为 18,576,948,360,060,而实际应为 18,538,003,464,660。(Composio)

解决方案:通过工具增强能力,本地定义计算器函数(含加减乘除),让模型调用而非自行计算。

实现要点

示例代码

import redef calculate(expression):    # 移除表达式中的非数字和运算符字符    expression = re.sub(r'[^0-9+-*/().]', '', expression)    try:        # 使用 eval() 计算表达式        result = eval(expression)        return str(result)    except (SyntaxError, ZeroDivisionError, NameError, TypeError, OverflowError):        return "Error: Invalid expression"

工具描述:

tools = [    {        "name": "calculator",        "description": "一个简单的计算器,执行基本的算术运算。",        "input_schema": {            "type": "object",            "properties": {                "expression": {                    "type": "string",                    "description": "要计算的数学表达式(例如,'2 + 3 * 4')。"                }            },            "required": ["expression"]        }    }]

2. 发送邮件外部函数

函数描述规范

开发技巧:建议复制标准模板后修改键值,保持 JSON 结构不变。

3. 搜索产品外部函数

参数设计特点

描述要点:每个参数需包含 typedescription 字段,如 querydescription 应说明 "产品名称或搜索关键词,如 'iPhone 13 Pro'"


三、完整代码实现

以下是一个完整的示例,展示了如何使用 Claude 的 Tool Use 功能进行数学计算:

from anthropic import Anthropicclient = Anthropic()MODEL_NAME = "claude-3-opus-20240229"def process_tool_call(tool_name, tool_input):    if tool_name == "calculator":        return calculate(tool_input["expression"])def chat_with_claude(user_message):    message = client.messages.create(        model=MODEL_NAME,        max_tokens=4096,        messages=[{"role": "user", "content": user_message}],        tools=tools,    )    if message.stop_reason == "tool_use":        tool_use = next(block for block in message.content if block.type == "tool_use")        tool_name = tool_use.name        tool_input = tool_use.input        tool_result = process_tool_call(tool_name, tool_input)        response = client.messages.create(            model=MODEL_NAME,            max_tokens=4096,            messages=[                {"role": "user", "content": user_message},                {"role": "assistant", "content": message.content},                {                    "role": "user",                    "content": [                        {                            "type": "tool_result",                            "tool_use_id": tool_use.id,                            "content": tool_result,                        }                    ],                },            ],            tools=tools,        )    else:        response = message    final_response = next(        (block.text for block in response.content if hasattr(block, "text")),        None,    )    print(f"\n最终响应: {final_response}")    return final_response

测试示例

chat_with_claude("计算 1984135 * 9343116 的结果是多少?")

四、扩展工作流

完整的五步流程:

    提供工具描述和用户提示。Claude 决定是否使用工具。提取参数并本地执行。将结果返回 Claude。Claude 基于结果生成最终响应。

应用场景


五、Claude API 高级调用

1. tool_choice 参数及 JSON 格式回答

必需参数

可选参数

tool_choice 模式

示例:

tool_choice = {"type": "tool", "name": "get_weather"}

这将强制 Claude 使用 get_weather 工具来回答用户的问题。(Anthropic)

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Claude Tool Use API 大模型
相关文章