Langgraph中的agent与工具调用

张开发
2026/4/15 5:26:59 15 分钟阅读

分享文章

Langgraph中的agent与工具调用
文章目录一、agent到底是怎么知道 “要调用工具” 的二、Agent决定调用工具后它会做什么三、图引擎怎么知道 “要去调用工具”四、循环一、agent到底是怎么知道 “要调用工具” 的AI 知道要调用工具 你给它看了【工具说明书】图引擎知道要调用工具 AI 返回了【tool_calls 标记】因为 你绑定工具时等于给了它一本说明书llm_with_toolsllm.bind_tools(tools)这句代码的真实作用不是 “让 AI 执行工具”而是把所有工具的名字、参数、功能全部塞给 LLM 当提示词比如你可以调用以下工具4.update_patient_record更新患者信息5.order_lab_test开检查单 需要时请输出工具调用指令所以AI 看到用户问题- AI 查自己的 “工具列表”-AI 判断我解决不了必须用工具→ AI 自己决定我要调用工具二、Agent决定调用工具后它会做什么说是调用实质是返回一条 “带特殊标记的消息”**{tool_calls:[{name:order_lab_test,parameters:{...}}]}举个例子responsedoctor_chain.invoke({messages:state[messages]})print(f回复类型{type(response)})print(fresponse的结果{response})ifhasattr(response,tool_calls)andresponse.tool_calls:# ← 这里print(f LLM 决定调用工具:{response.tool_calls})else:print(f LLM 直接回复无工具调用)三、图引擎怎么知道 “要去调用工具”因为你的判断函数 看的就是这个标记def should_continue_doctor(state): last_message state[messages][-1]# 看这里iflast_message.tool_calls:returncontinue# → 去工具节点else:returnend图引擎它只看一条最后一条消息里有没有 tool_calls有 → 去工具节点没有 → 结束四、循环defshould_continue_doctor(state):messagesstate[messages]ifnotmessages:returnEND last_messagemessages[-1]# 1. 如果有工具调用 → 去工具节点ifhasattr(last_message,tool_calls)andlast_message.tool_calls:returndoctor_tools# 2. 不需要工具 → 结束本轮回到路由returnEND# 医生的条件边builder.add_conditional_edges(doctor,should_continue_doctor,{doctor_tools:doctor_tools,# 去工具END:END# 结束})# 工具执行完 → 自动回到医生builder.add_edge(doctor_tools,doctor)

更多文章