Agent面试题答案整理(一)

一、Agent 架构

1. 组件与分层

问题:一个完整的Agent系统由哪些核心组件组成?如何分层设计?

答案:

一个标准的Agent系统通常由6大核心组件组成:

  1. LLM大脑------推理决策中心,负责理解用户意图、生成思考步骤、调用工具决策。是Agent的"CPU"。

  2. 记忆模块------分为短期记忆(对话上下文、当前任务状态)和长期记忆(知识库、历史对话、用户画像)。是Agent的"硬盘+内存"。

  3. 工具系统------Agent与外部世界交互的接口,包括搜索引擎、代码执行、API调用、文件操作等。是Agent的"手和脚"。

  4. 规划模块------负责目标拆解、任务编排、执行计划生成。是Agent的"项目经理"。

  5. 执行器------负责实际执行工具调用、处理返回结果、异常重试。是Agent的"执行者"。

  6. 评估与反馈模块------验证执行结果是否达标、收集反馈用于迭代优化。是Agent的"质检员"。

分层设计一般分4层:

  • 交互层------用户接口(聊天界面、API、CLI等)

  • 编排层------规划、记忆、决策逻辑

  • 工具层------各类工具封装、MCP服务

  • 基础设施层------LLM调用、持久化、日志监控

**面试亮点:**提到ReAct模式(推理+行动交替)、AgentLoop概念,以及为什么要解耦------方便替换LLM、扩展工具、独立优化各模块。

2. 通信与协议

问题:Agent内部各组件之间如何通信?多Agent系统用什么协议协作?

答案:

单Agent内部通信:

  • 消息总线/事件驱动:组件之间通过消息队列或事件订阅解耦,比如工具执行完成发事件,记忆模块监听更新

  • 共享上下文对象:比如一个State对象在整个Agent生命周期传递,包含任务状态、对话历史、工具结果等

  • 函数调用:简单Agent直接用函数调用传递数据,成本最低

多Agent之间通信:

  • MCP(Model Context Protocol)------Anthropic提出的开放协议,类似Agent界的"USB接口",标准化了工具、资源、Prompt的调用方式

  • 消息队列------如Redis Pub/Sub、Kafka,适合异步协作场景

  • 共享记忆------通过向量数据库或共享文档作为信息交换的中间层

  • 自定义协议------比如用JSON-RPC定义Agent间的调用格式,指定角色、消息类型、优先级

**常见协作模式:**主管-工人模式(Manager-Worker)、对等讨论模式(如辩论Agent)、流水线模式(每个Agent负责一个环节)。

**面试亮点:**提到MCP为什么重要------解决了Agent生态碎片化问题,工具一次封装到处可用。

3. 工具与权限

问题:Agent调用工具时如何做权限控制?有哪些安全风险?

答案:

权限控制的分层策略:

  1. 工具注册层------不是所有工具都对Agent开放,按角色和场景注册可用工具列表。比如只读Agent不能注册删除类工具。

  2. 审批层------高危操作(删文件、发邮件、转账)需要人工确认,Agent提出申请,用户点确认才执行。

  3. 沙箱层------代码执行、文件操作放在隔离沙箱里,限制网络访问、文件系统范围、CPU/内存。

  4. 审计层------所有工具调用都记录日志,谁调的、调了什么、结果如何,全链路可追溯。

主要安全风险:

  • 提示注入(Prompt Injection)------工具返回的内容里嵌入恶意指令,诱导Agent做坏事

  • 越权操作------Agent绕过限制调用了不该用的工具

  • 数据泄露------Agent把敏感信息通过工具调用传出去

  • 资源滥用------Agent陷入死循环疯狂调用工具,产生巨额账单

**防御手段:**输入输出过滤、工具参数校验、调用频率限制、预算上限、敏感操作二次确认。

**面试亮点:**可以提Claude Code的自动模式(Auto Mode)------用独立AI分类器实时评估每次工具调用的安全性,自动放行或拦截。

4. 扩展与插件

问题:如何设计一个可扩展的Agent系统?插件机制怎么实现?

答案:

**可扩展设计的核心原则:**面向接口编程,对扩展开放、对修改关闭。

常见扩展点:

  • LLM扩展------统一LLM接口,支持切换不同模型供应商(OpenAI/Anthropic/DeepSeek等),业务层不依赖具体模型

  • 工具扩展------工具注册机制,新工具只需实现标准接口(名称、描述、参数Schema、执行函数),自动被Agent发现和调用

  • 记忆扩展------支持不同存储后端(SQLite/Postgres/Redis/向量数据库),统一接口

  • 规划策略扩展------不同的规划算法(ReAct/Plan-and-Execute/Reflection)可插拔替换

插件机制的实现方式:

  1. 配置式------YAML/JSON配置文件声明插件,系统启动时自动加载(最简单)

  2. 入口点(Entry Point)------Python的entry_points机制,pip install即注册

  3. MCP协议------通过标准协议接入外部工具服务,语言无关,最灵活

  4. 动态加载------运行时扫描指定目录下的插件文件,热加载

**面试亮点:**对比LangChain的工具生态 vs MCP的区别------LangChain是Python库级别的扩展,MCP是网络协议级别的扩展,跨语言跨进程,更适合Agent时代的工具生态。

二、规划与执行

5. 目标拆解

问题:Agent如何把一个模糊的大目标拆解成可执行的小步骤?

答案:

**目标拆解的核心挑战:**用户需求往往模糊、不完整、有歧义,Agent需要先理解清楚"到底要做什么",再拆成步骤。

常用拆解方法:

  1. Chain-of-Thought(思维链)------让LLM一步一步思考,把大问题拆成小问题。最简单最常用。

  2. Plan-and-Execute------先单独生成一个详细计划(列出所有步骤),再按计划执行。适合复杂任务。

  3. Tree of Thoughts(思维树)------每个步骤生成多个可能性,评估后选最优路径往下走。适合需要探索的任务。

  4. LLM+工具辅助拆解------遇到不确定的领域,先调用搜索工具了解背景,再做拆解。

拆解的原则:

  • 每个子目标要具体、可验证(知道做完了没有)

  • 子目标之间依赖关系清晰(谁先谁后、哪些可以并行)

  • 粒度适中------太细则效率低,太粗则执行容易失败

  • 留有余地------计划不是死的,执行中发现问题要能动态调整

**面试亮点:**提到"反思(Reflection)"机制------Agent执行几步后停下来复盘,看看方向对不对,要不要调整计划。好的Agent不是一条路走到黑。

6. 任务分解

问题:任务分解和目标拆解有什么区别?多Agent场景下如何分配任务?

答案:

目标拆解 vs 任务分解:

  • 目标拆解是"做什么"的问题------把大目标切成小目标,是逻辑层面的

  • 任务分解是"谁来做、怎么做"的问题------把拆解后的目标分配成具体执行任务,是执行层面的

举个例子:目标是"做一个网站",目标拆解成"需求分析→设计→开发→测试→上线",任务分解则是"前端工程师做页面A、后端工程师做接口B、测试工程师写用例C"。

多Agent任务分配策略:

  1. 按角色分配------每个Agent有明确分工(代码Agent、文档Agent、测试Agent),按任务类型自动路由

  2. 竞标式分配------任务发布后,各Agent投标说明自己的能力和方案,主管Agent选最合适的

  3. 流水线式------任务按顺序流经不同Agent,每个Agent负责一个环节(类似工厂流水线)

  4. 动态分配------根据Agent当前负载、历史表现、领域匹配度,实时调度

**面试亮点:**提到任务分解的粒度权衡------太细通信开销大,太粗单个Agent压力大。最佳实践是"高内聚、低耦合"的任务边界。

7. 执行流程

问题:一个Agent从接收任务到完成,典型的执行流程是什么样的?

答案:

以ReAct模式为例,标准的AgentLoop执行流程是这样的:

  1. 理解任务------接收用户输入,结合历史上下文,明确任务目标和约束

  2. 思考(Thought)------LLM分析当前状态,判断下一步该做什么

  3. 行动(Action)------决定调用某个工具,生成工具参数

  4. 观察(Observation)------执行工具调用,获取返回结果

  5. 评估------判断结果是否符合预期、任务是否完成

  6. 循环或结束------没完成就回到第2步继续,完成了就输出最终答案

执行流程中的关键机制:

  • 最大步数限制------防止死循环,设一个最大迭代次数(比如25步)

  • 异常重试------工具调用失败时自动重试,指数退避

  • 错误恢复------遇到错误时分析原因,调整策略再试,而不是直接放弃

  • 早期终止------判断任务已完成时提前结束,不浪费步数

**面试亮点:**对比ReAct和Plan-and-Execute的适用场景------ReAct灵活适合探索型任务,Plan-and-Execute稳定适合结构化任务。高级Agent会结合使用:先做计划,再用ReAct执行每一步。

8. 结果验证

问题:Agent怎么知道自己做对了?如何验证执行结果的正确性?

答案:

结果验证的几个层级:

  1. 工具层验证------工具调用是否成功?返回码对不对?参数有没有问题?这是最基础的。

  2. 功能层验证------结果是不是预期的格式?内容有没有明显错误?比如让Agent写代码,就跑一下单元测试看通不通过。

  3. 目标层验证------最终结果是否满足了用户的原始需求?这是最难的,因为需要理解"用户到底想要什么"。

常用验证方法:

  • 断言式验证------预先定义好成功条件(检查文件是否存在、API返回200、测试用例通过等)

  • LLM自评------让另一个LLM(或同一个LLM换个Prompt)评估结果质量,给出评分和改进建议

  • 人机协作验证------关键节点把结果展示给用户确认,再继续下一步

  • 对比验证------生成多个候选答案,互相比较选最优

  • 回滚机制------验证失败时能回退到上一个状态,重试或换方案

**面试亮点:**提到"Agent评估是AI领域的硬骨头"------因为很多任务没有标准答案(比如写一篇文章),怎么评估好坏本身就是个研究问题。工业界常用的做法是关键指标自动化 + 抽样人工评估。

三、记忆与上下文

9. 短期记忆

问题:Agent的短期记忆是什么?如何设计和管理?

答案:

**短期记忆(Working Memory)**就是Agent当前能"看到"的信息,相当于人类的工作记忆------你正在思考的事情、刚说过的话、当前任务的状态。

短期记忆的内容通常包括:

  • 当前对话历史(用户和Agent的消息列表)

  • 当前任务状态(进行到哪一步了、中间结果是什么)

  • 工具调用的最近结果

  • 系统提示词(System Prompt)

短期记忆的核心挑战:上下文窗口限制。

LLM能处理的token数是有限的(比如128K、200K),短期记忆塞不下了怎么办?

常用策略:

  1. 滑动窗口------只保留最近的N轮对话,老的扔掉。简单但会丢信息。

  2. 摘要压缩------把老的对话用LLM总结成摘要,保留核心信息,节省空间。

  3. 重要性筛选------给每条记忆打重要性分数,重要的留下,不重要的淘汰。

  4. 转入长期记忆------把有长期价值的信息存到向量数据库,需要时再检索回来。

**面试亮点:**提到"记忆的组织方式会直接影响Agent表现"------比如把系统提示、工具描述、对话历史分块管理,比一股脑塞进去效果好。

10. 长期记忆

问题:长期记忆怎么实现?RAG和长期记忆是什么关系?

答案:

**长期记忆(Long-term Memory)**是Agent"记住"的持久化知识------用户偏好、历史项目经验、知识库内容、学习到的技能等。关机不丢。

长期记忆的存储方式:

  1. 结构化数据库------存用户信息、配置、任务记录等结构化数据(PostgreSQL、MySQL)

  2. 向量数据库------存文本embedding,用于语义检索(Chroma、Pinecone、Milvus、pgvector)

  3. 知识图谱------存实体和关系,适合复杂推理场景(Neo4j)

  4. 文件系统------存代码、文档、生成的文件等

RAG和长期记忆的关系:

RAG(检索增强生成)是实现长期记忆的核心技术。流程是:

  1. 把知识文档切分成块,生成向量存入向量库

  2. Agent需要信息时,把当前问题也生成向量,去库里找最相似的内容

  3. 检索到的相关内容塞回LLM上下文,让LLM基于这些信息回答

所以RAG就是长期记忆的"存取机制"------存的时候向量化,取的时候语义检索。

**提高长期记忆质量的技巧:**分块策略(按语义分块、重叠分块)、多路召回(向量+关键词+元数据过滤)、重排序(Rerank)、记忆更新与遗忘机制。

**面试亮点:**提到"记忆不只是存和取,还有遗忘"------好的长期记忆系统需要有过期机制、重要性排序、去重合并,不然记忆越多越乱,检索质量反而下降。

11. 上下文管理

问题:上下文管理具体要做什么?为什么说它是Agent性能的关键?

答案:

上下文管理就是"每次给LLM看什么内容"的艺术------给多了浪费token还可能干扰,给少了信息不够答不对。

上下文管理的核心工作:

  1. 信息优先级排序------系统提示 > 工具定义 > 当前任务 > 最近对话 > 相关历史记忆 > 其他。重要的放前面或放靠近查询的位置(利用LLM的近因效应)。

  2. 信息筛选------不是什么都塞进去。只保留和当前任务相关的,无关的放长期记忆里。

  3. 格式组织------同样的内容,结构化呈现(用XML标签分块、用Markdown列表)比一大段文本效果好很多。

  4. 动态调整------任务不同,上下文组成也不同。写代码时多塞代码上下文,做决策时多塞历史数据。

为什么重要:

  • 准确性------上下文对不对直接决定回答质量

  • 成本------少塞1000token就是省钱

  • 速度------上下文越短,LLM推理越快

  • 抗干扰------无关信息会让LLM跑偏("迷失在上下文中")

**面试亮点:**提到"Lost in the Middle"现象------LLM对上下文开头和结尾的信息记得牢,中间的容易忘。所以重要信息放两头,不重要的塞中间。

12. 历史回溯

问题:Agent怎么从历史对话中找回有用的信息?有哪些检索策略?

答案:

历史回溯就是"从过去的记忆里找出现在用得上的信息"。难点在于:历史那么多,怎么精准找到相关的?

常用检索策略:

  1. 关键词检索------直接搜关键词,简单直接,但漏检多(同义词、语义相关的搜不到)。

  2. 向量语义检索------把查询和历史都向量化,按相似度排序。能搜到语义相关的,但可能不精准。

  3. 混合检索------关键词+向量结合,两路召回再合并排序。效果最好,工业界标配。

  4. 时间加权------最近的历史更可能相关,给近期记忆加权。

  5. 重要性加权------标记为重要的记忆(用户明确说过的偏好、关键决策点)优先级更高。

  6. 元数据过滤------按时间范围、对话主题、参与者等先过滤再检索,缩小范围。

高级技巧:

  • 假设性文档生成(HyDE)------先让LLM根据问题"想象"一个答案,再用这个想象的答案去检索,有时比直接用问题检索效果好

  • 查询改写------把用户的模糊问题改写成更适合检索的查询词

  • 重排序(Rerank)------先粗排召回Top 50,再用更强的模型精排Top 10,兼顾速度和精度

**面试亮点:**提到"检索是记忆系统的命门"------存得多不如检得准。很多Agent项目做不好,不是记忆不够,而是检索质量差,该找到的找不到,不该找到的乱出来。

总结

这三大模块12个考点覆盖了Agent系统的核心能力:

  • 架构能力------能不能把系统设计清楚、扩展性好不好

  • 执行能力------能不能把事情做成、做对

  • 记忆能力------能不能从经验中学习、越用越好用

面试时建议用"概念+实际案例+技术选型+权衡思考"的结构回答每个问题------既要懂理论,也要有实践体感。

相关推荐
AICDragon1 小时前
1.8%就够了:K3的896个MoE专家,为什么激活率这么低反而是好事?
人工智能·算法
一心只读圣贤书1 小时前
AI 辅助前端视觉回归治理:从截图基线到变更解释
前端·人工智能
paopao_djshddhdj1 小时前
AI时代:企业如何实现钉钉数字化转型
人工智能·钉钉
一心只读圣贤书1 小时前
AI 辅助前端图片资源治理:从懒加载到多端适配
前端·人工智能
一心只读圣贤书1 小时前
AI 辅助前端 Feature Flag 治理:从灰度开关到实验复盘
前端·人工智能
逸模1 小时前
从2-3天到30分钟——逸模“秒级升维“如何重构出图效率
大数据·人工智能·工程·公装·连锁店
星辰_mya1 小时前
从简单罗列工具中看AI趋势
人工智能
李燚1 小时前
Checkpoint 源码:Agent 执行到一半怎么保存(第80篇-E66)
人工智能·ai·aigc·agent·checkpoint·rag·eino
何时梦醒1 小时前
🤖 Harness 工程:用 LLM as Judge + Best of N 打造自优化的 AI 代码生成流水线
前端·人工智能