学习目标 #
- 了解什么是工具使用
- 解释工具使用的用例
- 了解使用 Claude 进行工具使用的高级过程
什么是工具使用? #
工具使用,也称为函数调用,是指通过定义和调用外部工具或函数来扩展 Claude 功能的能力。我们可以让 Claude 访问一组预定义的工具,它可以随时调用这些工具。工具允许我们编写代码来执行 Claude 无法执行的特定任务或计算。简而言之:工具使用是增强 Claude 功能的一种方式。
为什么这很重要? #
工具使用是一项改变游戏规则的功能,它释放了 Claude 的真正潜力并开辟了一个充满可能性的世界。它是一个关键组件,可以显著提高应用程序的价值和影响力。
扩展 Claude 的功能 #
工具使用允许您将 Claude 的功能扩展到其内置功能之外。通过定义和调用外部工具,您可以让 Claude 执行它原本无法执行的任务。这意味着您可以创建更强大、更通用的应用程序,以处理更广泛的用户需求和要求。
与现有系统集成 #
工具使用使 Claude 与您现有的系统、数据库或 API 无缝集成。您可以定义与后端服务交互的工具,从数据库中检索数据,或在应用程序中触发操作。这种集成允许您在使用现有基础设施和数据的同时利用 Claude 的强大功能。
自动执行复杂任务 #
通过使用工具使用,您可以自动执行涉及多个步骤或需要专门计算的复杂任务和工作流程。通过定义封装这些任务的工具,您可以简化流程、减少手动工作量并提高效率。Claude 可以根据用户输入或预定义条件在正确的时间智能地调用正确的工具。
增强用户体验 #
工具的使用可以显著增强应用程序的用户体验。通过为 Claude 提供对相关工具的访问权限,您可以使其能够对用户查询提供更准确、更符合上下文和更个性化的响应。用户可以用自然语言与您的应用程序交互,Claude 可以利用这些工具提供丰富的信息或代表用户执行所需的操作。
扩展和自定义 #
通过使用工具,您可以扩展和自定义应用程序以满足用户不断变化的需求。随着用户群的增长或需求的变化,您可以轻松添加新工具或修改现有工具以扩展 Claude 的功能。这种灵活性使您能够快速适应和迭代,确保您的应用程序保持相关性和竞争力。
用例示例 #
我们在使用工具的客户中看到的一些一般主题包括:
检索信息 #
工具可用于从外部来源(例如数据库、API 或 Web 服务)获取数据。例如,工具可以根据用户输入检索天气信息、股票价格或新闻文章。
执行计算 #
工具可以执行复杂的计算或数学运算,这些计算或数学运算可能超出了 Claude 的内置功能。这可以包括财务计算、科学计算或统计分析。
操纵数据 #
工具可用于处理、转换或操纵各种格式的数据。这可以包括数据格式化、数据提取或数据转换等任务。
与外部系统交互 #
工具可以促进与外部系统或服务的交互,例如发送电子邮件、触发通知或控制 IoT 设备。
生成内容 #
工具可以根据用户输入或预定义模板帮助生成特定类型的内容,例如图像、图表或格式化文档。
更具体的可能用例包括: #
- 企业数据集成:将 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 响应将具有 tool_use 的 stop_reason,表明 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 发送请求以获取实时股票数据。如下所示:
def get_stock_price(company):
#Send a request to a stock market API to lookup current stock price for a given company
#Returns a dictionary containing current stock price information for the specified company
如果这个函数被完全实现并且我们用 get_stock_price(“General Motors”) 调用它,我们可能会得到如下返回值:
{
"symbol”: “GM”,
"price”: 43.09
}
步骤 1:为 Claude 提供工具和用户提示(API 请求)
接下来,我们需要定义 get_stock_price 工具及其名称、描述和输入模式。我们稍后会花更多时间定义工具,但这里有一个假设的 get_stock_price 工具定义,我们可以告诉 Claude:
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 这个工具存在,并发出可能需要此工具的提示请求:
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 的示例响应,表明它“想要”使用我们的工具:
{
"stop_reason": "tool_use",
"tool_use": {
"name": "get_stock_price",
"input": {
"company": "General Motors"
}
}
}
步骤 3:提取工具输入、运行代码并返回结果(API 请求)
在客户端,我们从 Claude 的工具使用请求中提取工具名称(get_stock_price)和输入公司名称(通用汽车)。
我们执行实际的 get_stock_price 函数,该函数使用从 Claude 的工具请求中提取的输入从 API 获取实时股票市场数据。该函数可能返回如下所示的数据:
{
"symbol”: “GM”,
"price”: 43.09
}
然后,我们将工具的结果告诉 Claude。我们通过继续对话,向 Claude 返回股票价格工具结果,其中包含 tool_result 内容块(稍后会详细介绍)。
步骤 4:Claude 使用工具结果制定响应(API 响应)
Claude 收到股票价格工具结果,并将实时股票市场信息纳入其对原始用户提示的最终响应中,最终回复如下:
看起来当前股价为500。
测验 #
问题 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 使用工具结果来制定对原始用户提示的响应。