Function/tool calling #
https://python.langchain.com/docs/concepts/#functiontool-calling
INFO
我们将“工具调用tool calling”与“函数调用 function calling”这两个术语互换使用。尽管“函数调用”有时指的是对单个函数的调用,但我们将所有模型视为可以在每条消息中返回多个工具或函数调用。
工具调用允许聊天模型通过生成符合用户定义模式(schema)的输出来响应给定的提示。
虽然tool calling这个名称暗示模型正在执行某些操作,但实际上并不是这样!模型只是生成工具的参数,而是否实际运行该工具(或不运行)取决于用户。一个常见的例子是,如果你想从非结构化文本中提取符合某种模式的结构化输出,那么你可能不希望用生成的参数调用函数。你可以给模型一个“提取”工具,该工具接受与所需模式匹配的参数,然后将生成的输出视为最终结果。
工具调用并非普遍适用,但许多热门的大型语言模型(LLM)提供商都支持,包括 Anthropic、Cohere、Google、Mistral、OpenAI,甚至通过 Ollama 支持本地运行的模型。
LangChain 提供了一个跨不同模型的标准化工具调用接口。
标准接口包括:
ChatModel.bind_tools()
:用于指定模型可以调用哪些工具的方法。此方法接受 LangChain 工具以及 Pydantic 对象。AIMessage.tool_calls
:这是模型返回的AIMessage
上的一个属性,用于访问模型请求的工具调用。
工具使用(Tool usage) #
在模型调用工具之后,你可以通过调用工具来使用它,然后将参数传递回模型。LangChain 提供了 Tool
抽象来帮助你处理这一过程。
一般流程如下:
- 使用聊天模型响应查询生成工具调用。
- 使用生成的工具调用作为参数调用相应的工具。
- 将工具调用的结果格式化为
ToolMessages
。 - 将完整的消息列表传递回模型,以便模型生成最终答案(或调用更多工具)。
这就是工具调用代理(agent)执行任务和回答查询的方式。
请查看以下更详细的指南: