🛠️Langchain 0.2使用工具调用

type
status
date
slug
summary
tags
category
icon
password
😀
大型语言模型 (LLM) 可以通过工具调用功能与外部数据源交互。工具调用是一种强大的技术,允许开发人员构建复杂的应用程序,这些应用程序可以利用 LLM 访问、交互和操作外部资源,如数据库、文件和 API。openai大约在1年前发布了function call,后来迅速被业界进化成tool call,然后遗憾的是现在各家的实现接口都不相同,所以langchain在0.1~0.2版本中完善和推出了意在磨平tool call接口的统一API。
 

Langchain 提供的关于Tool Call的3个小工具

  • ChatModel.bind_tools():一种将工具定义附加到模型调用的方法
  • AIMessage.tool_calls:模型返回的 AIMessage 上的属性,用于轻松访问模型决定调用的工具
  • create_tool_calling_agent():一个Agent构造函数,可与任何实现 bind_tools 并返回 tool_calls 的模型一起使用。
基本上涵盖了LLM、消息类型、Agent type,来看下具体使用。
 

支持Tool calling的chatmodel

notion image
🔔
注意:很多国产LLM都号称自己已经具备了tool calling的能力,但是社区包很多并没有按照langchain的封装做升级,所以无法直接使用bind_tools,目前最安全的是月之暗面的API,因为月之暗面的API整体是完全复刻OpenAI的。

bind_tools()

与之前将tool直接绑定到chain、agent不同,现在通过bind_tools可以将需要使用的tool,以多种数据结构的方式告诉LLM,而不用像以前一样混在在提示词模板中。支持的数据结构有:
  • Pydantic Class
  • Langchain Tool
  • Function
  • openai-format dict
 
在以前的Agent开发中,tool的调用尤其是参数控制靠的还是提示词模板,总有参数出错的概率。那么现在则可以看到,你可以非常方便和清晰的定义工具的入参和出参,对于tool的控制力更强了,工具调用出错的概率大幅降低。
notion image
 

AIMessage.tool_calls

以前使用工具调用模型时,模型返回的任何工具调用都以 AIMessage.additional_kwargs 或 AIMessage.content的形式找到,具体取决于模型提供程序的 API,并遵循特定于提供程序的格式。也就是说,您需要自定义逻辑来从不同模型的输出中提取工具调用。现在,AIMessage.tool_calls提供了一个用于获取模型工具调用的标准化接口。因此,在使用绑定工具调用模型后,您将获得以下形式的输出:
 
其中 具有AIMessage一个tool_calls: List[ToolCall]属性,如果有任何工具调用,该属性将被填充,并将遵循工具调用的标准接口:
也就是说,无论您是调用 Anthropic、OpenAI、Gemini 等,只要有工具调用,它都会AIMessage.tool_calls以 ToolCall.

create_tool_calling_agent()

LLM 工具调用能力最强大和最明显的用途之一是构建Agent。LangChain 已经有一个create_openai_tools_agent()构造函数,可以很容易地使用遵循 OpenAI 工具调用 API 的工具调用模型构建代理,但这不适用于 Anthropic 和 Gemini 等模型。多亏了新的bind_tools()接口tool_calls,我们添加了一个create_tool_calling_agent()适用于任何工具调用模型的接口。
Loading...

No results found.