Tool Calling Agent(工具调用代理)是LangGraph支持的一种AI Agent代理架构。这个代理架构是在Router Agent的基础上,大模型可以自主选择并使用多种工具来完成某个条件分支中的任务。工具调用大家应该非常熟悉,当我们希望代理与外部系统交互时,工具就非常有用。大模型能根据用户的自然语言输入选择调用工具,并将返回符合该工具架构的输出。
在LangGraph框架中,可以直接使用预构建ToolNode进行工具调用,其内部实现原理和我们之前介绍的手动实现的Function Calling流程思路基本一致.
经过ToolNode工具后,其返回的是一个LangChain Runnable对象,会将图形状态(带有消息列表)作为输入并输出状态更新以及工具调用的结果,通过这种设计去适配LangGraph中其他的功能组件。比如我们后续要介绍的LangGraph预构建的更高级AI Agent架构 - ReAct,两者搭配起来可以开箱即用,同时通过ToolNode构建的工具对象也能与任何StateGraph一起使用,只要其状态中具有带有适当Reducer的messages键。由此,对于ToolNode的使用,有三个必要的点需要满足,即:
ToolNode使用消息列表对图状态进行操作。所以它要求消息列表中的最后一条消息是带有tool_calls参数的AIMessage ,比如我们可以手动调用工具节点
from langchain_core.messages import AIMessage
message_with_single_tool_call = AIMessage(
content="",
tool_calls=[
{
"name": "fetch_real_time_info",
"args": {"query": "小米汽车"},
"id": "tool_call_id",
"type": "tool_call",
}
],
)
tool_node.invoke({"messages": [message_with_single_tool_call]})
通过ToolNode(tools)可以根据参数来执行函数,并返回结果。而其前一步,根据自然语言生成执行具体某个函数必要参数的过程,则由大模型决定,所以一个完整的基于大模型的工具调用过程应该是,在实例化大模型的时候,就告诉大模型你都有哪些工具可以使用。这个过程可以通过bind_tools函数来实现.
RE: LangGraph开发实战