用途:在 LangGraph 工作流中集成工具调用(tool calling),把工具绑定到 LLM 并编排执行。
主要能力:
- 工具绑定:用 @tool 定义工具,通过 model.bind_tools(tools) 绑定;可用 tool_choice="any" 强制调用至少一个工具,或指定具体工具名,也可用 Pydantic 模型实现结构化输出。
- ToolNode 执行:用 langgraph.prebuilt.ToolNode 创建工具执行节点,配合 StateGraph 与条件边(依据最后一条消息的 tool_calls 决定走向 tools 或 END),工具执行后回到 agent 节点。ToolNode 默认并行执行多个工具调用,结果按 tool_calls 顺序返回。
- 动态工具选择:用 SentenceTransformer 预计算工具描述嵌入,按查询相似度选取 top_k 工具再绑定,减少上下文占用。
- 审批门:用 langgraph.types.interrupt 在删除用户、大额转账等高风险操作前请求人工批准。
- 流式输出:用 langgraph.config.get_stream_writer 在长时间运行的工具中推送进度。
- 错误处理:工具内捕获异常并返回错误字符串,配合指数退避重试,避免抛出异常中断 agent 循环。
使用方式:定义工具与模型,绑定工具,构建含 agent 与 tools 节点的图,设置条件路由并编译运行。
适用场景:需要函数调用、工具编排、人工审批或进度反馈的 LangGraph 智能体。
限制与建议:每个 agent 工具数建议 5-10 个,过多会导致上下文溢出与选择变差;工具需写清描述;破坏性操作应加审批门;工具内不要抛异常。相关技能包括 langgraph-supervisor、langgraph-human-in-loop、langgraph-streaming、langgraph-routing、langgraph-state、function-calling。评测用例见 references/evaluations.md。