Function/tool calling

Function/tool calling #

https://python.langchain.com/docs/concepts/#functiontool-calling

INFO

我们将“工具调用tool calling”与“函数调用 function calling”这两个术语互换使用。尽管“函数调用”有时指的是对单个函数的调用,但我们将所有模型视为可以在每条消息中返回多个工具或函数调用。

工具调用允许聊天模型通过生成符合用户定义模式(schema)的输出来响应给定的提示。

虽然tool calling这个名称暗示模型正在执行某些操作,但实际上并不是这样!模型只是生成工具的参数,而是否实际运行该工具(或不运行)取决于用户。一个常见的例子是,如果你想从非结构化文本中提取符合某种模式的结构化输出,那么你可能不希望用生成的参数调用函数。你可以给模型一个“提取”工具,该工具接受与所需模式匹配的参数,然后将生成的输出视为最终结果。

tool-callings.png

工具调用并非普遍适用,但许多热门的大型语言模型(LLM)提供商都支持,包括 Anthropic、Cohere、Google、Mistral、OpenAI,甚至通过 Ollama 支持本地运行的模型。

LangChain 提供了一个跨不同模型的标准化工具调用接口。

标准接口包括:

  • ChatModel.bind_tools():用于指定模型可以调用哪些工具的方法。此方法接受 LangChain 工具以及 Pydantic 对象。
  • AIMessage.tool_calls:这是模型返回的 AIMessage 上的一个属性,用于访问模型请求的工具调用。

工具使用(Tool usage) #

在模型调用工具之后,你可以通过调用工具来使用它,然后将参数传递回模型。LangChain 提供了 Tool 抽象来帮助你处理这一过程。

一般流程如下:

  1. 使用聊天模型响应查询生成工具调用。
  2. 使用生成的工具调用作为参数调用相应的工具。
  3. 将工具调用的结果格式化为 ToolMessages
  4. 将完整的消息列表传递回模型,以便模型生成最终答案(或调用更多工具)。

tool-calling-flow.png

这就是工具调用代理(agent)执行任务和回答查询的方式。

请查看以下更详细的指南:

© 2024 青蛙小白
comments powered by Disqus