本文章翻译自官网:github.com/anthropics/…
工具使用基础
学习目标
- 理解什么是工具使用
- 解释工具使用的用例场景
- 理解 Claude 工具使用的高级流程
什么是工具使用?
工具使用,也称为函数调用,指的是通过定义和调用外部工具或函数来扩展 Claude 能力的功能。我们可以为 Claude 提供一组预定义的工具,它可以在任何时候调用这些工具。工具使我们能够编写代码来执行 Claude 原本无法完成的特定任务或计算。简而言之:工具使用是增强 Claude 功能的一种方式。
为什么这很重要?
工具使用是一项改变游戏规则的功能,它释放了 Claude 的真正潜力,并开启了无限可能。它是一个关键组件,能够显著提升你的应用程序的价值和影响力。
- 扩展 Claude 的能力
工具使用允许你扩展 Claude beyond 其内置功能的能力。通过定义和调用外部工具,你可以让 Claude 执行它原本无法完成的任务。这意味着你可以创建更强大、更多样化的应用程序,以满足更广泛的用户需求。 - 与现有系统集成
工具使用使 Claude 能够与你现有的系统、数据库或 API 无缝集成。你可以定义与后端服务交互、从数据库检索数据或触发应用程序操作的工具。这种集成允许你在使用现有基础设施和数据的同时,充分利用 Claude 的能力。 - 自动化复杂任务
借助工具使用,你可以自动化涉及多个步骤或需要专门计算的复杂任务和工作流程。通过定义封装这些任务的工具,你可以简化流程、减少手动操作并提高效率。Claude 可以根据用户输入或预定义条件,在适当的时间智能地调用合适的工具。 - 提升用户体验
工具使用可以显著提升应用程序的用户体验。通过为 Claude 提供相关工具的访问权限,你可以让它对用户查询提供更准确、更具上下文相关性和更个性化的响应。用户可以用自然语言与你的应用程序交互,而 Claude 可以利用工具代表用户提供丰富的信息或执行所需的操作。 - 扩展和定制
利用工具使用,你可以扩展和定制应用程序,以满足用户不断变化的需求。随着用户群的增长或需求的变化,你可以轻松添加新工具或修改现有工具,以扩展 Claude 的能力。这种灵活性使你能够快速适应和迭代,确保应用程序保持相关性和竞争力。
用例示例
我们的客户在使用工具时常见的一些主题包括:
-
检索信息
工具可用于从外部来源(如数据库、API 或 Web 服务)获取数据。例如,工具可以根据用户输入检索天气信息、股票价格或新闻文章。 -
执行计算
工具可以执行 Claude 内置功能可能无法完成的复杂计算或数学运算。这可能包括财务计算、科学计算或统计分析。 -
处理数据
工具可用于处理、转换或操作各种格式的数据。这可能包括数据格式化、数据提取或数据转换等任务。 -
与外部系统交互
工具可以促进与外部系统或服务的交互,如发送电子邮件、触发通知或控制物联网设备。 -
生成内容
工具可以根据用户输入或预定义模板,协助生成特定类型的内容,如图像、图表或格式化文档。
更具体的可能用例包括:
- 企业数据集成:将 Claude 与 CRM、ERP 和 ITSM 等企业系统集成,以检索客户数据、自动化工作流程并提供个性化支持。
- 财务分析和报告:使用 Claude 和工具分析财务数据、生成投资报告、评估风险并确保合规性。
- 医疗诊断和治疗规划:将 Claude 与电子健康记录(EHR)和医学知识库集成,协助医疗专业人员做出明智决策并制定个性化治疗计划。
- 教育辅导和内容创作:结合 Claude 与教育资源和工具,提供个性化辅导、生成学习材料并适应个人学习风格。
- 法律文档分析和审查:使用 Claude 和工具分析法律文档、提取关键信息、识别潜在问题并生成摘要,以简化法律流程。
- 客户支持自动化:将 Claude 与知识库和支持票务系统集成,提供自动化客户支持、解决问题并缩短响应时间。
- 销售和营销自动化:将 Claude 与工具结合,分析客户数据、生成个性化营销内容、筛选潜在客户并优化销售流程。
- 软件开发辅助:将 Claude 与 IDE、版本控制系统和项目管理工具集成,协助开发人员编写代码、识别错误并管理软件项目。
- 研究和创新:利用 Claude 和工具进行市场研究、分析专利数据、生成新颖想法并推动各行业的创新。
- 内容创作和优化:使用 Claude 和工具为各种平台(包括网站、社交媒体和营销活动)生成、优化和个性化内容。
工具使用的工作原理
让我们关注工具使用的实际工作方式。首先需要了解的最重要的一点是,Claude 不会自己运行任何代码。我们告诉 Claude 它可以请求我们调用的一组工具,然后由我们来实际运行底层的工具代码,并将结果告诉 Claude。
请注意,Claude 无法访问任何内置的服务器端工具。所有工具都必须由你(用户)在每个 API 请求中明确提供。这意味着你需要定义可用的工具(包括清晰的描述和输入模式),并实现和执行工具逻辑(如根据 Claude 的请求运行特定函数或查询 API)。这使你能够完全控制 Claude 可以使用的工具,并具有灵活性。
具体而言,在 Claude 中使用工具包括以下步骤:
-
向 Claude 提供工具和用户提示(API 请求)
- 定义你希望 Claude 能够访问的工具集,包括它们的名称、描述和输入模式。
- 提供可能需要使用一个或多个这些工具来回答的用户提示,例如 “用 500 美元我可以买多少股通用汽车的股票?”
-
Claude 使用工具(API 响应)
- Claude 评估用户提示,并决定是否有任何可用工具有助于解决用户的查询或任务。如果有,它还会决定使用哪些工具以及使用什么输入。
- Claude 输出格式正确的工具使用请求。
- API 响应将包含一个 stop_reason 为 tool_use,表明 Claude 想要使用外部工具。
-
提取工具输入、运行代码并返回结果(API 请求)
- 在客户端,你需要从 Claude 的工具使用请求中提取工具名称和输入。
- 在客户端运行实际的工具代码。
- 通过包含 tool_result 内容块的新用户消息继续对话,将结果返回给 Claude。
-
Claude 使用工具结果来制定响应(API 响应)
- 收到工具结果后,Claude 将使用该信息来制定对原始用户提示的最终响应。
步骤(3)和(4)是可选的 —— 对于某些工作流程,Claude 使用工具可能就是你需要的所有信息,你可能不需要将工具结果返回给 Claude。这一点我们将在后面的章节中详细介绍。
假设的工具使用场景
为了更好地理解工具使用的流程,让我们想象我们正在构建一个聊天应用程序,允许用户与 Claude 谈论股票市场并检索当前股票价格。
当然,Claude 并不知道任何时候的股票市场情况和价格,所以我们需要为 Claude 提供一个 get_stock_price 工具,用于检索公司的当前股票价格。
下面是一个简单的图表,显示了我们的应用程序和 Claude 之间的信息流:
流程的详细分解
以下是工具使用步骤的详细分解:
步骤 0:编写工具功能
在我们告诉 Claude 它可以访问某个特定工具之前,我们需要首先编写该工具的功能。对于我们的 get_stock_price 工具,我们可能会编写一个函数,该函数需要公司名称或股票代码作为参数,然后向股票市场 API 发送请求以获取实时股票数据。如下所示:
python
运行
def get_stock_price(company):
# 向股票市场 API 发送请求,查询特定公司的当前股票价格
# 返回包含指定公司当前股票价格信息的字典
如果这个函数被完全实现,并且我们调用 get_stock_price ("General Motors"),我们可能会得到如下返回值:
json
{
"symbol": "GM",
"price": 43.09
}
步骤 1:向 Claude 提供工具和用户提示(API 请求)
接下来,我们需要定义 get_stock_price 工具,包括其名称、描述和输入模式。我们稍后会花更多时间讨论如何定义工具,但这里有一个我们可以告诉 Claude 的假设的 get_stock_price 工具定义:
python
运行
tool_definition = {
"name": "get_stock_price",
"description": "Retrieves the current stock price for a given company",
"input_schema": {
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "The company name to fetch stock data for"
}
},
"required": ["company"]
}
}
接下来,我们会告诉 Claude 这个工具存在,并发出一个可能需要这个工具的请求:
python
运行
response = client.messages.create(
model="claude-3-opus-20240229",
messages=[{"role": "user", "content": "How many shares of General Motors can I buy with $500?"}],
max_tokens=500,
tools=[tool_definition]
)
步骤 2:Claude 使用工具(API 响应)
Claude 收到 API 请求并评估用户提示。它确定 get_stock_price 工具将有助于回答关于购买通用汽车股票的问题。
Claude 以正确的格式响应工具使用请求。我们稍后会深入探讨这一点,但以下是 Claude 的示例响应,表明它 “想要” 使用我们的工具:
json
{
"stop_reason": "tool_use",
"tool_use": {
"name": "get_stock_price",
"input": {
"company": "General Motors"
}
}
}
步骤 3:提取工具输入、运行代码并返回结果(API 请求)
在客户端,我们从 Claude 的工具使用请求中提取工具名称(get_stock_price)和输入的公司名称(General Motors)。
我们使用从 Claude 的工具请求中提取的输入,执行从 API 获取实时股票市场数据的实际 get_stock_price 函数。该函数可能返回如下数据:
json
{
"symbol": "GM",
"price": 43.09
}
然后我们告诉 Claude 我们工具的结果。我们通过包含 tool_result 内容块的新用户消息继续对话,将股票价格工具的结果返回给 Claude(稍后会详细介绍)。
步骤 4:Claude 使用工具结果来制定响应(API 响应)
Claude 收到股票价格工具的结果,并将实时股票市场信息纳入其对原始用户提示的最终响应中,最终回复如下:
看起来通用汽车当前的股价为 43.09 美元。用 500 美元,你大约可以购买 11 股(500 ÷ 43.09 ≈ 11.6,由于不能购买部分股票,所以取整数 11 股),总花费约为 473.99 美元,剩余约 26.01 美元。
测验
问题 1
以下哪些用例可能适合使用工具?
(a) 需要根据客户的订单 ID 从数据库检索订单信息的客户支持聊天机器人。
(b) 帮助用户改进语法和写作风格的写作助手。
(c) 根据用户的风险承受能力和财务目标提供个性化投资建议的财务顾问。
(d) 能够根据用户偏好和可用性预订航班和酒店的旅行聊天机器人。
查看问题 1 答案
a、c 和 d
(a) 需要根据客户的订单 ID 从数据库检索订单信息的客户支持聊天机器人。
(c) 根据用户的风险承受能力和财务目标提供个性化投资建议的财务顾问。
(d) 能够根据用户偏好和可用性预订航班和酒店的旅行聊天机器人。
这些用例涉及从外部来源检索信息、执行计算或数据处理以及与外部系统交互,这些都是工具使用可以增强 Claude 功能的常见场景。
用例 (b) 可能不一定需要工具使用,因为它有可能通过 Claude 内置的语言理解和生成能力来处理。
问题 2
将工具使用流程的以下步骤按正确顺序排列:
(a) Claude 使用工具结果来制定对原始用户提示的响应。
(b) 客户端代码从 Claude 的工具使用请求中提取工具名称和输入。
(c) Claude 评估用户提示并决定使用工具,然后输出工具使用请求。
(d) 客户端代码执行实际的工具功能并将结果返回给 Claude。
(e) 客户端代码向 Claude 提供一组可用工具和一个用户提示。
查看问题 2 答案
正确的顺序是 e、c、b、d、a
(e) 客户端代码向 Claude 提供一组可用工具和一个用户提示。
(c) Claude 评估用户提示并决定使用工具,然后输出工具使用请求。
(b) 客户端代码从 Claude 的工具使用请求中提取工具名称和输入。
(d) 客户端代码执行实际的工具功能并将结果返回给 Claude。
(a) Claude 使用工具结果来制定对原始用户提示的响应。
写在最后
Claude code 目前在国内被墙,而且难以购买,费用昂贵,使用时还得担心被封号的风险,令人担心。
我推荐一个很好用的镜像站:
不仅可以永久免费试用,价格也是非常公道,比官方便宜很多。填写邀请码 5OTTEB还可以额外获得50美金额度,快一起白嫖!