从0到1构建智能提示系统:Anthropic工具调用实战指南

从0到1构建智能提示系统:Anthropic工具调用实战指南

【免费下载链接】prompt-eng-interactive-tutorial Anthropic's Interactive Prompt Engineering Tutorial 【免费下载链接】prompt-eng-interactive-tutorial 项目地址: https://gitcode.com/GitHub_Trending/pr/prompt-eng-interactive-tutorial

为什么需要工具调用能力?

你是否遇到过这样的场景:当用户询问"我最近的订单状态"时,AI只能礼貌地回答"无法访问您的订单信息"?或者当用户需要计算复杂数值时,AI给出的结果总是与计算器有出入?这些痛点的核心在于——基础提示工程无法突破AI模型的固有局限。

Anthropic的交互式提示工程教程高级篇正是为解决这些问题而生。通过工具调用(Tool Use)技术,我们可以让Claude像人类一样使用"计算器""数据库查询"等外部工具,将AI的推理能力与工具的执行能力完美结合。本指南将基于GitHub_Trending/pr/prompt-eng-interactive-tutorial项目,带你从零构建一个完整的工具调用系统。

工具调用的工作原理

工具调用本质上是一种"协作式问题解决"流程。想象你是一位客服人员,当用户询问订单状态时,你需要:

  1. 确认是否需要查询系统(判断是否使用工具)
  2. 向系统查询订单信息(调用工具)
  3. 根据系统返回结果整理回复(处理工具结果)

AI的工具调用流程与之类似,只是将"系统"替换为具体的函数或API。完整的工具调用流程包含四个关键步骤:

工具调用工作流程

图1:工具调用的四步工作流程(来源:AmazonBedrock/images/tool_use_flow.png

四步实现工具调用

  1. 定义工具集:告诉AI有哪些可用工具及其参数要求
  2. 生成工具调用请求:AI根据用户问题决定是否调用工具
  3. 执行工具并返回结果:在外部环境中运行工具并获取结果
  4. 整理结果生成回复:AI基于工具返回结果生成自然语言回复

从零开始构建工具调用系统

让我们通过一个实际案例来理解如何实现工具调用。我们将构建一个订单查询系统,包含用户查询、订单检索和订单取消三个核心功能。

步骤1:定义工具规范

首先需要明确告诉AI有哪些工具可用。每个工具定义应包含名称、描述和输入参数,就像产品说明书一样:

toolConfig = {
  'tools': [
    {
      'toolSpec': {
        'name': 'get_order_by_id',
        'description': 'Retrieves order details by order ID',
        'inputSchema': {
          'json': {
            'type': 'object',
            'properties': {
              'order_id': {
                'type': 'string',
                'description': 'Unique order identifier'
              }
            },
            'required': ['order_id']
          }
        }
      }
    },
    # 更多工具定义...
  ]
}

完整的工具定义可参考AmazonBedrock/toolUse_order_bot/final_order_bot_converse_api.py中的toolConfig对象。

步骤2:实现工具函数

工具定义只是"说明书",我们还需要实现实际的功能。以下是一个查询订单的示例函数:

def get_order_by_id(order_id):
    """根据订单ID查询订单详情"""
    for order in orders:
        if order["id"] == order_id:
            return order
    return None

这个函数会在本地数据库中查找匹配的订单。完整实现可参考AmazonBedrock/toolUse_order_bot/final_order_bot_converse_api.py中的FakeDatabase类。

步骤3:处理工具调用请求

当AI决定调用工具时,会生成一个结构化的工具调用请求。我们需要解析这个请求并调用相应的函数:

def process_tool_call(tool_name, tool_input):
    """根据工具名称和输入参数调用相应函数"""
    if tool_name == "get_order_by_id":
        return db.get_order_by_id(tool_input["order_id"])
    elif tool_name == "cancel_order":
        return db.cancel_order(tool_input["order_id"])
    # 其他工具处理...

步骤4:构建对话循环

最后需要构建一个对话循环,让AI能够持续与用户交互并根据需要调用工具:

while True:
    # 获取用户输入
    user_message = input("User: ")
    messages.append({"role": "user", "content": user_message})
    
    # 调用AI API获取响应
    response = bedrock_client.converse(**converse_api_params)
    
    if response['stopReason'] == "tool_use":
        # 处理工具调用
        tool_result = process_tool_call(tool_name, tool_input)
        messages.append({"role": "user", "content": tool_result})
    else:
        # 直接返回AI回复
        print("Assistant:", response['output']['message']['content'])

完整的对话循环实现可参考AmazonBedrock/toolUse_order_bot/final_order_bot_converse_api.py中的start_chat()函数。

常见问题与最佳实践

如何避免不必要的工具调用?

AI有时会在不需要工具的情况下尝试调用工具,例如当用户询问"你能做什么"时。解决这个问题的关键是在系统提示中明确说明何时应该使用工具:

只有在需要查询用户信息、订单状态或执行订单操作时才使用工具。
如果用户只是询问帮助或一般性问题,直接回答即可,不需要调用工具。

如何处理工具调用错误?

当工具调用失败(如订单ID不存在)时,需要告诉AI如何处理:

def get_order_by_id(order_id):
    for order in orders:
        if order["id"] == order_id:
            return order
    return {"error": f"Order {order_id} not found"}

然后在系统提示中说明:

如果工具返回包含"error"的结果,请将错误信息友好地告知用户,不要再次调用工具。

如何优化工具调用的参数质量?

AI有时会提供不完整或格式错误的参数。通过提供示例可以显著提高参数质量:

当调用get_order_by_id工具时,请使用以下格式:
<function_calls>
<invoke name="get_order_by_id">
<antml:parameter name="order_id">24601</parameter>
</invoke>
</function_calls>

进阶应用:多工具协同与复杂工作流

工具调用的真正强大之处在于能够组合多个工具完成复杂任务。例如,一个"退货流程"可能需要:

  1. 使用get_user工具验证用户身份
  2. 使用get_customer_orders工具获取用户所有订单
  3. 使用get_order_by_id工具获取特定订单详情
  4. 使用cancel_order工具取消订单

这种多工具协同可以通过提示工程实现:

当处理退货请求时,请按以下步骤操作:
1. 询问用户邮箱以验证身份(使用get_user工具)
2. 获取用户所有订单(使用get_customer_orders工具)
3. 询问用户要退货的订单ID
4. 取消指定订单(使用cancel_order工具)
5. 告知用户退货流程已完成

总结与下一步

通过本文,你已经了解了工具调用的基本原理和实现方法。工具调用技术极大扩展了AI的能力边界,使其从单纯的文本生成工具转变为能够与外部系统交互的智能助手。

下一步学习建议

  1. 尝试扩展工具集,添加产品推荐、库存查询等功能
  2. 实现更复杂的错误处理和重试机制
  3. 探索工具调用与提示链(Prompt Chaining)的结合应用

工具调用只是高级提示工程的起点,更多高级技术可参考Anthropic 1P/10.2_Appendix_Tool Use.ipynbAmazonBedrock/10_2_3_Complete_Tool_Use_Workflow.ipynb

掌握这些技术后,你将能够构建更智能、更实用的AI应用,解决实际业务问题。

相关资源

【免费下载链接】prompt-eng-interactive-tutorial Anthropic's Interactive Prompt Engineering Tutorial 【免费下载链接】prompt-eng-interactive-tutorial 项目地址: https://gitcode.com/GitHub_Trending/pr/prompt-eng-interactive-tutorial

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值