03_Agent
Agent 面试题
01 什么是 Agent,和普通 LLM 有什么区别?⭐⭐⭐
Agent 其实就是基于 LLM 构建的具有自主性的一个智能系统,它能够自主的对任务进行推理、决定使用哪些工具,并迭代地朝着解决问题的方向努力。简单说就是:Agent = LLM + 规划 + 工具调用 + 记忆。
它和普通 LLM 最本质的区别就是:普通 LLM 是被动响应(一问一答),Agent 自主完成任务。
02 Agent 的基础架构有那些?
Agent 的基本架构就是 LLM + Planning + Tool Calling + Memory,LLM 是整个系统的大脑,负责理解任务和做任务的推理、决策;工具让 Agent 能跟外部世界交互,赋予了 Agent 网络搜索、查询数据库、执行代码等能力;Memory 赋予了 Agent 长短期记忆的能力; Planning 负责把复杂目标拆解成可执行的步骤。
03 Workflow 是什么?与 Agent 的区别? ⭐⭐⭐
Workflow 是确定性的流程编排,其实就是预先通过图结构将执行的流程编排好、每一步怎么走都是相对确定的。所以 workflow 是可控的、可追溯的、可调试的。
而 Agent 由 LLM 驱动,每一步怎么走都是动态决策的,因此更灵活,但可控性弱于 Workflow。
04 那你什么时候用 Workflow,什么时候用 Agent?🚀🚀
Workflow 适用于流程固定、对一致性和可追溯性要求高的场景;Agent 适用于目标明确但路径不固定的开放任务。
它们也不是互斥的,例如在 Agentic Rag 下,整体流程是固定的,但检索策略不是固定的:简单问题,直接向量检索一次就够。复杂问题:需要多轮检索,重排序,甚至先拆分子问题再分别检索,所以,这个判断就可以交给 Agent 灵活处理。
05 Agent 的设计范式有哪些? ⭐⭐⭐
常见的 Agent 范式主要有 ReAct、Plan-and-Execution、Reflection、Multi-Agent。
1. 什么是 ReAct
ReAct(Reasoning + Acting)是最常见的 Agent 范式,核心是 Thought → Action → Observation 循环:LLM 先分析当前局面写下推理过程(Thought),再决定调用哪个工具(Action),Observation 阶段则是接收工具返回的结果,然后回到下一轮 Thought,由 LLM 判断信息是否足够——够了就输出最终答案,不够就继续 Action。
优势:Agent会先想在做、减少了冲动决策的可能性;推理过程可见,出问题方便调试。
短板:属于"走一步看一步"的局部最优模式,处理长程复杂任务时容易在中间迷失方向,忘记最初目标或反复打转。
2. 什么是 Plan-and-Execution
Plan-and-Execution 解决了 ReAct "走一步看一步"容易迷失的问题,它将规划和执行解耦:先由 LLM 做全局规划,把复杂任务拆解成完整执行步骤,再交由执行器逐一完成。成熟的 Plan-and-Execution 实现还包含动态重规划机制——每执行完一步都把结果反馈给规划器,规划器会去动态的判断当前计划是否需要更新,从而保证计划是活的。
优势:解决 ReAct "走一步看一步"容易迷失的问题,有全局视图,复杂任务更可控。
短板:多了规划环节,成本和延迟增加;并且如果初始方向错了,后续难以挽回。
3. 什么是 Reflection
在 ReAct 或 Plan-and-Execute 的基础上加一层质量保障:Agent 完成一步或整个任务后,让其他 LLM 判断做得好不好、是否符合预期。不通过则重试或换策略。
4. 如何选择 Agent 范式?
主要从三个维度考虑:任务复杂度、质量要求、成本。
- ReAct:步骤不多、相对独立、成本敏感的场景
- Plan-and-Execution:长程复杂任务、步骤之间有依赖、需要全局统筹
- Reflection:对输出质量要求高、允许额外成本
同时,三者不是互斥的,可以组合使用:整体用 Plan-and-Execution 做全局规划,每个步骤内部用 ReAct 执行,关键节点叠加 Reflection 做质量把关。
06 复杂任务为什么要拆分?怎么做任务拆分? 效果如何提升?
1. 为什么要拆分
复杂任务往往包含多个目标、多个步骤,不同的步骤直接甚至可能存在依赖,
如果直接让 LLM 一次性完成整个任务,它需要在一次推理中同时完成规划、检索、分析、代码生成等工作,推理跨度很长,容易遗漏步骤或在某个环节出错,而且一旦失败,也很难定位问题和局部重试。
因此,我们通常会将复杂任务拆分成多个边界清晰、职责单一的子任务,每一步只解决一个问题。
这样不仅降低了单次推理难度,提高了模型输出的稳定性,还方便对子任务进行验证、重试和并行执行,整体任务的完成质量和执行效率都会更高。
本质上,任务拆分就是把一个难以控制的大问题,拆分为多个可执行、可验证、可恢复的小问题。
2. 如何拆分
拆分一个复杂任务的方式主要有两种,第一种可以叫静态拆分,其实就是由人提前规划好当前任务的执行步骤。而动态拆分则是把任务拆解交给 LLM 去做,llm 接收到一个比较复杂的任务目标,然后输出一个完成任务的步骤列表。
当然,拆分完任务以后,为了提高执行速度,还要分析每一步之前的依赖关系,这样就可以把能并行的步骤并发执行,从而提升整体的执行效率。
3. 如何提升拆分效果
一是自适应拆分:不要在开始就把所有步骤的粒度定死,而是"做不好就继续拆"——先让执行器尝试完成当前任务,做得好就继续走;如果超过了最大步数还没完成、或者输出质量不达标,就把这个任务交还给规划器,进一步拆成更小的子任务。整个过程像一棵递归展开的任务树,只有真正做不好的节点才会被继续拆分,计算开销和实际难度成正比。
二是重规划(Replan):每执行完一步,把结果反馈给规划器,判断是否偏离预期。如果子任务失败或发现新线索,及时修改后续计划,保持计划是活的。
07 介绍一下 AI Agent 的记忆机制,并说明在实际开发中应该如何设计记忆模块?
AI Agent 的记忆分为短期记忆和长期记忆:
短期记忆 是 Agent 在当前任务中维护的工作上下文,包括对话历史、任务状态、工具调用结果和中间结论。
长期记忆 把重要信息持久化到数据库或向量库中,突破窗口限制,实现跨会话、跨任务的知识保留。比如用户偏好、项目背景啊(claude.md | agent.md)
实际开发中设计记忆模块主要解决三个问题:
- 存什么:过滤无关对话,只保存对未来任务有价值的信息;
- 怎么存:结构化信息存关系型数据库或 KV 存储,适合语义检索的内容存向量数据库;
- 什么时候取:任务开始时加载必要的用户和项目背景,执行过程中根据当前 Query 按需检索相关记忆。
记忆模块的核心不是“保存所有历史”,而是让 Agent 在合适的时间获取可信、相关且不过时的信息。
08 长短期记忆的作用?⭐⭐⭐
短期记忆:维持当前任务的状态,让 Agent 知道"刚才做了什么、说了什么",保证本轮对话连贯。
长期记忆:把重要信息持久化到数据库、向量库或本地文件系统中,突破窗口限制,实现跨会话、跨任务的知识保留。比如用户偏好、项目背景。
09 什么是 Multi-Agent?⭐⭐⭐
多智能体系统(Multi-Agent)就是多个 Agent 共同协作完成复杂任务,每个 Agent 各有分工,有的负责搜索、有的负责写代码、有的负责做评审。
Multi-Agent 的核心价值或者叫优点可以概括为:专注、分工、并行。
- 专注:每个 Agent 只关注自己的任务,有自己独立的上下文窗口,从而减少了无关上下文和工具带来的干扰;
- 分工:不同 Agent 负责不同领域,可以使用专门的提示词、模型和工具来提升 Agent 在当前领域的表现;
- 并行:没有依赖关系的任务可以同时执行,提高整体效率。
10 单 Agent 的局限性 | 为什么要有多 Agent?⭐⭐⭐
- context 窗口有限:复杂任务步骤多、上下文信息量大,单个 Agent 容易出现 Context Rot 现象。而 Multi-Agent 架构下,每个 Agent 都有自己独立的上下文窗口。
- 能力分散:一个 Agent 同时处理多个不同领域的任务,每件事都是泛才。
11 什么叫做 Context Rot
随着输入给 LLM 的上下文越来越长,即使没有超过 Context Window,模型的理解能力、推理能力和遵循指令能力也会逐渐下降。
出现 Context Rot原因:
- 注意力被稀释(Attention Dilution)
- Lost in the Middle(中间遗忘)
- 指令冲突
- 噪声越来越多
12 Multi-Agent 的适用场景?局限性?⭐⭐⭐
Multi-Agent 主要适用于三类场景:
- 任务长:任务步骤多、上下文信息量大,单个 Agent 容易出现 Context Rot;
- 能力杂:任务涉及多个专业领域,需要不同的提示词、模型或工具;
- 可并行:任务可以拆分为多个相互独立的子任务,可以通过并行执行来提升效率。
但 Multi-Agent 也会带来额外的通信、调度等成本,系统复杂度也会会明显上升。
能用 Single-Agent 解决,就不要引入 Multi-Agent;只有当任务足够长、能力足够杂,或者确实需要并行时,才考虑 Multi-Agent。
13 了解多智能体的常见框架嘛?🚀
常见的 Multi-Agent 框架主要有以下几类:
- LangGraph:基于图结构编排 Agent,能够明确表示节点、状态和流转关系,适合构建复杂、可控、需要持久化和人工介入的工作流;
- AutoGen:强调多个 Agent 之间的对话协作,可以快速构建“多个 Agent 互相讨论、调用工具并完成任务”的系统;
- CrewAI:以角色、任务和团队为核心,使用方式比较直观,适合快速搭建具有明确分工的 Agent 团队;
- OpenAI Agents SDK:提供 Agent、工具、交接和追踪等能力,适合基于 OpenAI 模型构建多 Agent 应用。
LangGraph 更强调流程控制,AutoGen 更强调 Agent 对话,CrewAI 更强调角色分工,OpenAI Agents SDK 更强调 Agent 交接和工程集成。
14 Multi-Agent 的设计方案
现在主流的 Multi-Agent 的设计方案可以分为两种:
第一种是集中式调度(Supervisor):由一个 Supervisor 进行统一的调度协调。子 Agent 只负责执行具体任务,并将结果返回给 Supervisor。
第二种则是去中心化,在该模式下没有 Supervisor,多个 Agent 根据自身状态和任务结果进行协商、转交和协作。
集中式方案强调“统一调度、稳定可控”;去中心化方案强调“自主协作、灵活扩展”。
15 Agent 的记忆压缩方法有哪些?
为什么要压缩:因为 Agent 的 Context Window 有限,不能无限制往里面塞消息,必须把不重要的内容"减掉"或"浓缩",保留核心信息。
常见的记忆压缩方法主要有下面几种:
(1)滑动窗口:保留最近的消息,直接删除较早的历史记录。实现简单,但可能丢失重要信息。
(2)概:LLM 摘要:使用模型将较早的对话压缩成摘要,用摘要替代原始消息,在节省空间的同时保留主要语义。
(3)筛:重要性过滤:根据消息与当前任务的相关性或重要性进行筛选,优先保留关键内容,也可以对低价值内容进行摘要。
(4)抽:结构化抽取: 从历史对话中提取姓名、偏好、约束条件、任务状态等关键信息,以结构化数据保存,避免长期保留完整对话。
16 实习中,记忆压缩的设计和实现方式 ⭐⭐⭐
本质上就是通过 LLM 来对消息列表进行摘要压缩,但是考虑了很多的细节(确实考虑到了很多啊)。具体记录到实习项目对应的笔记中。
17 什么是 Prompt Caching
LLM 每次处理请求,都要把输入的所有 token 过一遍模型做计算(prefill),这是延迟和成本的主要来源。对于有固定 system prompt + 越来越长的历史对话,每次调用模型这部分内容都会被重新算一遍,即使和上次完全一样。
Prompt Caching 就是把这些 prompt 前缀部分的计算结果缓存起来,下次请求的 prompt 如果前缀匹配,则直接复用缓存,不重新计算。
18 如何赋予 LLM 规划能力? ⭐⭐⭐
LLM 本身是自回归的 token 生成器,不具备真正的"规划"能力。赋予它规划能力的核心思路是引导模型把思考过程显式地展开。从简单到复杂,有三种主流方案:
1. CoT(Chain of Thought,思维链)
CoT 让 LLM 把推理步骤写出来,一步步推导到答案。而不是直接生成答案。它通常只有一条推理路径,前面的判断出错后,后续步骤可能会沿着错误方向继续执行。
2. ToT(Tree of Thought,思维树)
ToT 在 CoT 线性推理的基础上,让模型同时探索多条推理路径,边探索边剪枝,最终选出最优路径。
3. GoT(Graph of Thought,思维图)
GoT 将推理过程表示为一张图。推理节点可以分支,也可以合并,不同路径产生的中间结论能够被组合起来继续推理。
相比 ToT,GoT 的表达能力更强,但实现和状态管理也更加复杂。
19 什么是 A2A 协议,原理是什么? ⭐⭐
A2A(Agent2Agent)协议是一套用于不同 Agent 之间协作完成任务的协议。
每个 Agent 通过 Agent Card 声明自己的身份、能力、技能和调用方式。其他 Agent 根据这些信息选择合适的协作者,并通过标准化的消息和任务接口进行通信。
这里的不同可以是不同框架实现的 Agent、不同语言开发的、不同服务或者团队维护等等。
20 了解什么是 Prompt Engineering 吗?🚀🚀
Prompt Engineering(提示词工程) 是指通过精心设计和优化Prompt,引导大语言模型生成高质量、符合预期的输出的一门工程学科。
它主要解决三个问题:
- 让模型理解任务:明确目标、背景、角色和约束;
- 提升输出质量:减少歧义、遗漏和幻觉;
- 约束输出结果:指定格式、风格和输出范围。
21 如何去写好提示词 | 做 Prompt Engineering?
写好 Prompt 的核心,是把模糊的需求转化为模型可以明确执行的任务指令。通常可以从以下几个方面设计:
- 设定角色:明确模型应该以什么身份、什么专业视角完成任务;
- 明确目标:说明要完成什么任务,以及什么结果才算完成;
- 补充上下文:提供必要的背景、数据和参考信息;
- 设置约束:说明不能做什么,以及需要遵守的规则;
- 规定输出:明确格式、字段、长度和语言风格;
- 提供示例:对于复杂任务,给出高质量的输入输出示例;
- 持续验证:通过测试集评估结果,根据错误类型不断优化 Prompt。
一个好的 Prompt 通常可以概括为: 角色明确、目标清晰、上下文充分、约束具体、输出规范。
22 了解 Context Engineering 吗?⭐⭐⭐
Context Engineering(上下文工程)是围绕 LLM 的任务目标,动态构建、筛选、组织和管理上下文信息的一套工程学科。
它关注的不只是 Prompt 怎么写,还包括应该向模型提供哪些信息、以什么顺序提供, 以及如何控制上下文的长度和质量!
23 Prompt | Context Engineering 分别解决了什么问题?⭐⭐⭐
Prompt Engineering 解决的是“如何向模型描述任务”,而 Context Engineering 解决的是“为模型提供什么信息、如何组织这些信息”。
24 为什么 Context Engineering 变得越来越重要?
为什么需要 Context Engineering 同理.
随着任务复杂度提升,单靠优化指令已经不够,还需要在有限的上下文窗口内,动态筛选和组织准确、及时的信息,从而提升模型的推理、工具调用和任务执行效果。
25 什么是 Agent Engineering 吗?(了解即可)
Agent Engineering 是围绕 LLM 构建具有自主性的智能体系统的工程方法,涉及任务规划、工具调用、上下文管理、记忆、状态流转和结果评估等内容,目标是让模型能够感知环境、采取行动并完成任务。
26 什么是 Harness Engineering?⭐⭐⭐
Harness Engineering 则是在 Agent 之上构建一套“控制与反馈系统”,尤其常用于 Coding Agent。它通过约束 Agent 的行为、检查 Agent 的结果,并根据反馈不断修正执行过程,让 Agent 更稳定、更可靠地完成任务。
"Harness"本意是马具——缰绳、鞍具那一套东西,把马的力气引到正确方向上。拿来类比 AI Agent 非常合适:LLM 就像一匹蛮力十足但方向感不太行的马,跑得快但容易跑偏.
27 为什么需要 Harness 呢? ⭐⭐⭐
Harness 是 Agent 的安全边界和反馈回路,让 Agent 不仅能完成任务,还能稳定、可靠地完成任务。