Agent 是怎么知道 “要不要调用 Tool” 的?它是在什么时候决定用 Tool,什么时候自己回答的?
Agent 的核心机制就是:
大模型(LLM)负责“思考”,Tool 负责“执行”。
换句话说: Agent = 一种“思考 → 工具调用 → 再思考”的循环机制。
整个流程拆成 6 步如下:
假设你调用的是:
agent.run("帮我查一下苹果手机的库存,还有写一个促销文案")
LangChain Agent 背后的运行机制是这样的:
第 1 步:把你的问题打包成一段 Prompt
这段 Prompt 里面包括:
-
你的问题 -
当前支持的工具列表(包含 name 和 description) -
工具调用的格式约定(像 ReAct 的思考链格式) -
历史上下文(如果有 Memory)
这一大段 Prompt 会告诉 LLM:“你有以下这些能力,要根据用户的需求决定是否使用。”
第 2 步:把这个 Prompt 发给 LLM(比如 qwen-turbo)
然后 LLM 会“模拟 Agent 的思考”,像人一样写出类似这样的回复:
Thought: 用户要查库存,应该使用查库存工具
Action: 查库存
Action Input: "苹果手机"
LangChain 就从这段话里解析出: → OK,大模型的意思是要调用 Tool 叫 “查库存”,传参 “苹果手机”。
第 3 步:LangChain 调用对应 Tool 的 func
也就是你之前注册的:
Tool(name="查库存", func=check_stock, description="输入商品名称返回库存")
于是调用 check_stock("苹果手机")
,拿到返回值,比如:
Observation: 当前库存还有 32 件
第 4 步:把 Observation 加进对话历史,继续 Prompt 给 LLM
现在 LangChain 重新构造 Prompt,告诉模型:
Thought: 用户要查库存...
Action: 查库存
Action Input: "苹果手机"
Observation: 当前库存还有 32 件
然后让 LLM 再接着想下一步怎么做。
第 5 步:LLM 可能再调用 Tool,或者直接输出回答
比如它下一步可能会输出:
Thought: 好的,现在我已经知道库存情况,可以生成促销文案了
Action: 写文案
Action Input: "苹果手机 + 库存还有 32 件"
或者:
Final Answer: 苹果手机目前还有 32 件库存,推荐文案:买它!买它!库存紧张,限时抢购!
第 6 步:LangChain 检测到 Final Answer,返回给你!
这个循环过程就结束了。
大模型每一次的“回复”,不是答案,而是一个行动计划。Agent 就是把这个“计划”翻译成实际工具调用,然后把结果返回给模型,继续思考。
再补一张流程图助你秒记:
用户提问 →
LangChain 构建 Prompt(含工具列表) →
↓
模型“思考”(生成 Thought + Action) →
↓
LangChain 执行 Action 对应的 Tool →
↓
拿到 Observation →
↓
再喂回模型继续思考 →
↓
直到输出 Final Answer → 返回用户
总结一下
-
Tool 不是“立刻”被调用的,而是“模型先思考一下”要不要用它 -
模型每次只做一小步:思考 → 执行动作 → 观察 → 再思考 -
Agent 的本质是:提示词驱动的微循环执行器,不是魔法,是 prompt 技巧 + tool 调度