本质是一种 Agent 的**「交互决策范式 / 思维模式」**
是现在绝大多数工具型 Agent(LangChain、LlamaIndex、OpenAI Function Calling 底层思路来源)的基础框架。
让大模型交替进行
「思考推理 (Thought)」 (Reasoning)和
「调用工具行动 (Action)」 (Acting),
再拿到观察 (Observation),循环直到得出答案。
三个核心单元循环
1.Thought
模型内部推理,判断现在该做什么,要不要调用工具、调用哪个工具、参数是什么
2.Action
输出工具调用指令,执行外部动作(搜索、查询数据库、计算)
3.Observation
工具返回的结果,喂回给大模型,作为下一轮思考的输入
循环:
Thought → Action → Observation → Thought → Action → ...→Final Answer终止条件:模型判断信息足够,输出最终 Answer(Final Answer)
举个简单Demo例子:(注意别忽视Observation)
java
// ReAct 主入口
public String run(String question) {
StringBuilder history = new StringBuilder();
history.append("Question: ").append(question).append("\n");
for (int step = 0; step < MAX_STEP; step++) {
// 1. 调用LLM,输入历史上下文,拿到模型输出(Thought / Action / ActionInput / Answer)
String llmOutput = mockLLM(history.toString());
System.out.println("==== LLM输出 ====\n" + llmOutput);
// 2. 解析LLM输出
ParseResult parseResult = parseLlmOutput(llmOutput);
// 如果识别到Answer,直接终止,返回答案
if (parseResult.isFinalAnswer()) {
return parseResult.getAnswer();
}
String actionName = parseResult.getAction();
String actionInput = parseResult.getActionInput();
// 3. 路由执行工具,拿到Observation
Tool tool = toolMap.get(actionName);
if (tool == null) {
history.append("Observation: 不存在该工具").append("\n");
continue;
}
String observation = tool.run(actionInput);
System.out.println("==== Observation(工具返回) ====\n" + observation);
// 4. 追加本轮记录到上下文,进入下一轮循环
history.append(llmOutput).append("\n");
history.append("Observation: ").append(observation).append("\n");
}
return "达到最大轮次限制,终止";
}