面灵AI→

中科曙光 AI Agent 一面

轮次
一面
时间
2026-10
来源
牛客网

《面试题目》

  1. 实习内容和项目内容的关系是什么?
  2. 项目是自学还是学校项目?
  3. 简单介绍一下你的 Agent 项目。
  4. 数据来源、测试过程、整个流程讲一下。
  5. 举例说明整个系统的运转流程。
  6. 工具如何闭环?工具怎么选择?
  7. 提示词是如何写的、如何加工?
  8. 约束怎么写的?
  9. 需要支持多次工具调用(如 execute)时怎么做?
  10. Agent 循环怎么办?
  11. ReAct Agent 是怎么做的?
  12. RAG 知识库流程是怎样的?
  13. 取不到数据怎么办,怎么排查?
  14. 构建一个 Agent 分几个模块?
  15. 不用框架、自己搭建,需要手写哪些部分?
  16. 反问。

《参考解析》

Agent 的模块划分是这套题的主干,先把它讲清楚,其余问题都能挂上去。最小可用 Agent 有六个部分:① 模型层——封装 LLM 调用(模型选择、温度、流式输出、重试与降级);② 规划/决策层——决定下一步做什么(ReAct 循环、Plan-and-Execute、或直接 function calling);③ 工具层——工具的定义(名称、描述、参数 schema)、注册与选择、执行与结果回填;④ 记忆/上下文层——短期对话历史、长期记忆(向量库或结构化存储)、上下文窗口管理与压缩;⑤ 知识层(RAG)——文档切分、向量化、索引、检索与重排;⑥ 控制与观测层——循环终止条件、超时与步数上限、错误处理与回退、日志与轨迹记录、以及评测。如果不用框架手写,对应的就是:手写 tool schema 的 JSON 定义、把 messages 数组按协议拼好发给模型、解析模型返回的 tool_calls、执行工具并把结果作为 role: tool 的消息追加回上下文,循环直到模型返回普通文本或触发终止条件。要主动说清框架(LangChain/LlamaIndex 之类)帮你省的是编排、内存与工具适配,但循环控制、上下文裁剪、评测这三件事无论用不用框架都得自己设计,这也是面试官问「自己搭要写哪些」想听的答案。

ReAct 与 Agent 循环:ReAct 是「Reasoning + Acting」交替——模型先输出一段思考,再决定调用哪个工具,拿到工具结果(Observation)后继续思考,如此循环。实现上要注意四件事:① 终止条件必须有多个——模型给出最终答案、达到最大步数、总 token 或时间超预算、连续 N 次工具调用失败,任何一条触发就退出,否则会陷入死循环烧钱;② 循环检测——同一个工具用同样的参数被反复调用,说明模型卡住了,要打断并把已有信息交回模型或直接兜底回答;③ 上下文增长——每轮的工具结果都会进上下文,长任务下必须裁剪(保留最近 N 轮完整内容 + 更早内容的摘要),否则会撞上窗口上限;④ 并行工具调用——模型一次可以返回多个 tool_calls,无依赖的应当并发执行以减少往返;有依赖的必须串行。多次工具调用的支持要点是:把每个结果按 tool_call_id 对应回填(顺序和 id 不能错,否则协议校验会失败)、单次结果做体积截断(把超大 JSON 摘要化或落盘给路径)、失败结果也要回填并说明错误原因,让模型有机会换参数重试。

工具的选择与闭环:选择上主流有三种做法——① 把全部工具的描述塞进系统提示,靠模型自己选(工具少于 20 个时最省事);② 用分层路由:先按意图粗分类,再在子集内选(工具多时最实用,能显著减少提示长度和误选);③ 用检索方式按用户输入召回相关工具(工具上百个时用)。工具的定义质量比数量重要:名称要动词开头且语义明确、描述要写「什么时候用它、什么时候不要用它」、参数要有类型和约束、最好带一个调用示例。闭环指「模型能判断工具结果是否达成了目标,并决定继续、换工具还是收尾」,这需要在提示里明确成功/失败的判据并给出结束条件。另外一定要讲错误处理:工具超时要有短超时 + 有限重试、参数非法要返回可读的报错(让模型能改参)、工具本身返回空要区分「查询成功但无数据」和「查询失败」。

RAG 流程按链路六步讲:文档加载与解析(PDF/HTML/表格,表格和图片是最容易丢信息的地方)→ 切分(固定长度、按语义/标题层级、父子块或句子窗口,块大小要按 embedding 模型的有效长度调,通常几百 token、带重叠)→ 向量化与索引(embedding 模型选择、向量库 HNSW/IVF 索引,元数据要一起存以便过滤)→ 检索(向量召回、关键词 BM25 混合检索、元数据过滤)→ 重排(cross-encoder 或 LLM 重排提升 top-k 精度)→ 生成(把命中片段作为引用塞进提示,要求模型只依据给定内容回答并标注出处)。常见的质量问题是「召回不到」和「召回了但答错」,分别对应检索侧(query 改写、多路召回、混合检索、调 top-k)和生成侧(重排、提示里明确「无依据就回答不知道」、引用校验)的优化。

**「取不到数据怎么排查」**这题答成一套排查清单最能得分,按链路自后向前查:① 先确认是哪一层失败——是模型没发起工具调用、还是工具调用失败、还是工具成功但结果为空;看轨迹日志就能区分。② 工具调用失败看 HTTP 状态码和错误体(鉴权过期、参数格式错、被限流、下游超时)。③ 工具成功但空结果:确认查询条件(时间范围、id 是否正确、是否被过滤条件排除)、确认数据确实存在(手工用同样参数查一次源头,做基准对比)、确认单位/时区/口径差异。④ 检索型取数:确认索引是否建好、文档是否入库、embedding 与查询是否用同一个模型、阈值是否设得过严。⑤ 兜底策略要设计好:让模型明确说明「我没有取到数据,原因是 X」而不是编造;可以给一次换参数重试的机会;仍失败则降级到转人工或返回已有信息,并把这个 case 记进日志用于后续评测。收尾补一句「这类问题最怕静默返回空,所以工具层必须区分空结果与错误,并且都要留下 trace」,体现工程意识。

**项目类问题(数据来源 / 测试过程 / 与实习的关系)**要按「来源可信、评测可复现」来答。数据来源要能说清:是公开数据集、业务日志、还是人工构造,是否涉及隐私与脱敏,数据量级和覆盖范围。测试/评测是 Agent 面试的必问项,合格的说法是三层:① 离线评测集(从真实 query 里采样并人工标注期望答案/期望工具调用,覆盖正常、边界、无答案三类);② 按维度打分(是否选对工具、参数是否正确、答案是否忠实于来源、有没有幻觉,可用规则匹配 + LLM-as-judge 结合);③ 线上观测(成功率、平均步数、平均耗时与 token 成本、人工介入率、用户反馈)。能说清「改了一版提示词之后,评测集上的通过率从多少到多少」是最有说服力的。