agent面试必备9-AI Agent 核心框架大揭秘

发布时间:2026/6/23 23:01:42

agent面试必备9-AI Agent 核心框架大揭秘 AI Agent 核心框架大揭秘彻底搞懂 ReAct面试重点中的重点如果你正在准备 AI Agent 相关的面试或者打算自己动手写一个 Agent那么ReAct 框架绝对是你绕不开的“大山”。它不仅是目前最主流的 Agent 落地方式之一更是面试官最爱考的核心概念。今天我们就用最通俗易懂的语言、直观的例子和手把手的代码带你彻底吃透 ReAct1. 什么是 ReAct大白话解释ReAct 的全称是Reasoning Acting推理 行动。为了方便理解你可以把它想象成一个**“边想边做”的模范学生**。以前的大模型做题喜欢“一口气把答案全写出来”很容易脑补和胡说八道。而 ReAct 要求大模型先在心里嘀咕一句「我接下来要干什么」这叫推理 Thought真的去动手比如去查资料、按计算器、调 API这叫行动 Action看看结果拿到真实的返回结果这叫观察 Observation循环往复根据刚才看到的结果继续想下一步该干嘛直到把题解出来Final Answer。 一句话总结ReAct 把「思考过程」和「工具使用」写进同一条轨迹里让大模型的推理过程可监督、可纠错、可复现。2. ⚙️ 核心工作原理神奇的闭环大模型在单轮问答时最致命的弱点就是容易“幻觉”胡编乱造事实。ReAct 通过“行动”把大模型锚定在外部真实的证据上。它的标准工作流是一个死循环直到得出最终结论用户问题 (Question)→\rightarrow→“北京明天天气如何”推理 (Thought)→\rightarrow→“我需要知道北京明天的天气我应该调用天气搜索工具。”行动 (Action)→\rightarrow→选择工具search_weather传入参数北京, 明天观察 (Observation)→\rightarrow→外部工具返回“北京明天晴22度。”推理 (Thought)→\rightarrow→“我已经拿到天气信息了可以回答用户了。”最终答案 (Final Answer)→\rightarrow→“北京明天是晴天气温22度哦。”3. 经典的 Prompt 模板设计要想让大模型乖乖听话按这套流程走我们需要给它设定严格的 Prompt 模板。下面是一个经典的业界模板面试时可以口述核心结构你是一个可以调用外部工具来解决问题的智能助手。 你必须严格遵守以下格式进行多轮交互 Question: 你需要回答的用户输入问题 Thought: 仔细思考你下一步应该做什么 Action: 你要采取的行动必须是 [{tool_names}] 中的一个 Action Input: 传入给该工具的参数 Observation: 工具执行后返回的真实结果 ... (上述 Thought/Action/Action Input/Observation 的循环可以重复多次) ... Thought: 我现在已经收集到了足够的信息知道最终答案了 Final Answer: 针对原始问题的最终回答 开始 Question: {question} Thought: {optional_seed_thought}⚠️ 设计要点面试踩坑提醒工具清单要写清减少模型胡乱编造工具名的情况。Observation绝不能让模型自己写必须由我们的代码系统强制阻断模型生成由真实工具执行后填入。给几个示例 (Few-shot)给模型演示 1~3 个完整的轨迹能显著提高它对格式的遵从率。4. 代码实战手写一个 ReAct 循环 (含保姆级注释)面试官很喜欢让你手写或口述 ReAct 的代码逻辑。下面是一段极简但五脏俱全的 Python 代码逻辑fromtypingimportCallable,Dict,List,Tupledefparse_action(text:str)-Tuple[str,str]: 极简的解析器从大模型输出的文本中提取出 Action 和参数。 (实际生产中建议使用 JSON 结构化输出或更稳健的正则表达式) actionNoneaction_inputNoneforlineintext.splitlines():ifline.startswith(Action:):actionline.split(Action:,1)[1].strip()ifline.startswith(Action Input:):action_inputline.split(Action Input:,1)[1].strip()returnaction,action_inputdefreact_loop(question:str,tools:Dict[str,Callable],llm_call:Callable,max_steps:int6)-str: 核心 ReAct 循环调度器 :param question: 用户的问题 :param tools: 字典格式的工具箱key是工具名value是执行函数 :param llm_call: 调用大模型的函数 :param max_steps: 为了防止死循环设置最大尝试步数 # 获取可用工具的名称列表tool_names[, .join(tools.keys())]# 记录历史交互轨迹存入 Thought, Action, Observationhistory:List[Tuple[str,str,str]][]forstepinrange(max_steps):# 1. 组装当前的 Prompt包含系统提示、历史轨迹和当前问题promptbuild_prompt(question,history,tool_names)# 2. 调用大模型获取模型的下一步打算outllm_call(prompt)# 3. 检查是否得出了最终答案ifFinal Answer:inout:returnout.split(Final Answer:,1)[1].strip()# 4. 解析模型的输出提取 Thought 和 Actionthoughtextract_thought(out)# 假设我们有一个提取 Thought 的辅助函数action,action_inputparse_action(out)# 5. 安全校验模型选的工具存在吗ifnotactionoractionnotintools:obsf错误: 无效的工具。你必须从{list(tools.keys())}中选择。else:# 6. 【最关键一步】执行真实的工具代码获取观察结果obstools[action](action_inputor)# 7. 把这一轮的思考、行动和观察结果存入历史轨迹供下一轮使用history.append((thought,f{action}[{action_input}],obs))# 如果把 max_steps 耗尽了还没得出答案兜底退出return执行失败超过最大步数限制。5. 高频面试题与完美回答Q1ReAct 框架和“普通的 CoT思维链提示词”有什么本质区别标准答案普通的 CoT只在大模型内部展开推理不强制与外部环境交互容易产生闭卷幻觉。ReAct把推理与可执行的“行动”绑定在一起每一步行动后都会有真实的 Observation外部反馈打断模型的盲目生成用外部真实数据约束推理过程。Q2ReAct 为什么要显式地写出 Thought思考过程直接输出动作不行吗标准答案显式写出 Thought 具有三大价值可解释性出了 bug程序员看日志一眼就能看出它是哪一步想歪了。引导模型就像人类做数学题写草稿一样先写推理过程能显著提高大模型选择正确工具和参数的稳定性。学习信号这些完整的 Thought 轨迹可以收集起来未来用于做微调SFT训练更强的专属模型。 追问应对 1如果大模型自己在输出里伪造了 Observation观察结果怎么办应对策略在工程实现时系统的解析器一旦检测到模型输出了Action和Action Input就必须**强制截断Stop Sequence**它的生成Observation必须由我们的 Python 代码调用真实 API 后填入绝不能让模型自己续写。 追问应对 2ReAct 循环这么多次API 成本是不是很高应对策略是的每步一次调用延迟和成本随步数线性上升。缓解方法包括设置强制的max_steps上限、引入小模型作为专门的路由节点、以及对工具查询结果增加本地缓存Cache。6. ⚖️ 优缺点与适用场景总结维度分析说明✅优点可解释强轨迹清晰、回答踏实锚定真实数据、通用性好与具体工具解耦容易加新工具。❌缺点成本高/延迟大反复调用大模型、格式脆弱一旦大模型没按 JSON/特定模板输出解析器容易崩溃、全局规划弱它偏向于“走一步看一步”的贪心策略不如 Plan-and-Execute 有大局观。️适用场景需要频繁与外部工具交互、依赖环境实时反馈才能推进的任务如搜索查资料、写代码并看报错修复、查数据库。

相关新闻