Agent核心能力之工具使用详解
智能体工具集成:核心能力与实战指南 先说一个核心判断:工具使用是让智能体真正“支棱起来”的关键能力。它不仅让AI能处理实时信息、做复杂数据分析这些高级活儿,更直接提升了任务精度和用户体验。更重要的是——工具集成赋予了智能体适应性和可扩展性,让它在不断变化的环境中始终能保持更新,满足多样化的用户需求。
智能体工具集成:核心能力与实战指南
先说一个核心判断:工具使用是让智能体真正“支棱起来”的关键能力。它不仅让AI能处理实时信息、做复杂数据分析这些高级活儿,更直接提升了任务精度和用户体验。更重要的是——工具集成赋予了智能体适应性和可扩展性,让它在不断变化的环境中始终能保持更新,满足多样化的用户需求。

工具使用(也叫函数调用),说白了就是通过定义和调用外部工具或函数来扩展大模型的能力。具体做法是让大模型访问一组预定义的工具,模型可以在任何时候调用这些工具。工具的本质是让我们编写代码,去执行那些大模型自己搞不定的特定任务或计算。简单总结:工具就是给大模型“开挂”的方式。
工具使用的重要性
工具使用是能改变游戏规则的功能——它真正释放了大模型的潜能,打开了一个充满可能性的世界。它是关键组件,能显著提升应用的价值和影响力。
- 扩展大模型的功能:通过工具使用,可以把大模型的能力拓展到其内置功能之外。定义并调用外部工具,模型就能完成它原本做不到的任务。这意味着你可以打造功能更强、用途更广的应用,去覆盖更广泛的用户需求。
- 与现有系统集成:工具使用让大模型能无缝对接现有系统、数据库或API。你可以定义那些与后端服务交互、从数据库检索数据、或触发应用操作的工具。有了这个集成,既能借力大模型的强大能力,又不浪费已有的基础设施和数据。
- 自动执行复杂任务:有了工具使用,涉及多个步骤或需要专门计算的复杂工作流就能跑起来了。封装好这些任务的工具,流程就简化了,人工操作减少了,效率自然上来了。大模型可以根据用户的输入或预设条件,在恰当的时机智能调用正确的工具。
- 增强用户体验:工具使用能大大提升应用的体验感。给大模型提供相关工具的访问权限,它就能为用户查询给出更准确、更切合实际、也更个性化的回应。用户可以用自然语言与应用交互,而大模型则通过工具提供丰富信息或代表用户执行所需操作。
- 扩展和定制:通过工具使用,你可以扩展和定制应用,以匹配用户不断变化的需求。用户群扩大或需求变化时,你可以轻松添加新工具或修改现有工具,来扩展大模型的功能。这种灵活性让应用能快速适应和迭代,始终保持相关性和竞争力。
应用案例举例
在客户实践中,我们看到一些通用主题:
- 检索信息:工具可以从数据库、API或网络服务等外部来源获取数据。比如根据用户输入检索天气信息、股票价格或新闻文章。
- 执行计算:工具可以执行复杂的计算或数学运算,这些可能超出了大模型的内置能力。包括财务计算、科学计算或统计分析。
- 操作数据:工具可以处理、转换或操作各种格式的数据,比如数据格式化、数据提取或数据转换等任务。
- 与外部系统交互:工具可以促进与外部系统或服务的交互,比如发送邮件、触发通知或控制物联网设备。
- 生成内容:工具可以根据用户输入或预定义模板,协助生成特定类型的内容,如图像、图表或格式化文档。
更具体的用例包括:
- 企业数据集成:将大模型与CRM、ERP和ITSM等企业系统集成,检索客户数据、自动执行工作流并提供个性化支持。
- 财务分析和报告:用大模型和工具分析财务数据、生成投资报告、评估风险并确保合规。
- 医疗诊断和治疗规划:将大模型与电子健康记录(EHR)和医学知识库整合,协助医疗专业人员做出诊断并制定个性化治疗计划。
- 教育辅导和内容创建:将大模型与教育资源和工具结合,提供个性化辅导、生成学习材料并匹配个人学习风格。
- 法律文件分析和审查:用大模型和工具分析法律文件、提取关键信息、识别潜在问题并生成摘要,简化法律流程。
- 客户支持自动化:将大模型与知识库和支持票务系统集成,提供自动化客户支持、排除故障并缩短响应时间。
- 销售和营销自动化:将大模型与各种工具结合,分析客户数据、生成个性化营销内容、筛选潜在客户并优化销售流程。
- 软件开发协助:将大模型与集成开发环境、版本控制系统和项目管理工具结合,协助开发人员编写代码、识别错误并管理项目。
- 研究与创新:利用大模型和工具进行市场调研、分析专利数据、生成新想法并推动各行业的创新。
- 内容创建和优化:利用大模型和工具为网站、社交媒体和营销活动等平台生成、优化和个性化内容。
接下来,我们以Claude中的工具使用为例,详细介绍相关要点。
如何使用工具
来看看工具的实际使用方法。最重要的一点是:Claude不会自己运行任何代码。我们告诉Claude一组它可以要求我们调用的工具,然后我们的职责就是实际运行底层的工具代码,并把结果回传给Claude。
Claude没有任何内置的服务器端工具。所有工具都必须由用户在每个API请求中明确提供。这意味着你需要定义可用的工具,提供清晰的描述和输入模式,同时实现和执行工具逻辑——比如根据Claude的请求运行特定函数或查询API。这样你就能完全控制Claude可用的工具,并灵活运用。
具体来说,Claude工具使用包括以下步骤:
1. 为Claude提供工具和用户提示词(API请求)
- 定义希望Claude访问的工具集,包括工具名称、描述和输入模式。
- 提供用户提示词,可能需要使用其中一个或多个工具来回答,比如“我用500美元可以买多少股通用汽车的股票?”
2. Claude工具使用(API响应)
- Claude会评估用户提示,决定是否有任何可用工具可以帮助完成查询或任务。如果有,它还决定使用哪种工具以及输入什么内容。
- Claude输出格式正确的工具使用请求。
- API响应的
stop_reason会变为 tool_use,表示Claude希望使用外部工具。
3. 提取工具输入、运行代码并返回结果(API请求)
- 在客户端,从Claude的工具使用请求中提取工具名称和输入。
- 在客户端运行实际的工具代码。
- 用包含
tool_result内容块的新用户消息继续对话,将结果返回给Claude。
4. Claude使用工具结果响应(API响应)
- 收到工具结果后,Claude用该信息来制定对原始用户提示的最终响应。
步骤(3)和(4)是可选的——对某些工作流来说,Claude用工具就能提供所需的全部信息,可能不需要把工具结果返给Claude。这点我们下一节详述。
假设工具使用场景
为了更好地理解工具的使用流程,假设我们正在构建一个聊天应用,允许用户和Claude聊股票市场并检索当前股价。
Claude当然不知道任何特定时间点的股市行情和价格,所以我们需要给Claude提供一个
这是一个简单的示意图,展示我们的应用和Claude之间的信息流:
详细流程分解
以下是工具使用步骤的详细分解:
第0步:编写工具功能
在告诉Claude它可以访问的特定工具之前,我们首先需要编写该工具的功能。以
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
如果完全实现并调用它,比如
{
"symbol": "GM",
"price": 43.09
}
第1步:为Claude提供工具和用户提示(API请求)
接下来需要定义
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请求并评估用户提示。它认为
Claude响应格式正确的工具使用请求。
{
"stop_reason": "tool_use",
"tool_use": {
"name": "get_stock_price",
"input": {
"company": "General Motors"
}
}
}
第3步:提取工具输入、运行代码并返回结果(API请求)
在客户端,从Claude的工具使用请求中提取工具名称(
执行实际的
{
"symbol": "GM",
"price": 43.09
}
然后通过包含tool_result内容块的新用户消息,将工具结果返回给Claude。
第4步:Claude使用工具结果做出响应(API响应)
Claude接收到股价工具的结果,将实时股票信息纳入对原始用户提示的最终回复:
目前通用汽车股价为43.09,你可以用500美元购买大约11股通用汽车的股票。
第一个简单工具
前面介绍了工具使用的4步工作流。现在实际操作一个简单示例。
我们会从一个简单演示开始,只和Claude“对话”一次(别担心,后面会有更精彩的示例!)。这意味着先不考虑第4步。我们要求Claude回答一个问题,Claude要求用工具回答,然后我们提取工具的输入,运行代码,并返回结果。
如今的大型语言模型在数学运算方面都很吃力,下面的代码就是明证。
我们要求Claude“用1984135乘以9343116”:
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv()
client = Anthropic()
# A relatively simple math problem
response = client.messages.create(
model="claude-3-haiku-20240307",
messages=[{"role": "user", "content":"Multiply 1984135 by 9343116. Only respond with the result"}],
max_tokens=400
)
print(response.content[0].text)
18593367726060
多次运行可能会得到不同答案,但实际正确结果是18538003464660——Claude偏差了55364261400!
用工具来解决!
Claude并不擅长复杂数学运算,所以让我们提供计算器工具来增强它的能力。
第一步是定义实际的计算器函数,确保它能独立于Claude运行。写一个非常简单的函数,需要三个参数:
- 一个操作,比如“加法”或“乘法”
- 两个操作数
def calculator(operation, operand1, operand2):
if operation == "add":
return operand1 + operand2
elif operation == "subtract":
return operand1 - operand2
elif operation == "multiply":
return operand1 * operand2
elif operation == "divide":
if operand2 == 0:
raise ValueError("Cannot divide by zero.")
return operand1 / operand2
else:
raise ValueError(f"Unsupported operation: {operation}")
这个简单函数功能有限,只能处理234 + 213或3 * 9这样的简单表达式。重点是通过非常简单的教学示例介绍工具使用过程。
测试一下我们的函数,确保它能正常工作:
calculator("add", 10, 3)输出13,calculator("divide", 200, 25)输出8.0
下一步是定义工具并向Claude介绍它。每个工具定义都包括名称、描述和输入模式。
{
"name": "send_email",
"description": "Sends an email to the specified recipient with the given subject and body.",
"input_schema": {
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "The email address of the recipient"
},
"subject": {
"type": "string",
"description": "The subject line of the email"
},
"body": {
"type": "string",
"description": "The content of the email message"
}
},
"required": ["to", "subject", "body"]
}
}
计算器工具定义
为计算器函数定义相应的工具:
calculator_tool = {
"name": "calculator",
"description": "A simple calculator that performs basic arithmetic operations.",
"input_schema": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"enum": ["add", "subtract", "multiply", "divide"],
"description": "The arithmetic operation to perform."
},
"operand1": {
"type": "number",
"description": "The first operand."
},
"operand2": {
"type": "number",
"description": "The second operand."
}
},
"required": ["operation", "operand1", "operand2"]
}
}
为Claude提供工具
回到计算器函数。此时Claude对计算器工具一无所知!它只是一个小小的Python字典。在向Claude提出请求时,传递工具列表来告诉Claude:
response = client.messages.create(
model="claude-3-haiku-20240307",
messages=[{"role": "user", "content": "Multiply 1984135 by 9343116. Only respond with the result"}],
max_tokens=300,
# Tell Claude about our tool
tools=[calculator_tool]
)
查看Claude的回复:
响应看起来和平时不同!现在收到的是ToolsMessage,可以检查response.stop_reason,发现Claude停止是因为它认为是时候用工具了:
'tool_use'
response.content包含一个ToolUseBlock,包含工具名称和输入信息:
tool_name = response.content[0].name
tool_inputs = response.content[0].input
print("The Tool Name Claude Wants To Call:", tool_name)
print("The Inputs Claude Wants To Call It With:", tool_inputs)
Claude希望调用的工具名称:calculator,输入:{'operand1': 1984135, 'operand2': 9343116, 'operation': 'multiply'}
下一步,使用提供的工具名称和输入,调用之前编写的计算器函数,得出正确答案:18538003464660
重要提示
问Claude不需要用工具的问题时,比如和数学或计算无关的,可能希望它能正常回答。但有时Claude会很渴望用它的工具!比如问“祖母绿是什么颜色的?”时,Claude可能会尝试使用计算器。
一个简单的解决方法是调整提示或添加系统提示,大致如:“You ha ve access to tools, but only use them when necessary. If a tool is not required, respond as normal”。加了之后,Claude就能正常回复了。
练习
利用Claude帮助建立一个研究助手。用户输入一个主题,获得保存到标记文件中的维基百科文章链接列表。任务是为generate_wikipedia_reading_list函数编写工具定义,并实现get_research_help函数。
结构化输出
工具使用的一种更有趣的方式是强制Claude响应JSON等结构化内容。只要Claude想用某个工具,它就会用定义时告诉它的结构完美的格式进行响应。利用这一点,定义描述特定JSON结构的工具,然后告诉Claude,它就会响应结构化的JSON数据。
情感分析示例
定义print_sentiment_scores工具,强制Claude生成包含positive_score、negative_score、neutral_score的JSON对象。通过tool_choice={"type": "tool", "name": "print_sentiment_scores"}参数强制Claude始终使用特定工具。
实体提取示例
用类似方法让Claude生成包含人员、组织和地点等实体的JSON数据。定义print_entities工具,输入模式中包含entities数组,每个实体有name、type和context属性。
完整的工具使用工作流
介绍完整的4步工具使用工作流程。包括定义维基百科搜索函数、编写工具定义、提供工具和用户提示、处理Claude的工具使用请求并返回结果。
工具选择
Claude API支持tool_choice参数,允许指定Claude调用工具的方式。三种选项:
- Auto:让Claude自动决定是否调用任何提供的工具。
- Any:告诉Claude必须调用一个工具,但可以选择哪一个。
- Tool:强制Claude始终使用某一特定工具。
使用多种工具
为虚构的电子公司TechNova构建简单的客户支持聊天机器人。提供四个工具:get_user、get_order_by_id、get_customer_orders和cancel_order。通过系统提示增强聊天体验,并提示Claude将用户面向的响应放在
- END -
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:Agent核心能力之工具使用详解要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点VSona是一个开发AI伴侣的平台,提供聊天、角色扮演、创意表达等功能。用户可自定义头像和声线,支持文字或语音互动。AI伴侣具备动画反馈和语音响应,营造安全、沉浸的个性化互动空间。
MastermallowAI音频母带处理适用于音乐、播客及内容创作者。可将原始录音一键转为专业音频,提升播客音质,为音乐作品添加母带效果。特色包括智能音频分析与增强、原音与母带实时对比、高质量成品下载。
MyCharacter AI是基于Polygon链的去中心化应用,通过CharacterGPTV2多模态AI系统生成具有独特形象和性格的AI角色。用户可与角色实时互动,并将其作为NFT收藏、交易或转让,实现AI角色生成、互动与资产化的一体化。
ToMate基于AI智能高效处理客户消息,适用于客服、销售及市场营销等场景。它能及时贴心回复,支持解析多种文件格式,并采用灵活定价方案,显著提升工作效率与客户满意度。
- 日榜
- 周榜
- 月榜
热点快看
