7.3 ToolStrategy使用详解

ToolStrategy通过工具调用(Tool Calling/Function Calling)实现结构化输出,所以LangChain会在消息列表末尾追加一条ToolMessage ,让整个链路完整。但实际上没有实际的工具执行,这是一条伪消息。
ToolStrategy适用于任何支持工具调用的现代模型。
ToolStrategy的配置包含三个主要参数:

图片[1]-7.3 ToolStrategy使用详解-大赛人网
  • schema(必需参数):与提供商策略的schema参数功能一致,支持Pydantic模型、TypedDict 、JSON Schema 、数据类(@dataclass) ,同时还支持联合类型Union[类型1, 类型2] (允许模型根据输入内容选择最匹配的数据结构)。
  • tool_message_content(可选参数):用于自定义生成结构化输出时,会话历史中记录的提示信息。默认使用展示输出数据的标准响应语句。
  • handle_errors(可选参数):用于指定数据校验失败时的重试策略, 默认值为True 。

7.3.1 结构化输出:schema参数
下面演示四种Schema进行结构化输出代码实现。
提前说明:因为涉及到不同的Schema在不同模型供应商下表现的支持力度不同(上一章有说明,这里提供了两个模型供应商,大家自己选择)
使用CloseAI平台的模型:

图片[2]-7.3 ToolStrategy使用详解-大赛人网

使用OpenRouter平台的模型:

图片[3]-7.3 ToolStrategy使用详解-大赛人网
图片[4]-7.3 ToolStrategy使用详解-大赛人网

输出模式1:Pydantic类型
Pydantic类型的Schema支持数据验证,是优先推荐使用的方式。
举例1:

图片[5]-7.3 ToolStrategy使用详解-大赛人网

观察日志可知,这种方式将结构化信息作为伪工具传递,显然使用了Function Calling方法。
举例2:

图片[6]-7.3 ToolStrategy使用详解-大赛人网
图片[7]-7.3 ToolStrategy使用详解-大赛人网

注意:

  1. 如果是结构化输出,在系统提示词中最后提示结构化输出结果,如果提示词中先结构化输出结果(Agent已经执行完成),可能会导致一些工具不会再被调用。
  2. 系统提示词中最后加入“未找到用户”时的处理提示,避免程序一直调用工具尝试查找对应用户信息。

输出模式2:TypedDict类型
TypedDict 允许为字典对象定义固定的键名和对应的值类型,是带有类型提示的字典结构。具体的:

  1. TypedDict字段定义采用 Annotated[类型, 默认值, “描述”]格式
  2. 可选字段使用 Optional包装,默认值在 Annotated 中指定
  3. TypedDict 不支持运行时验证。
    举例1:
图片[8]-7.3 ToolStrategy使用详解-大赛人网

举例2:

图片[9]-7.3 ToolStrategy使用详解-大赛人网
图片[10]-7.3 ToolStrategy使用详解-大赛人网
图片[11]-7.3 ToolStrategy使用详解-大赛人网

输出模式3:JsonSchema类型
JSON Schema是提供一个标准的 JSON Schema 字典来定义结构。适合需要与多种编程语言交互或进行复杂数据约束定义的场景。
举例1:

图片[12]-7.3 ToolStrategy使用详解-大赛人网
图片[13]-7.3 ToolStrategy使用详解-大赛人网

注意以上代码中定义json_schema的时候指定的title, description, type, properties, required是遵循
JSON Schema 规范的标准关键字,是固定写法。具体细节在第06章2.3节已经介绍过了。输出模式4:@dataclass类型
@dataclass是Python 3.7引入的一个装饰器,用于简化数据存储类的定义。
举例1:

图片[14]-7.3 ToolStrategy使用详解-大赛人网

举例2:

图片[15]-7.3 ToolStrategy使用详解-大赛人网
图片[16]-7.3 ToolStrategy使用详解-大赛人网

多schema联合模式
ToolStrategy允许指定多个类型“ Union[类型1, 类型2] ”这种写法,LLM能够根据输入文本的内容,智能地选择最合适的一个数据模型(Schema)来生成结构化输出,但是最终会只有一种类型输出。
适用于根据不同输入内容,生成不同的结构化输出的场景,但是底层工具转换结构化输出只会转换成一种结构化类型输出。

图片[17]-7.3 ToolStrategy使用详解-大赛人网

继续:

图片[18]-7.3 ToolStrategy使用详解-大赛人网
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容