Claude旧版工具使用教程

在旧版工具使用格式中,函数是在提示本身内定义的。当你向Claude提供工具和函数的描述时,Claude能够智能地决定何时以及如何使用这些工具来回答问题和完成任务。以下是一个工作流程示例:

  1. 函数定义和用户问题都在单个提示中传递给Claude。
  2. Claude评估用户的问题,并决定使用哪些函数以及使用什么参数。
  3. Claude构造格式正确的函数调用。
  4. 函数调用通过客户端代码使用明确的stop_sequence进行拦截,实际函数在客户端执行。
  5. 函数结果传回给Claude。
  6. Claude使用函数结果来制定对用户的最终响应。

定义函数

你可以通过向Claude提供包含在XML标签中的函数描述来定义函数。描述应包括:

  • 函数名称
  • 函数功能的纯文本说明
  • 预期的参数、它们的类型和描述
  • 返回值和类型
  • 可能引发的任何异常

以下是函数定义的示例:

    
xml
<tool_description>
    <tool_name>get_weather</tool_name>
    <description>
        检索指定位置的当前天气。
        返回一个包含两个字段的字典:
        - temperature:float,当前温度(华氏度)
        - conditions:string,当前天气状况的简要描述
        如果找不到提供的位置,则引发 ValueError。
    </description>
    <parameters>
        <parameter>
            <name>location</name>
            <type>string</type>
            <description>城市和州,例如 San Francisco, CA</description>
        </parameter>
    </parameters>
</tool_description>

旧版工具使用格式

为了让Claude调用函数,它必须输出一个非常特定格式的XML块。格式如下所示:

    
xml
<function_calls>
    <invoke>
        <tool_name>function_name</tool_name>
        <parameters>
            <param1>value1</param1>
            <param2>value2</param2>
        </parameters>
    </invoke>
</function_calls>

如果Claude同时调用多个函数,<function_calls> 块可以包含多个 <invoke> 块。每个 <invoke> 包含被调用函数的名称和传入的参数。

<function_calls> 块之后,并假设你有适当的停止序列,Claude将停止生成并等待函数结果在 <function_results> 块中传回,如下所示:

    
xml
<function_results>
    <result>
        <tool_name>function_name</tool_name>
        <stdout>
            function result goes here
        </stdout>
    </result>
</function_results>

如果函数引发异常,应返回如下内容:

    
xml
<function_results>
    <error>
        error message goes here
    </error>
</function_results>

示例

以下是一个完整的提示示例,它为Claude提供了两个函数和一个需要使用它们的问题:

    
xml
<tools>
    <tool_description>
        <tool_name>get_current_stock_price</tool_name>
        <description>
            获取公司的当前股票价格。返回 float:当前股票价格。
            引发 ValueError:如果输入的符号无效/未知。
        </description>
        <parameters>
            <parameter>
                <name>symbol</name>
                <type>string</type>
                <description>要获取价格的公司的股票代码。</description>
            </parameter>
        </parameters>
    </tool_description>
    <tool_description>
        <tool_name>get_ticker_symbol</tool_name>
        <description>
            通过公司名称搜索获取其股票代码。返回 str:公司股票的代码。如果未找到匹配的股票代码,则引发 TickerNotFound。
        </description>
        <parameters>
            <parameter>
                <name>company_name</name>
                <type>string</type>
                <description>公司名称。</description>
            </parameter>
        </parameters>
    </tool_description>
</tools>

用户询问“通用汽车公司目前的股票价格是多少?”时,Claude的响应如下:

    
xml
<function_calls>
    <invoke>
        <tool_name>get_ticker_symbol</tool_name>
        <parameters>
            <company_name>General Motors</company_name>
        </parameters>
    </invoke>
</function_calls>

获取股票代码后,Claude随后调用获取当前价格:

    
xml
<function_calls>
    <invoke>
        <tool_name>get_current_stock_price</tool_name>
        <parameters>
            <symbol>GM</symbol>
        </parameters>
    </invoke>
</function_calls>

旧版工具使用的局限性

旧版工具使用格式未针对Claude 3进行优化,可能会导致比新版工具使用格式更差的性能。我们强烈建议尽快切换到新版工具使用结构,它更加可靠,并能实现更高质量的性能,特别是对于更复杂的工具使用任务。

结论

切换到新版工具使用结构将大幅提升性能和可靠性。理解旧版工具使用的工作原理有助于顺利过渡到新版结构,从而充分利用Claude API的优势。

阅读全文
AI工具教程
免费领取AI学习资料 进AI副业交流群
礼物
AI工具教程
免费领取AI学习资料 进AI副业交流群