# AI 智能体与大模型应用开发面试题库

> 定位：面向 **AI 智能体 / 大模型应用开发工程师**、**AI 应用开发工程师**、**Agent 开发工程师**。  
> 风格：偏 **应用落地、架构设计、工程治理、项目实战**，不偏纯算法研究或预训练细节。

文档特点：

- 每道题都标注了**重要度**和**难度**，方便区分必刷内容、常考内容和进阶内容。
- 题目下方尽量补充了**对应章节**，方便回看知识点、边学边练。
- 相当一部分题目来自**大厂真实面经**和实际高频追问场景，更贴近真实面试。
- 整体表达坚持**语言专业但易读**，尽量避免空话、套话和纯概念堆砌。
- 各个二级标题按主题分类，结构清晰，便于按模块系统复习。

重要度标记说明：

- `必刷`：大概率会被问到，答不好会直接暴露短板。
- `高频`：面试中很常见，通常是主问题或高频追问。
- `中频`：更偏工程设计、项目深挖和落地细节。
- `低频`：加分题、延伸题、岗位深挖题。

难度标记说明：

- `基础`：偏概念主干和标准答法，适合第一轮打底。
- `中等`：需要结合工程理解、分层表达或一定项目经验。
- `较难`：更偏系统设计、复杂治理、协议细节或高级架构取舍。

## 1、基础认知与技术选型

### Q1-1. RAG 和微调（SFT）的核心区别是什么？能不能一起用？

RAG 解决的是“知识从哪里来”，微调解决的是“模型应该怎么表现”。

RAG 不改模型参数，而是在运行时把相关资料检索出来，再交给模型生成答案，所以更适合处理时效性强、更新频繁、需要可溯源的知识。微调会改模型参数，更适合提升输出风格一致性、结构化能力、分类能力或领域行为稳定性。

它们当然可以一起用，而且很多企业项目就是这么落地的：用 RAG 提供知识，用微调或强约束输出提升行为稳定性。比如客服项目里，产品政策靠 RAG 保持最新，回复格式和字段输出靠微调或结构化输出保证稳定。

**常见追问：**

- 为什么多数企业项目不会优先做续训？
- 什么场景适合 `RAG + 微调` 组合？
- 如果预算有限，先做哪一个？

**重要度：**`必刷`（出现次数：3次） | **难度：**`中等`

**考察点：**知识增强和行为优化的区分能力。

**对应章节：**[1-3 RAG、微调、续训与智能体选型 §1、RAG](1-3-RAG、微调、续训与智能体选型.md#_1、rag)；[1-3 RAG、微调、续训与智能体选型 §2、微调（Fine-tuning）](1-3-RAG、微调、续训与智能体选型.md#_2、微调%EF%BC%88fine-tuning%EF%BC%89)

### Q1-2. 什么是 AI Agent？它和传统 AI 应用的区别是什么？

可以概括为：**Agent = 模型 + 工具集 + 运行循环 + 当前状态**。

- 模型负责理解目标和决定下一步。
- 工具集负责提供外部能力。
- 运行循环负责让系统不是只回答一次，而是能“想一步、做一步、看结果、再决定下一步”。
- 当前状态负责保存消息、工具结果和中间结论。

传统 AI 应用更接近“输入一个请求，返回一个结果”的单轮系统；Agent 更接近“围绕目标持续做决策”的运行方式。它的关键不只是用了大模型，而是具备了工具调用、状态推进和动态决策能力。

所以不是所有 AI 应用都该叫 Agent。固定表单生成、固定知识问答、固定流程审批，这类系统往往用普通链路或 Workflow 就够了。只有在路径不固定、需要根据中间结果继续选择工具或调整路线时，Agent 才真正合适。

另外也要注意，很多人会把“长期记忆、复杂规划、多智能体协作”都当成 Agent 的必备条件，不是。对很多入门场景来说，能做到“理解目标、决定是否调工具、拿到结果再继续判断”，就已经是 Agent 了。

**重要度：**`高频`（出现次数：2次） | **难度：**`基础`

**考察点：**是否理解 Agent 的本质，不会把任何聊天机器人都叫 Agent。

**对应章节：**[21 Agent智能体 §1、Agent 简介](21-Agent智能体.md#_1、agent-简介)；[1-3 RAG、微调、续训与智能体选型 §4、智能体开发](1-3-RAG、微调、续训与智能体选型.md#_4、智能体开发)

### Q1-3. 什么时候该用 Prompt、RAG、微调、Workflow、Agent？

最稳的判断方式，是先判断问题到底是**缺知识、缺行为，还是缺流程能力**。

- 如果模型本来就会，只是任务没描述清楚，先用 Prompt。
- 如果缺的是私有知识、最新知识、外部知识，优先上 RAG。
- 如果缺的是稳定行为，比如固定格式、固定语气、固定分类习惯，再考虑微调。
- 如果流程固定、节点明确、强调稳定和可审计，优先 Workflow。
- 如果路径不固定，需要边做边决定下一步、动态调用工具，再考虑 Agent。

这条选型主线可以压缩成一句话：

- **Prompt** 解决任务表达问题。
- **RAG** 解决知识来源问题。
- **微调** 解决行为稳定问题。
- **Workflow** 解决固定流程问题。
- **Agent** 解决动态决策问题。

真实项目里通常不会一开始就说“必须做 Agent”。大部分需求先用 `Prompt + RAG + Workflow` 就能覆盖，只有在任务开放度高、工具选择依赖中间结果、流程没法提前写死时，Agent 的价值才会真正体现出来。

**常见追问：**

- 为什么很多项目不一开始就做微调？
- 为什么不是所有复杂任务都适合 Agent？
- Workflow 和 Agent 的分界线是什么？

**重要度：**`必刷`（出现次数：1次） | **难度：**`中等`

**考察点：**技术选型能力、边界意识、是否有工程判断。

**对应章节：**[1-3 RAG、微调、续训与智能体选型 §1、RAG](1-3-RAG、微调、续训与智能体选型.md#_1、rag)；[1-3 RAG、微调、续训与智能体选型 §4、智能体开发](1-3-RAG、微调、续训与智能体选型.md#_4、智能体开发)

### Q1-4. Token 和上下文窗口是什么？它们在工程上意味着什么？

Token 可以看作模型处理文本的基本计量单位，不等于“字数”或“单词数”。模型在训练和推理时看到的不是原始文本，而是 tokenizer 切出来的一串 token。

上下文窗口则是模型单次推理时最多能看到多少 token 的上限。工程上常说的 `8K`、`32K`、`128K`，本质上说的都是“这次请求里系统提示、历史对话、检索结果、用户问题加起来最多能塞多少 token”。

它的工程意义非常直接：

- 上下文窗口决定了你能不能做长文问答、多轮对话和大段 RAG 上下文拼接。
- token 越多，成本通常越高，延迟也更容易上升。
- 超出窗口的内容会被截断、压缩或根本进不了模型，所以不是“塞得越多越好”。

如果只做一个大致口径，`128K token` 可以看作很长的一段内容。按常见经验口径，1 个中文字符大约是 `0.6` 个 token，1 个英文字符大约是 `0.3` 个 token，所以 `128K token` 粗略可以近似成二十万级别的中文字符量级。但这只是估算，真实数字会因为 tokenizer、语言类型、代码、标点和格式不同而波动。

**常见追问：**

- 1 个汉字、1 个英文单词大概是多少 token，为什么不能死记一个固定值？
- 如果上下文被截断了，你会优先怎么处理？

**重要度：**`高频`（出现次数：1次） | **难度：**`基础`

**考察点：**是否真正理解 token、上下文窗口和成本 / 截断 / 长文本场景之间的关系。

**对应章节：**[1-1 大模型认知与工程概览 §1、认识大模型](1-1-大模型认知与工程概览.md#_1、认识大模型)；[11 Model I/O 与模型接入 §2、LangChain 模型分类、参数与返回](11-Model-I-O与模型接入.md#_2、langchain-模型分类、参数与返回)

**来源：**腾讯AI后台工程师一面（实际大厂面试题）

### Q1-5. 大模型应用上线前你最关心哪些工程指标？

通常会从效果、性能、成本、稳定性、治理性五个维度看。

- 效果：准确率、忠实度、任务完成率、引用正确率。
- 性能：首 token 延迟、端到端延迟、P95/P99。
- 成本：token 消耗、检索成本、工具调用成本。
- 稳定性：超时率、错误率、重试率、降级命中率。
- 治理性：日志、Trace、Prompt 版本、索引版本、权限审计。

如果是 RAG / Agent 项目，我还会额外看检索召回质量、工具调用成功率、人工兜底比例和 badcase 回灌效率，因为这些才是真正影响线上体验的关键指标。

**常见追问：**

- 你怎么设计降级策略？
- 如果成本超预算，先优化哪一层？
- 怎样做 Prompt / 模型 / 索引回滚？

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否具备生产环境意识。

**对应章节：**[1-1 大模型认知与工程概览 §4、大模型的工程实现（概览）](1-1-大模型认知与工程概览.md#_4、大模型的工程实现%EF%BC%88概览%EF%BC%89)；[7 企业级大模型部署 §1、企业级大模型部署概述](7-企业级大模型部署.md#_1、企业级大模型部署概述)

---

## 2、Prompt、结构化输出与护栏

### Q2-1. System Message 和 User Message 应该怎么分工？

System Message 负责放稳定约束，User Message 负责放动态任务。

System 里一般放角色、目标、边界、安全规则、输出格式要求、工具使用规范，这些内容应该尽量稳定、少改。User Message 放用户当次任务、输入数据、补充上下文和个性化要求。

这样拆分的好处是结构更清晰，便于版本管理，也更适合后续做模板化、灰度和评测。如果把所有内容都混在一段 prompt 里，后面排查效果波动会非常困难。

**重要度：**`必刷`（出现次数：1次） | **难度：**`基础`

**考察点：**Prompt 分层设计能力。

**对应章节：**[13 提示词与消息模板 §3、入参的消息类型](13-提示词与消息模板.md#_3、入参的消息类型)；[13 提示词与消息模板 §7、对话提示词模板（ChatPromptTemplate）](13-提示词与消息模板.md#_7、对话提示词模板%EF%BC%88chatprompttemplate%EF%BC%89)

### Q2-2. 结构化输出有哪些常见做法？各自的优缺点是什么？

从 Model I/O 这条主线看，结构化输出大致可以分成“后处理解析”和“前约束结构化输出”两类。

- 纯 Prompt 约束：直接要求模型按 JSON 返回。优点是最简单、起步快；缺点是模型多说一句话、少个逗号，程序就容易崩，稳定性最差。
- Output Parser：比如 `StrOutputParser`、`JsonOutputParser`、`PydanticOutputParser`。它更接近“模型已经输出了，我再把结果转成程序可用的数据”，适合 `prompt | model | parser` 这条经典链路。
- Structured Output：比如 `with_structured_output(TypedDict / Pydantic / JSON Schema)`。它更接近“在模型输出前就先把 schema 定好”，让模型按结构生成并自动解析，约束力更强。
- Function Calling / Tool Calling：本质上也是结构化输出的一种，只不过目标更偏“生成调用意图和参数”，特别适合工具调用、外部接口编排和 Agent。

如果模型平台支持更严格的结构化输出能力，通常会优先采用只保证“返回合法 JSON”的模式，因为前者更接近“按 schema 生成”，后者很多时候只是“长得像 JSON”。

如果再往下细分：

- `TypedDict` 适合字段固定、但不追求很强运行时校验的场景。
- `Pydantic` 适合字段类型、范围、必填项比较严格的业务场景。
- `JSON Schema` 更适合跨语言、跨系统共享结构协议。

工程上通常不会把“让模型输出 JSON”当成真正的生产方案，更稳的顺序通常是：

1. 能用原生结构化输出就优先用。
2. 需要强校验时优先用 Pydantic 一类 schema。
3. 即使模型已经结构化输出，也要补业务校验、缺省值处理和失败重试。

归根结底，Prompt 只能“尽量要求它长成这样”，Parser 和 Structured Output 才是在帮你把模型输出真正接进程序系统。

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**从“能输出 JSON”到“能稳定接系统”的工程意识。

**对应章节：**[14 输出解析器 §1、输出解析器简介](14-输出解析器.md#_1、输出解析器简介)；[14 输出解析器 §4、结构化输出](14-输出解析器.md#_4、结构化输出)

### Q2-3. Prompt Injection 是什么？为什么 RAG / Agent 场景更要小心？

Prompt Injection 本质上是：**不可信输入试图改写系统指令、诱导模型越权，或者让 Agent 执行原本不该执行的动作。**

它不只来自用户直接输入，也可能藏在网页、PDF、知识库文档、邮件甚至图片里。只要这些内容会被模型读到，就可能形成“间接注入”。所以在 RAG、浏览器 Agent、代码解释器这类会读外部内容的系统里，风险会明显更高。

通常会从五层做防护：

- 指令分层：System 放稳定规则，User 和外部文档都视作不可信输入，不能和系统约束同权。
- 内容隔离：检索片段、网页内容、用户上传文档只当“待分析材料”，不要默认它们能发新指令。
- 工具权限：所有写操作、危险操作都走白名单、schema 校验和最小权限，不让模型拿裸能力。
- 动作校验：关键输出做规则校验，关键动作做确认、审批或 HITL，不让一句恶意文本直接触发副作用。
- 观测与兜底：记录注入样例、失败轨迹和异常调用，及时加入评测集和拦截规则。

这里有一句特别关键：**RAG 不是安全层，知识库文档本身也可能带恶意指令。** 只要把“检索到的内容”直接当成“可信提示词”，系统就很危险。

**常见追问：**

- 如果文档里写着“忽略之前所有指令”，你会怎么处理？
- 浏览器 Agent 怎么防网页里的隐藏提示词？
- 为什么微调和对齐不能从根上解决 Prompt Injection？

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**应用层安全意识，以及对直接注入、间接注入和工具越权风险的理解。

**对应章节：**[13 提示词与消息模板 §1、Prompt 简介](13-提示词与消息模板.md#_1、prompt-简介)；[17 Tools工具调用 §6、从课程案例走向真实项目](17-Tools工具调用.md#_6、从课程案例走向真实项目)

### Q2-4. Prompt Engineering 中，如何系统优化提示词并把准确率做上去？

通常不会把 Prompt 优化理解成“反复手改几句提示词”，而是把它当成一个小型工程闭环。真正想把准确率稳定做上去，核心不是玄学技巧，而是 **任务拆解、样例驱动、评测回归和边界收敛**。

比较稳的做法通常是：

- 先定义任务边界：先说清楚什么叫答对，什么叫答错，哪些情况必须拒答或澄清。
- 做输入分层：把稳定规则放 `System`，动态任务放 `User`，别把所有约束揉成一段长 prompt。
- 先修大问题再修措辞：如果问题本质是缺知识、缺工具、缺流程，不要强行靠 Prompt 硬抬效果。
- 用样例和反例：few-shot 示例、反例约束、输出格式示例，通常比抽象要求更稳定。
- 做结构化约束：能用 schema、parser、structured output 的地方，不要只写“请返回 JSON”。
- 建 badcase 集：把线上错例沉淀成固定评测集，每次改 Prompt 都跑回归，而不是靠体感判断“好像更准了”。
- 做版本和灰度：Prompt、模型版本、温度、输出格式要求一起管理，避免改了一个点却查不清影响。

如果从更务实的面试表达出发，还需要补一句：所谓“准确率 > 95%”一定要绑定具体任务，比如分类、抽取、格式生成、客服问答，它不是一个通用承诺值。真正的工程目标应该是让某个具体任务在固定评测集上稳定达标，而不是追一个脱离场景的数字。

**常见追问：**

- 如果 Prompt 怎么改都上不去，你怎么判断应该切到 RAG、Tool、Workflow 还是微调？
- badcase 集应该怎么建，才能真的指导迭代？
- 如果线上效果突然下降，你怎么判断是 Prompt 问题、模型版本问题，还是外部知识 / 工具链路问题？

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**Prompt 优化方法论、评测闭环意识，以及是否知道 Prompt 不是万能修复工具。

**对应章节：**[1-2 提示词工程基础 §2、提示词怎么写](1-2-提示词工程基础.md#_2、提示词怎么写)；[14 输出解析器 §8、实际开发选择](14-输出解析器.md#_8、实际开发选择)

### Q2-5. Prompt 工程的边界是什么？为什么不能把一切问题都交给 Prompt？

Prompt 更接近一种“任务表达和约束手段”，但它解决不了知识缺失、复杂状态管理和强执行需求。

比如资料太多时，仅靠 Prompt 塞上下文会出现成本高、噪声多、丢关键信息的问题，这时候应转向 RAG。多步骤复杂流程如果全靠 Prompt 硬编排，会变成不可维护的长指令，应该转 Workflow 或 LangGraph。需要稳定调用外部系统时，应该走 Tools / Function Calling，而不是让模型在文本里“假装调用了接口”。

所以工程上更合理的思路是：Prompt 负责表达规则，RAG 负责补知识，Tools 负责执行能力，Graph / Workflow 负责流程控制。

**重要度：**`中频`（出现次数：1次） | **难度：**`基础`

**考察点：**是否理解 Prompt 不是万能药。

**对应章节：**[1-2 提示词工程基础 §4、提示词工程的边界](1-2-提示词工程基础.md#_4、提示词工程的边界)；[13 提示词与消息模板 §1、Prompt 简介](13-提示词与消息模板.md#_1、prompt-简介)

### Q2-6. 如何做 Prompt 版本管理与回归？

如果 Prompt 已经进入生产环境，就不能再把它当成一段“临时改改的字符串”，而要把它当成配置资产或代码资产来管理。

通常会同时管理四样东西：

- Prompt 模板本身：System、User 模板、few-shot 示例、输出格式要求。
- 运行参数：模型名、模型版本、temperature、top_p、max_tokens。
- 评测集：固定 golden questions、典型 badcase、失败样例。
- 发布信息：模板版本号、发布时间、负责人、灰度范围、回滚版本。

更稳的做法通常是：

1. Prompt 和代码一起版本化，或者放进配置中心统一管理。
2. 每次改 Prompt 都跑固定回归集，不只看主观感觉。
3. 记录模板 hash、模型版本和关键参数，避免“明明没改 Prompt，效果却变了”时查不清原因。
4. 上线前做灰度和抽样人工复核，高风险链路保留快速回滚能力。

还有一个很容易被忽略的点：**换底层模型后，旧 Prompt 不一定还能保持原效果。** 所以很多时候回归的对象不是“这段 Prompt 对不对”，而是“Prompt 和当前模型组合起来还稳不稳”。

**常见追问：**

- golden set 应该怎么构建？
- 如果线上效果波动，你怎么判断是 Prompt 问题还是模型版本问题？
- Prompt、模型、索引三者一起变更时，如何设计回滚策略？

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**Prompt 工程化治理能力，而不是只会手改提示词。

**对应章节：**[13 提示词与消息模板 §8、从文件加载提示词](13-提示词与消息模板.md#_8、从文件加载提示词)；[1-2 提示词工程基础 §5、提示词工程的几个注意点](1-2-提示词工程基础.md#_5、提示词工程的几个注意点)

---

## 3、RAG 全链路

### Q3-1. 请描述一个完整的 RAG 流水线。

完整 RAG 一般分**索引阶段**和**检索阶段**。

索引阶段是：文档加载、清洗、切块、向量化、写入向量库，并补充元数据。检索阶段是：接收问题、必要时做 query 改写、检索召回、重排过滤、上下文组装、交给模型生成答案，最后再做引用、脱敏和格式化输出。

工程上真正难的通常不在“把模型接起来”，而在三件事：文档是否被正确解析，切块是否保留语义，检索结果是否真的对当前问题有帮助。线上效果差，大多数时候也是卡在这三层，而不是卡在最后那一轮生成。

**常见追问：**

- chunk 应该怎么切？
- metadata 应该存哪些字段？
- 为什么要加 rerank？

**重要度：**`必刷`（出现次数：3次） | **难度：**`中等`

**考察点：**是否真正理解 RAG，而不是只会说“检索增强生成”。

**对应章节：**[19 RAG检索增强生成 §1、RAG 简介](19-RAG检索增强生成.md#_1、rag-简介)；[19 RAG检索增强生成 §2、RAG 文本处理核心知识](19-RAG检索增强生成.md#_2、rag-文本处理核心知识)

### Q3-2. 文本切块应该怎么设计？有哪些常见坑？

切块的目标不是“切得均匀”，而是“尽量保留对检索有意义的语义单元”。

通常会结合固定长度、段落边界、标题层级和重叠窗口来设计。太大，会导致噪声多、命中不准；太小，会丢上下文，检索回来也无法回答。对于手册、FAQ、制度文档、图文混排 PDF，这些文档往往不能只按字符数切，还要结合版面结构、标题、表格和语义边界。

常见坑包括：切块过碎、忽略标题层级、重叠不足、纯 OCR 文本脏乱不清洗、表格内容被打散，以及把多个主题塞进一个 chunk 导致向量语义污染。

**重要度：**`高频`（出现次数：3次） | **难度：**`中等`

**考察点：**RAG 基础功是否扎实。

**对应章节：**[19 RAG检索增强生成 §2、RAG 文本处理核心知识](19-RAG检索增强生成.md#_2、rag-文本处理核心知识)；[2-RAG 搭建企业私有&个人知识库 §2、知识库的概述](2-RAG-搭建企业私有&个人知识库.md#_2、知识库的概述)

### Q3-3. RAG 效果不好时，你会怎么排查？

排查时可按“检索前、检索中、检索后”三层展开。

- 检索前：看 query 是否表达清楚，是否需要改写、拆问、补充上下文。
- 检索中：看切块、Embedding、向量库索引参数、top_k、过滤条件、重排是否合理。
- 检索后：看拼给模型的上下文是否过长、是否有噪声、是否出现关键信息被淹没、生成提示是否要求“无依据就拒答”。

如果是企业知识库，还要额外查文档质量、版本是否最新、权限过滤是否误伤。很多所谓“模型不聪明”的问题，最后都能定位到文档解析脏、chunk 太碎、召回噪声大或者上下文组装差。

**常见追问：**

- top_k 是不是越大越好？
- 如何识别是召回问题还是生成问题？
- 什么是 Lost in the Middle？

**重要度：**`必刷`（出现次数：1次） | **难度：**`中等`

**考察点：**排障能力、定位思路是否分层。

**对应章节：**[19 RAG检索增强生成 §2、RAG 文本处理核心知识](19-RAG检索增强生成.md#_2、rag-文本处理核心知识)；[19 RAG检索增强生成 §3、RAG 综合案例：智能运维助手](19-RAG检索增强生成.md#_3、rag-综合案例：智能运维助手)

### Q3-4. 混合检索、重排序和查询改写分别解决什么问题？

这三者解决的是三个不同层次的问题。

- 查询改写解决“用户问题表达得不够像检索语句”的问题。
- 混合检索解决“只靠稠密向量可能漏掉关键词命中”的问题。
- 重排序解决“召回了一批候选，但顺序还不够准”的问题。

真实项目里，尤其是制度、产品参数、订单字段、错误码这类知识，关键词常常非常重要，所以仅靠 dense retrieval 往往不够。比较稳的方案通常是“query 改写 + 稠密检索 + 稀疏检索 + rerank”，再结合 metadata 过滤做收口。

**常见追问：**

- 稠密检索和稀疏检索的区别是什么？
- Rerank 放在哪一层最合适？
- 混合检索会不会更贵？

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否理解检索优化的职责分工。

**对应章节：**[18 向量数据库与Embedding实战 §6、向量库的写入与检索](18-向量数据库与Embedding实战.md#_6、向量库的写入与检索%EF%BC%88rag-的底层能力%EF%BC%89)；[19 RAG检索增强生成 §2、RAG 文本处理核心知识](19-RAG检索增强生成.md#_2、rag-文本处理核心知识)

### Q3-5. RAG 应该如何接入 Agent 执行链路？

RAG 接到 Agent 里，不能只理解成“先查一遍资料再回答”，更稳的做法通常是把检索能力做成 Agent 可按需调用的一环。

常见有三种接法：

- 前置检索：用户问题一进来先统一检索，再把证据交给 Agent 继续规划。
- 按需检索：把 Retriever / Search 封成工具，Agent 在需要事实依据时主动调用。
- 后置校验：先生成结果，再用检索做证据核对或引用补全。

真实项目里，通常更推荐“按需检索为主，前置检索为辅”。因为不是每一步都需要查知识库，有些步骤是规划、路由、参数确认或工具执行。把 RAG 做成可调用能力，能减少无效检索，也更适合多步任务。后置校验可以作为增强，但通常不适合作为主链路，否则会增加延迟，而且一旦前面已经跑偏，后面再校验修正成本会更高。

**常见追问：**

- 你了解生成过程中多次检索、自适应检索或 Agentic RAG 吗？它和“先检索一次再生成”有什么区别？
- 什么情况下应该从“一次检索”升级成“多轮检索 + 中途补检”？

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否理解 Agentic RAG 的接入方式，而不是只会把 RAG 当成固定前置流水线。

**对应章节：**[19 RAG检索增强生成 §1、RAG 简介](19-RAG检索增强生成.md#_1、rag-简介)；[21 Agent智能体 §6、小结：Agent、Tool、Function Calling、RAG、MCP 的区别与联系](21-Agent智能体.md#_6、小结：agent、tool、function-calling、rag、mcp-的区别与联系)

### Q3-6. 为什么企业项目里的 RAG 必须重视权限、版本和引用？

因为企业知识不是“能查到就行”，而是“要查对、查对权限范围、还能追溯来源”。

权限上，向量检索必须做租户隔离、角色过滤、文档级或段落级权限控制，不能把安全寄希望于模型“自觉不回答”。版本上，索引和源文档要可追踪，文档更新后要知道哪些向量需要增量重建。引用上，如果答案不能回溯到原文片段，业务方很难建立信任，也不利于审计和复盘。

所以在企业里，RAG 不只是检索效果问题，更是数据治理问题。

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**企业落地意识，不只停留在 Demo。

**对应章节：**[2-RAG 搭建企业私有&个人知识库 §2、知识库的概述](2-RAG-搭建企业私有&个人知识库.md#_2、知识库的概述)；[19 RAG检索增强生成 §3、RAG 综合案例：智能运维助手](19-RAG检索增强生成.md#_3、rag-综合案例：智能运维助手)

### Q3-7. 什么是 Lost in the Middle？它对 RAG 设计有什么启示？

Lost in the Middle 指的是：上下文一长，模型往往更容易利用开头和结尾的信息，而把中间那部分关键证据“看见了但没用好”。

它对 RAG 的启示非常直接：不是把更多 chunk 塞进上下文就一定更好。如果中间噪声太多，真正关键的证据反而更容易被淹没。

因此，工程上通常采用以下处理方式：

- 先做 rerank 和过滤，再决定谁能进上下文。
- 尽量减少低价值片段，别把“可能相关”都塞进去。
- 重要证据优先放前面，必要时做摘要或结论前置。
- 对复杂问题采用分阶段检索，而不是一次性把大段材料全塞进去。

总结来说：**长上下文不等于高质量上下文，RAG 的核心仍然是“把最有用的证据放到最容易被模型用到的位置”。**

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**长上下文理解能力，以及检索、重排、上下文组装之间的联动意识。

**对应章节：**[19 RAG检索增强生成 §2、RAG 文本处理核心知识](19-RAG检索增强生成.md#_2、rag-文本处理核心知识)；[19 RAG检索增强生成 §3、RAG 综合案例：智能运维助手](19-RAG检索增强生成.md#_3、rag-综合案例：智能运维助手)

### Q3-8. 有了超长上下文模型，还需要 RAG 吗？

多数场景下仍然需要，因为“能塞进去”和“应该塞进去”完全不是一回事。

超长上下文模型确实让长文理解、少量文档内推理变得更方便，但企业场景里更常见的问题不是“模型窗口不够大”，而是：

- 知识总量太大，没法每次都全塞。
- 长上下文成本和延迟都更高。
- 权限过滤、租户隔离、版本控制不能只靠窗口硬塞解决。
- 审计和引用追溯更适合通过检索链路来做。

所以更合理的理解通常是：**长上下文扩大了可处理范围，但没有消灭检索的价值。** 它更适合少量长文档分析、上下文整合和复杂推理；RAG 更适合海量知识缩圈、权限过滤、证据引用和持续更新。

如果压缩成一句话，可以概括为：**长上下文不是 RAG 的替代品，更接近 RAG 的补充能力。**

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否理解“长窗口能力”和“检索系统价值”不是同一层问题。

**对应章节：**[19 RAG检索增强生成 §1、RAG 简介](19-RAG检索增强生成.md#_1、rag-简介)；[1-1 大模型认知与工程概览 §1、认识大模型](1-1-大模型认知与工程概览.md#_1、认识大模型)

### Q3-9. 复杂文档 RAG 或多模态 RAG 应该怎么做？

这类场景最大的坑，是把 PDF、扫描件、表格、图片、网页全都当成“普通纯文本”来处理。

更稳的做法通常是先把解析层单独看待：

- 先做版面分析、OCR、表格提取、标题层级恢复，而不是一开始就按字符切块。
- chunk 尽量按结构块切，比如标题、段落、表格、图注，而不是把一张表切成几段残缺文本。
- metadata 要保留页码、章节标题、文档版本、来源文件、坐标或结构位置信息，方便引用和追溯。
- 查询时必要时走多路召回，例如文本召回、表格召回、图片说明召回，再统一重排和组装。

如果是企业知识库，复杂文档 RAG 往往比“模型选型”更影响上限。因为解析错了、表格碎了、图文对应关系丢了，后面再强的模型也很难补回来。

**常见追问：**

- 为什么很多设备手册、制度 PDF 特别难做 RAG？
- OCR 准确率和最终问答效果是什么关系？
- 多模态 RAG 什么时候值得上，什么时候纯文本就够？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**是否意识到 RAG 不只是检索问题，还包括文档解析、结构恢复和引用追踪。

**对应章节：**[19 RAG检索增强生成 §2、RAG 文本处理核心知识](19-RAG检索增强生成.md#_2、rag-文本处理核心知识)；[2-RAG 搭建企业私有&个人知识库 §2、知识库的概述](2-RAG-搭建企业私有&个人知识库.md#_2、知识库的概述)

### Q3-10. 什么是 Agentic RAG？它和“一次检索后直接生成”有什么区别？

传统 RAG 更接近固定流水线：先检索一次，再把结果交给模型生成答案；Agentic RAG 则更接近一个闭环过程，模型或 Agent 会根据当前进展决定要不要检索、检索什么、是否改写 query、是否继续补检，甚至在发现证据不足时主动回头重查。

两者最大的区别，不在于“有没有检索”，而在于**检索是不是被当成一个动态决策过程来管理**。

- 传统 RAG：流程稳定、成本更可控、实现简单，适合单轮问答和大多数标准知识库场景。
- Agentic RAG：更适合复杂问题、多跳证据、需要自检补检的场景，但代价是链路更长、成本更高、失控风险也更高。

所以工程上通常不会一开始就上 Agentic RAG，而是先看 badcase 是否真的集中在这些问题上：

- 一次检索经常拿不到足够证据。
- 问题本身需要拆问、多轮求证或多源交叉验证。
- 生成前需要先判断“到底该查知识库、查网页，还是查业务系统”。

如果真的要落地 Agentic RAG，我一定会同时补上步数上限、预算限制、失败退出条件和可观测性，否则它很容易从“更聪明的检索”变成“更贵的随机游走”。

**常见追问：**

- 什么情况下应该坚持固定 RAG，而不是升级成 Agentic RAG？
- Agentic RAG 的收益通常体现在哪些 badcase 上？
- 如何防止多轮补检把延迟和成本拉得太高？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**是否真正理解 RAG 从固定流水线向智能检索闭环演进的边界和代价。

**对应章节：**[19 RAG检索增强生成 §1、RAG 简介](19-RAG检索增强生成.md#_1、rag-简介)；[21 Agent智能体 §1、Agent 简介](21-Agent智能体.md#_1、agent-简介)

---

## 4、检索基础设施与检索优化

### Q4-1. 什么是向量数据库？它和传统数据库有什么区别？为什么不能只用 MySQL？

先下一个定义：向量数据库是一种专门面向“相似度检索”的存储系统，用来保存向量、原始内容和元数据，并支持近邻搜索、过滤和召回。

传统数据库擅长精确过滤、事务和结构化查询，而向量数据库擅长按“语义相似度”做近邻检索。两者不是替代关系，而是分工关系。

如果只用 MySQL，你当然也能存 Embedding，但一旦数据量上来，近似向量检索、ANN 索引、混合检索和大规模召回都会变得低效，而且工程复杂度会明显上升。企业里更常见的做法是：结构化条件走传统数据库，语义召回走向量库，再通过 metadata 把两边结合起来。

**重要度：**`高频`（出现次数：2次） | **难度：**`基础`

**考察点：**底层检索设施理解。

**对应章节：**[18 向量数据库与Embedding实战 §2、向量数据库](18-向量数据库与Embedding实战.md#_2、向量数据库)；[18 向量数据库与Embedding实战 §6、向量库的写入与检索](18-向量数据库与Embedding实战.md#_6、向量库的写入与检索%EF%BC%88rag-的底层能力%EF%BC%89)

### Q4-2. Embedding 是什么？它在应用开发里最核心的价值是什么？

Embedding 的本质，是把文本、图片这类原始内容变成一串固定长度的向量，让“语义关系”尽量映射成“空间关系”。换一种工程化表述，就是把“意思接近”变成“距离接近”，这样程序才能做相似度计算。

它在应用开发里最核心的价值，不只是“把文本编码成数字”，而是让系统第一次具备了按语义检索的能力。所以它常被拿来做语义搜索、相似匹配、去重、聚类、推荐和 RAG 召回。

放到 RAG 里，Embedding 决定的是“问题和知识能不能在向量空间里正确相遇”。如果 Embedding 选错了，后面的向量库、重排、Prompt 再怎么补，也只能在一个偏掉的召回基础上做优化。

另外有两个工程细节需要特别强调：

- 建库和查询最好用同一套 Embedding 模型，不然要么维度对不上，要么即使维度一样，相似度也可能没有意义。
- Embedding 只是把文本变成“稠密向量”这一层，真正检索时往往还会和标量字段过滤、甚至稀疏检索一起配合，不能把它理解成检索系统的全部。

**重要度：**`高频`（出现次数：1次） | **难度：**`基础`

**考察点：**是否理解 Embedding 不是“附属模型”，而是检索基础设施。

**对应章节：**[18 向量数据库与Embedding实战 §1、向量与向量化](18-向量数据库与Embedding实战.md#_1、向量与向量化)；[18 向量数据库与Embedding实战 §4、Embedding 文本向量化](18-向量数据库与Embedding实战.md#_4、embedding-文本向量化)

### Q4-3. 如何选择一个合适的 Embedding 模型？评估它好坏看什么？

通常不会先看榜单，而是先看自己的知识类型和检索目标，再反推模型选型。更合理的思路是先看三件事：

- 语言和领域适配：中文、英文、多语言、代码、法律、金融，适合的模型可能完全不同。
- 建库和查询一致性：建库和查询尽量使用同一套 Embedding 模型，这是底线。
- 成本和延迟是否可接受：不是维度越高越好，也不是模型越大越好，要看知识库规模和查询量能不能撑住。

真正评估时，更应关注“它有没有把整条检索链路整体抬起来”，而不是只看一个榜单分数。比较实用的判断通常有三层：

- 检索层：相关片段有没有更容易被召回，坏例子有没有减少，重排前后的差距大不大。
- 业务层：最终答案的忠实度、引用准确性、任务完成率有没有变好。
- 工程层：延迟、成本、接入复杂度能不能接受。

工程上需要特别强调两点：

- Embedding 选型不是孤立问题，它会和切块策略、索引参数、混合检索、rerank 一起决定上限。
- 公开榜单只能做初筛，真正能决定要不要上线的，还是你自己的知识样本和 badcase。

所以更稳的做法通常是：先选两到三套候选模型跑通，再在自己的知识库样本上做小规模对比，观察召回质量、最终回答质量和成本延迟，最后再决定。

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**Embedding 选型、评测意识，以及“模型一致性 + 检索链路联动”的理解。

**对应章节：**[18 向量数据库与Embedding实战 §4、Embedding 文本向量化](18-向量数据库与Embedding实战.md#_4、embedding-文本向量化)；[18 向量数据库与Embedding实战 §6、向量库的写入与检索](18-向量数据库与Embedding实战.md#_6、向量库的写入与检索%EF%BC%88rag-的底层能力%EF%BC%89)

### Q4-4. 近似检索和精确检索怎么权衡？

精确检索效果更可控，但在大规模数据下成本高、延迟高。近似检索牺牲一部分精确性，换来更好的吞吐和响应速度，所以大部分线上系统都会优先用近似检索。

工程上不是简单二选一，而是看业务要求。如果是高风险检索、数据量不大、对结果一致性要求极高，可以用精确或更保守的索引策略。如果是通用知识问答、商品搜索、海量文档召回，近似检索通常更现实，再配合 rerank 做补偿。

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**性能和效果取舍能力。

**对应章节：**[18 向量数据库与Embedding实战 §2、向量数据库](18-向量数据库与Embedding实战.md#_2、向量数据库)；[18 向量数据库与Embedding实战 §5、通过向量计算语义相似度](18-向量数据库与Embedding实战.md#_5、通过向量计算语义相似度)

### Q4-5. 在什么场景下，知识图谱或图数据库比纯向量检索更有价值？

当问题的核心不只是“语义相似”，而是“实体关系、路径推理、多跳关联、结构化约束”时，知识图谱或图数据库会更有价值。

比如设备故障排查、商品属性关联、组织关系、法规条文引用、依赖链分析，这些场景往往更依赖“谁和谁有什么关系”，而不只是“哪段文本看起来最像”。这时候如果只靠向量检索，容易召回到语义接近但关系错误的内容。

工程上更适合把它理解成增强，而不是简单替代。比较稳的做法通常是：向量检索负责语义召回，知识图谱负责结构化约束、实体消歧和关系推理。只有在问题本身高度结构化、关系链特别关键时，图数据库才可能成为主通路。

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**对“语义召回”和“关系推理”边界的理解，以及检索架构选型能力。

### Q4-6. GraphRAG 适合什么场景？和传统向量 RAG 怎么选？

GraphRAG 更适合实体关系密、需要多跳推理、社区摘要或结构化约束很强的场景。

比如组织关系分析、供应链依赖、设备故障链路、法规条款关联、人物事件网络，这些问题往往不是“哪段文字最像”，而是“谁和谁怎么关联、要经过几跳才能到答案”。这时候图谱或图数据库的优势会更明显。

但工程上通常不会默认一开始就做 GraphRAG。更常见的稳妥路径是：

- 先用传统向量 RAG 打底，解决大多数语义召回问题。
- 当 badcase 明显集中在多跳关系、实体消歧、结构约束时，再引入图谱增强。
- 真正落地时，也常常不是二选一，而是“向量召回 + 图谱召回 + 融合重排”一起做。

更准确的结论是：**只有当问题核心在关系结构上时，图谱路线的收益才会大于复杂度。**

**常见追问：**

- GraphRAG 和知识图谱数据库是什么关系？
- 什么情况下多路召回比纯图谱主路更现实？
- 图谱更新和维护成本会不会太高？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**GraphRAG 选型能力，以及对复杂度和收益的权衡意识。

---

## 5、Tools、Function Calling 与 Agent

### Q5-1. ReAct 模式是什么？它解决了什么问题？

ReAct 的价值在于把“推理”和“行动”串起来，让模型不只是想，还能基于外部观察不断调整下一步。

它通常表现为 `Thought -> Action -> Observation` 的循环。模型先做当前判断，再决定调用什么工具，然后根据工具返回的结果更新判断，直到任务完成。相比只靠一次性生成，ReAct 更适合不确定路径、多步决策和外部信息依赖强的任务。

这里还需要补充一个重要点：现代 Tool Calling Agent 不一定会把 `Thought` 明文展示出来。实际代码中更常见的是 `AIMessage.tool_calls`、工具执行结果和下一轮消息。因此，更准确的理解方式是：**ReAct 更接近一种工作机制，而不只是某个固定 Prompt 模板。**

工程上要注意，ReAct 的优势是灵活，但代价是链路更长、成本更高、调试更复杂，所以并不是所有场景都值得上完整循环。

**常见追问：**

- Chain of Thought（CoT）是什么？它为什么能提升复杂推理题的效果？
- CoT 和 ReAct 的区别是什么？什么时候只用 CoT 就够了，什么时候要升级到 ReAct？

**重要度：**`高频`（出现次数：3次） | **难度：**`基础`

**考察点：**Agent 运行范式理解。

**对应章节：**[21 Agent智能体 §3、Agent 工作原理（V0.3）](21-Agent智能体.md#_3、agent-工作原理%EF%BC%88v0.3%EF%BC%89)；[17 Tools工具调用 §2、工具调用的工作方式](17-Tools工具调用.md#_2、工具调用的工作方式)

### Q5-2. Tool、Function Calling、Agent 三者是什么关系？

Tool 是能力单元，Function Calling 是调用机制，Agent 是把模型、工具、状态和决策流程组织起来的运行模式。

Tool 解决“能做什么”，Function Calling 解决“怎么发起结构化调用”，Agent 解决“如何围绕目标多轮地决定要不要调用、调用谁、调用几次”。所以 Tool 不等于 Agent，单次 Tool Calling 也不一定等于 Agent。

在真实项目里，很多需求只需要 Tool Calling，不一定要上完整 Agent。只有当任务需要多步规划、反复决策和状态推进时，Agent 才值得引入。

**常见追问：**

- 单工具助手算不算 Agent？
- ReAct 和 Function Calling 什么关系？
- Tool 设计的最小粒度应该是什么？

**重要度：**`必刷`（出现次数：2次） | **难度：**`基础`

**考察点：**概念拆分是否清楚。

**对应章节：**[17 Tools工具调用 §1、Tools 简介](17-Tools工具调用.md#_1、tools-简介)；[21 Agent智能体 §6、小结：Agent、Tool、Function Calling、RAG、MCP 的区别与联系](21-Agent智能体.md#_6、小结：agent、tool、function-calling、rag、mcp-的区别与联系)

### Q5-3. 一个 Agent 应该如何设计？它通常由哪些核心组件构成？

如果按最小理解版概括，可以写成：**Agent = 模型 + 工具集 + 运行循环 + 当前状态**。

- 模型：负责理解目标、分析当前局面、决定下一步。
- 工具集：负责提供外部能力，比如搜索、数据库、文件系统、业务 API。
- 运行循环：负责让系统不是只回答一次，而是能“想一步、做一步、看结果、再决定下一步”。
- 当前状态：负责保存消息、工具返回、中间结果和线程上下文。

在这个最小骨架之上，记忆、规划、反思、多智能体协作都可以继续往上叠，但它们更适合作为“扩展能力”来理解，而不是每个 Agent 一上来都必须全部具备。

如果从工程设计看，一个可落地的 Agent，重点应控制五件事：

- 目标和职责：一个 Agent 解决什么问题，要尽量单一，不要什么都做。
- 工具边界：只暴露完成任务真正需要的能力，避免给模型一把通吃的权限。
- 状态设计：当前任务进展、中间结论、消息历史放在哪里，要显式设计。
- 停止条件：什么时候继续、什么时候澄清、什么时候转人工、什么时候结束，不能模糊。
- 治理能力：日志、Trace、重试、超时、审计、人工接管都要补齐。

概括来说：Agent 设计的重点不是“堆更多能力”，而是围绕 **模型、工具、循环、状态** 四条主线，把系统做得更可控、更可追踪、更能稳定交付结果。

**常见追问：**

- 在构建一个复杂 Agent 时，你认为最主要的挑战是什么？
- 为什么很多 Agent 不是能力不够，而是状态、边界和治理没设计好？

**重要度：**`必刷`（出现次数：2次） | **难度：**`中等`

**考察点：**Agent 架构能力，而不是停留在概念层。

**对应章节：**[21 Agent智能体 §1、Agent 简介](21-Agent智能体.md#_1、agent-简介)；[21 Agent智能体 §6、小结：Agent、Tool、Function Calling、RAG、MCP 的区别与联系](21-Agent智能体.md#_6、小结：agent、tool、function-calling、rag、mcp-的区别与联系)

### Q5-4. Function Calling 的基本原理是什么？

Function Calling 的核心分工，可以概括成一句话：模型负责决策，程序负责执行。

更完整地说，这条链路通常是：

1. 宿主程序把工具的 `name`、`description`、参数 schema 一起发给模型。
2. 模型判断要不要调用工具，如果要，会先返回结构化的 `tool_calls`，而不是直接给最终自然语言。
3. 宿主程序读取 `AIMessage.tool_calls`，真正去执行 Python 函数、HTTP API、数据库查询或业务服务。
4. 程序把执行结果封成 `ToolMessage` 或等价消息，再交回模型。
5. 模型基于工具结果生成最终答复。

所以 Function Calling 不是模型自己去调 API，它只是生成“调用哪个工具、传什么参数”的结构化意图。真正的鉴权、参数校验、超时、幂等、重试和安全控制，仍然都在宿主程序这一层。

如果要答得更工程化，还需要补一句：Function Calling 解决的是“模型如何表达调用意图”，不解决“工具是否安全、是否允许调用、调用失败怎么兜底”这些问题。

**常见追问：**

- Function Calling 和文本解析调用有什么区别？
- 为什么生产环境更推荐原生 Tool Calling？
- 工具执行失败怎么处理？

**重要度：**`必刷`（出现次数：1次） | **难度：**`中等`

**考察点：**是否理解模型和宿主程序的职责边界。

**对应章节：**[17 Tools工具调用 §1、Tools 简介](17-Tools工具调用.md#_1、tools-简介)；[17 Tools工具调用 §2、工具调用的工作方式](17-Tools工具调用.md#_2、工具调用的工作方式)

**来源：**腾讯AI后台工程师一面（实际大厂面试题）

### Q5-5. 设计 Tool 时最值得重视的工程原则是什么？

最值得重视的四点是：单一职责、明确 schema、可观测、可失败。

单一职责意味着一个 Tool 只做一件清晰的事，避免“大而全万能工具”。明确 schema 是为了让模型更稳定地理解参数含义。可观测意味着每次调用都要能追踪请求、参数、耗时、结果和错误。可失败意味着工具必须有超时、异常码、重试策略和降级逻辑，而不是假设一定成功。

如果 Tool 要连业务系统，还要加权限校验、幂等控制和审计日志。因为工具一旦从“查天气”变成“发消息、下工单、写数据库”，风险等级就完全不同了。

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否有把工具接到生产系统的经验意识。

**对应章节：**[17 Tools工具调用 §3、自定义 Tool](17-Tools工具调用.md#_3、自定义-tool：从最简单的工具开始)；[17 Tools工具调用 §4、参数 schema：为什么要配合 Pydantic](17-Tools工具调用.md#_4、参数-schema：为什么要配合-pydantic)

### Q5-6. 如果让你实现一个“查天气、查新闻”的 AI 助手，你会怎么设计？

这类题在面试里更推荐先做场景判断，再谈方案。像查天气、查新闻这种需求，核心不是复杂规划，而是“意图识别 + 工具调用 + 结果整合”。

一个比较稳的实现通常包括四层：

- 输入与路由层：先判断用户是查天气、查新闻，还是两者都要。必要时抽取城市、时间、新闻主题等参数。
- 工具层：把天气查询和新闻检索分别封成清晰的 Tool，定义好 schema、参数说明、异常返回和超时策略。
- 调度层：先用 Function Calling 或轻量 Agent，让模型决定调用哪个工具、怎么传参、要不要串联多个工具。
- 输出层：把工具结果做统一整理，比如天气给关键字段，新闻给摘要和来源，最后再由模型生成自然语言回复。

如果需求只是单轮查天气、查新闻， `Prompt + Function Calling` 往往就够了，不一定要上完整 ReAct Agent。只有在需求升级成“先查天气，再根据天气推荐本地新闻，再继续追问某条新闻细节”这种多步动态链路时，Agent 的价值才会更明显。

工程上需要特别关注三点：工具描述要清楚，避免模型乱调；外部 API 要有降级和超时；结果输出最好带来源或关键字段，避免模型把工具结果又二次编造一遍。

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**能否把一个简单助手拆成“意图、工具、调度、输出”四层，而不是一股脑说上 Agent。

**对应章节：**[17 Tools工具调用 §5、天气助手实战](17-Tools工具调用.md#_5、天气助手实战：把-tool-跑成业务闭环)；[21 Agent智能体 §5、实操与案例](21-Agent智能体.md#_5、实操与案例)

**来源：**腾讯AI后台工程师一面（实际大厂面试题）

### Q5-7. 什么是“工具幻觉”？工程上怎么缓解？

工具幻觉指的是：模型调用了不存在的工具、传了不合理的参数，或者在只该读数据时却试图触发写操作。

这类问题在工具数量多、描述模糊、schema 不清晰时特别常见。模型有时不是“不会用工具”，而是“对工具边界理解错了”。

工程上通常会这样兜底：

- 工具注册表白名单：不存在的工具名直接拒绝。
- schema 强校验：参数类型、必填项、枚举值都要在运行时校验，不信任模型返回。
- 工具集收敛：按场景暴露最小工具集，别让模型在几十个相近工具里乱猜。
- 描述清晰：工具名、description、参数含义要能明显区分读写边界和适用场景。
- 高风险确认：涉及发消息、写数据库、发工单、下单等副作用动作，必须审批或二次确认。
- 失败反馈：把错误原因回传给模型，让它有机会修正，但要限制重试次数，避免死循环。

可以概括为：**Tool Calling 不是“接上就行”，而是要让模型“调得准、调得住、调错了也出不了大事”。**

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**对 Tool Use 稳定性和风险控制的理解。

**对应章节：**[17 Tools工具调用 §6、从课程案例走向真实项目](17-Tools工具调用.md#_6、从课程案例走向真实项目)；[17 Tools工具调用 §4、参数 schema：为什么要配合 Pydantic](17-Tools工具调用.md#_4、参数-schema：为什么要配合-pydantic)

### Q5-8. Function Calling 和“让模型输出 JSON 再自己解析”有什么区别？

两者表面上都像“模型输出结构化结果”，但稳定性和工程边界差别很大。

- 让模型输出 JSON，更接近在 Prompt 层提出要求。它简单、通用、起步快，但模型一旦多说一句自然语言、少一个字段、类型写错，程序端就要自己兜底。
- Function Calling 更接近协议级结构化输出。模型不是随便返回一段文本，而是明确返回工具名和参数，宿主按约定解析和执行，可靠性通常更高。

因此，在生产环境中通常这样判断：

- 如果只是抽取字段、做轻量结构化返回，而且平台原生能力有限，先用 JSON + parser。
- 如果要进入真实工具调用、外部系统编排、副作用执行，优先用原生 Function Calling 或等价 Tool Use 协议。

更关键的区别还在于职责边界。JSON 解析更接近“你让模型尽量长成这个格式”；Function Calling 更接近“模型和宿主之间有一层明确契约”。这层契约越清楚，后面的校验、审计、重试和观测就越好做。

**常见追问：**

- 什么时候 JSON + parser 已经够用？
- 为什么 Function Calling 更适合接生产系统？
- 如果平台没有原生 Function Calling，怎么尽量把 JSON 方案做稳？

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**结构化输出和工具调用之间的协议级差异理解。

**对应章节：**[14 输出解析器 §4、结构化输出](14-输出解析器.md#_4、结构化输出)；[17 Tools工具调用 §2、工具调用的工作方式](17-Tools工具调用.md#_2、工具调用的工作方式)

### Q5-9. 当工具很多时，如何控制上下文长度和调用稳定性？

工具一多，问题通常不再是“会不会调工具”，而是“会不会在一堆相似工具里选错、调错、调得越来越乱”。

比较稳的做法通常有四类：

- 分层暴露：先按业务域拆成搜索类、数据类、执行类、写操作类，不要一次把所有工具都暴露给同一个 Agent。
- 动态选择：先做 Tool Retrieval 或路由，只把 Top-N 个最相关工具描述放进当前上下文，而不是全量列出来。
- 工具聚合：把过细的底层 API 封装成更高层的业务动作，减少模型在几十个相近函数里猜名字。
- 描述治理：工具名、description、参数说明里要明确“什么时候用、什么时候不用、有没有副作用”。

如果再往前走一步，生产里还可以把“工具选择”本身做成一个独立阶段，比如先做意图分类或子域路由，再进入具体工具调用。这样既能控上下文长度，也能降低工具幻觉和误调用概率。

可以概括为：**工具多不是问题，关键是别让模型在一个没有层次的工具海里盲选。**

**常见追问：**

- 工具太多时，应该优先做路由还是优先改工具粒度？
- Tool Retrieval 和普通知识检索有什么区别？
- 为什么业务动作级工具通常比原子 API 更适合模型调用？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**多工具场景下的上下文治理和工具编排能力。

**对应章节：**[17 Tools工具调用 §6、从课程案例走向真实项目](17-Tools工具调用.md#_6、从课程案例走向真实项目)；[21 Agent智能体 §5、实操与案例](21-Agent智能体.md#_5、实操与案例)

---

## 6、Agent 框架与编排：LangChain、LCEL、LangGraph

### Q6-1. LangGraph 相比普通 Workflow 或链式调用，最大的价值是什么？

LangGraph 最大的价值是把复杂流程中的状态、节点、边和循环显式表达出来，让大模型驱动的动态流程真正可设计、可追踪、可恢复。

普通链式调用适合简单串行流程，Workflow 适合固定路径，而 LangGraph 更适合有分支、循环、人工中断、状态持久化和多 Agent 协作的任务。它不是“换一种写法”，而是把复杂控制流从隐式逻辑变成显式图结构。

所以当你发现系统开始出现“要不要继续查、什么时候结束、失败后从哪恢复、状态怎么跨轮保留”这些问题时，LangGraph 的优势就出来了。

**常见追问：**

- LangGraph 和 Agent 的关系是什么？
- 什么场景下普通 Workflow 就够了？
- 图编排的维护成本会不会更高？

**重要度：**`必刷`（出现次数：1次） | **难度：**`中等`

**考察点：**是否理解图编排的必要性。

**对应章节：**[22 LangGraph概述与快速入门 §1、LangGraph 简介](22-LangGraph概述与快速入门.md#_1、langgraph-简介)；[23 LangGraphAPI：图与状态 §1、Graph API 之 Graph](23-LangGraphAPI：图与状态.md#_1、graph-api-之-graph%EF%BC%88图%EF%BC%89)

### Q6-2. 在 LangGraph 里，State、Node、Edge 分别代表什么？

State 是共享状态，Node 是处理逻辑，Edge 是流转规则。

State 决定图里“大家共同操作的上下文”是什么；Node 决定每一步具体做什么，比如调用模型、查库、执行工具；Edge 决定执行完当前节点后下一步去哪里，可以是固定跳转，也可以是条件路由。

真实项目里，LangGraph 设计得好不好，往往取决于 State 是否清晰、Node 粒度是否合理、Edge 条件是否可解释。很多图写得难维护，不是因为图本身复杂，而是把太多隐式逻辑塞进了一个节点。

**重要度：**`高频`（出现次数：1次） | **难度：**`基础`

**考察点：**LangGraph 基础心智模型。

**对应章节：**[23 LangGraphAPI：图与状态 §2、Graph API 之 State](23-LangGraphAPI：图与状态.md#_2、graph-api-之-state%EF%BC%88状态%EF%BC%89)；[24 LangGraphAPI：节点、边与进阶 §2、Graph API 之 Edge](24-LangGraphAPI：节点、边与进阶.md#_2、graph-api-之-edge%EF%BC%88边%EF%BC%89)

### Q6-3. LangChain 在今天的价值是什么？为什么不是直接手写 SDK 就够了？

LangChain 的价值不在于“能不能调模型”，而在于它把模型输入输出、Prompt、Parser、Retriever、Tools、Memory、Callbacks 等常见能力统一成了一套可组合接口。

如果只是做一个最小 Demo，直接手写 SDK 当然可以。但一旦进入多模型接入、链式编排、结构化输出、可观测和长期维护阶段，统一抽象会明显降低代码分散度。它真正解决的是“应用层编排和生态整合”问题，而不是“替你发一个 HTTP 请求”。

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**框架选型判断，而不是盲目崇拜框架。

**对应章节：**[9 LangChain概述与架构 §2、LangChain 定位](9-LangChain概述与架构.md#_2、langchain-定位)；[9 LangChain概述与架构 §4、LangChain 核心模块](9-LangChain概述与架构.md#_4、langchain-核心模块)

### Q6-4. 如何使用 LangChain 开发一个 Agent？

一个最小可用的 LangChain Agent，通常按两条路线去讲。

- classic 路线：模型、工具、Prompt、`create_tool_calling_agent(...)`、`AgentExecutor(...)` 一层层组起来，更适合理解内部结构。
- 1.x 路线：直接用 `create_agent(...)`，背后由基于 LangGraph 的运行时去驱动循环、状态和工具调用，更接近当前官方主线。

不管走哪条路线，底层都还是同一条主线：

- 先定义 Tools，把外部能力封成清晰的能力单元。
- 再选择 LLM，并让模型知道可调用的工具 schema。
- 然后设计 Prompt，明确角色、工具使用规则、停止条件和输出边界。
- 最后让系统形成“模型决策 -> 工具执行 -> 结果回传 -> 继续或结束”的闭环。

如果是简单场景，可以直接走高层封装；如果是复杂场景，仍然要能讲清楚底层运行主线。面试里真正加分的不是背 API 名，而是能说清 Agent 为什么会调用工具、什么时候停、失败了怎么兜底。

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否理解 Agent 不是“调一个 create_agent 就结束”，而是清楚底层组成。

**对应章节：**[21 Agent智能体 §5、实操与案例](21-Agent智能体.md#_5、实操与案例)；[17 Tools工具调用 §5、天气助手实战](17-Tools工具调用.md#_5、天气助手实战：把-tool-跑成业务闭环)

### Q6-5. LCEL 的价值是什么？为什么说它不只是语法糖？

LCEL 的核心价值是把 Prompt、Model、Parser、Retriever、函数逻辑都抽象成 Runnable，然后通过统一方式组合和调用。

它不只是写法更短，而是让顺序链、分支链、并行链、函数链能够用同一种接口去拼装、调试和替换。这对真实项目很有价值，因为你后面做日志、流式、批处理、回调和局部替换时，统一接口会让系统更可维护。

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否理解链式编排的统一接口思想。

**对应章节：**[15 LCEL与链式调用 §1、Runnable 与统一调用方式](15-LCEL与链式调用.md#_1、runnable-与统一调用方式)；[15 LCEL与链式调用 §2、LCEL 简介](15-LCEL与链式调用.md#_2、lcel-简介)

### Q6-6. LangGraph 的进阶特性里，你觉得最有工程价值的是哪些？

优先关注四类能力：流式处理、持久化、时间回溯、子图。这四类也刚好是 LangGraph 高级特性的主线。

先看流式。LangGraph 的流式不只是“模型 token 一点点吐出来”，更重要的是它能把整张图执行过程流出来。实际项目里常用的 `stream_mode` 有这些：

- `values`：看每一步结束后的完整状态快照。
- `updates`：看当前这一步到底改了哪些字段。
- `messages`：看模型消息片段或 token 流。
- `custom`：在节点里主动推送业务进度，比如“正在检索知识库”。

再看持久化。LangGraph 里的 `checkpointer` 更接近线程内、会话内的短期记忆，适合按 `thread_id` 保存图状态，用于断点恢复、人机协同和多轮任务承接；如果要跨线程、跨会话保存更长期的信息，则更接近 Store 这条线。

时间回溯的工程价值主要在排障、复盘和重放。很多复杂 Agent 不是最后结果错了，而是中间某一步状态被污染了，Time Travel 能帮你从具体节点回看甚至重跑。

子图的价值则是把复杂系统拆成可复用模块。比如“检索子图”“审批子图”“报告生成子图”可以独立封装，主图只负责更高层编排。

这四类能力可以概括为一句话：流式解决可观察，持久化解决可恢复，时间回溯解决可复盘，子图解决可维护。四个一起上，LangGraph 才真正像生产基础设施，而不只是一个能跑通的 Demo 图。

**常见追问：**

- Checkpointer 和长期记忆有什么区别？
- Time-Travel 适合什么场景？
- 什么时候应该拆子图？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**是否关注真实生产能力，而不是只会 HelloWorld。

**对应章节：**[25 LangGraph高级特性 §1、流式处理（Streaming）](25-LangGraph高级特性.md#_1、流式处理%EF%BC%88streaming%EF%BC%89)；[25 LangGraph高级特性 §2、状态持久化（Persistence）](25-LangGraph高级特性.md#_2、状态持久化%EF%BC%88persistence%EF%BC%89)；[25 LangGraph高级特性 §3、时间回溯（Time-Travel）](25-LangGraph高级特性.md#_3、时间回溯%EF%BC%88time-travel%EF%BC%89)；[25 LangGraph高级特性 §4、子图（Subgraphs）](25-LangGraph高级特性.md#_4、子图%EF%BC%88subgraphs%EF%BC%89)

### Q6-7. Checkpoint、HITL、Time-Travel 在面试里怎么讲得更工程化？

这三个概念适合放在一起理解，因为它们共同解决的是：**复杂 Agent 不是“能跑起来”就够了，还要能停、能看、能批、能继续。**

- Checkpoint：解决“做到一半能不能恢复”，适合长任务、断点续跑、失败重放。
- HITL：解决“高风险动作要不要人工拍板”，适合支付、删改数据、对外发送这类动作前的人工确认。
- Time-Travel：解决“出问题后怎么回看和复盘”，适合排障、调试和重跑特定阶段。

如果用一句很工程化的话来概括，就是：

> Checkpoint 负责可恢复，HITL 负责可控制，Time-Travel 负责可复盘。

这三个能力放在一起，面试官通常会感觉你理解的不是“图会不会画”，而是“系统上线以后怎么治理”。

**常见追问：**

- 哪些节点你一定会加人工审批？
- Checkpointer 和长期记忆 / Store 的边界怎么讲？
- 什么时候时间回溯只是调试利器，什么时候它已经是生产必需？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**LangGraph 生产能力理解，以及对恢复、审批、复盘三类能力的归纳能力。

**对应章节：**[25 LangGraph高级特性 §2、状态持久化（Persistence）](25-LangGraph高级特性.md#_2、状态持久化%EF%BC%88persistence%EF%BC%89)；[25 LangGraph高级特性 §3、时间回溯（Time-Travel）](25-LangGraph高级特性.md#_3、时间回溯%EF%BC%88time-travel%EF%BC%89)

---

## 7、记忆、MCP 与多智能体

### Q7-1. 上下文窗口、短期记忆、长期记忆分别是什么关系？

上下文窗口是模型单次推理能看到的内容上限，短期记忆是会话级状态，长期记忆是跨会话保留的用户或任务信息。

工程上不能把这三者混为一谈。窗口是昂贵资源，不能无限塞历史。短期记忆一般保留当前任务相关历史、摘要、线程状态。长期记忆则更适合存偏好、画像、历史结论和可复用事实，需要按需检索，不应该每次全量放进 prompt。

所以一个成熟的系统通常是：窗口里只放高信号上下文，短期记忆保证当前线程不断档，长期记忆通过数据库或向量库按需召回。

**常见追问：**

- 记忆和 RAG 的区别是什么？
- 为什么说记忆不是训练模型？
- Redis 在记忆里适合做什么？
- 如果上下文太长被截断了，你会选滑动窗口、摘要压缩还是检索式补充？怎么判断？

**重要度：**`必刷`（出现次数：3次） | **难度：**`中等`

**考察点：**对话系统和 Agent 的状态设计能力。

**对应章节：**[16 记忆与对话历史 §1、记忆简介](16-记忆与对话历史（含Redis基础）.md#_1、记忆简介)；[25 LangGraph高级特性 §2、状态持久化（Persistence）](25-LangGraph高级特性.md#_2、状态持久化%EF%BC%88persistence%EF%BC%89)

### Q7-2. 如何为 Agent 设计短期记忆和长期记忆系统？技术上通常怎么落地？

先把“记忆”拆成两层，不然很容易把所有信息都塞进上下文，最后变成又贵又乱。

- 短期记忆：解决当前会话或当前线程不断档的问题，核心是“读历史 -> 拼进提示 -> 调模型 -> 写回历史”。
- 长期记忆：解决跨会话保留用户偏好、画像、历史结论和可复用事实的问题，核心是“存结构化信息，按需召回”，而不是每轮全量塞进 prompt。

技术上，短期记忆常见做法是把消息历史或线程状态持久化到内存、Redis 或 checkpointer 里，再通过 `MessagesPlaceholder` 或图状态在下一轮重新注入；长期记忆更适合放在数据库、向量库，或者在关系很重要的场景里放进知识图谱。一个比较稳的工程思路是：短期记忆服务当前任务连续性，长期记忆服务跨任务复用，二者分开设计。

在 LangChain / LangGraph 体系下，`RunnableWithMessageHistory + BaseChatMessageHistory` 更适合理解为“对话历史注入”，而 LangGraph persistence / checkpointer 更适合理解为线程级状态持久化。前者更适合先把“历史消息怎么读写”讲明白，后者更适合 Agent、图编排和线程级状态管理。

因此，真正落地时通常这样划分：

- 聊天助手或轻量多轮问答：优先消息历史方案。
- 复杂 Agent 或 LangGraph：优先 `thread_id + checkpointer` 方案。
- 跨会话偏好、事实、用户画像：走长期存储，按需检索，不直接硬塞上下文。

如果继续追问“超长多轮对话如何兼顾不断档和节省 token”，通常还会补充四种常见手段：

- 滑动窗口：只保留最近 N 轮原文，简单直接，但容易丢早期约束。
- 周期性摘要：每隔几轮把历史压成结构化总结，保留目标、已确认事实、待办和偏好。
- 检索式补充：把旧对话写入向量库或长期存储，按当前问题召回相关片段，而不是把所有旧消息都塞回窗口。
- 结构化记忆槽：像城市、会员等级、偏好、关键状态这类固定信息直接落键值或数据库，不让模型每次“回忆”。

所以记忆系统不是“历史保存得越多越好”，而是要区分什么该原样保留，什么该摘要，什么该结构化，什么该按需检索。

**常见追问：**

- `RunnableWithMessageHistory` 和 LangGraph persistence / checkpointer 怎么理解各自的定位？
- Redis 更适合拿来做短期记忆持久化，还是长期记忆？

**重要度：**`高频`（出现次数：2次） | **难度：**`较难`

**考察点：**记忆分层设计能力，以及对短期状态、长期知识、外部存储边界的理解。

**对应章节：**[16 记忆与对话历史 §4、RunnableWithMessageHistory 与 BaseChatMessageHistory](16-记忆与对话历史（含Redis基础）.md#_4、实现类介绍：runnablewithmessagehistory-与-basechatmessagehistory)；[25 LangGraph高级特性 §2、状态持久化（Persistence）](25-LangGraph高级特性.md#_2、状态持久化%EF%BC%88persistence%EF%BC%89)

### Q7-3. 什么是 MCP？它解决的核心问题是什么？它和 Tool、RAG、Agent 有什么区别？

如果先给一句定义，MCP 是 Model Context Protocol，也就是模型上下文协议。它是一套开放标准，用来规范 AI 应用如何以统一方式连接外部工具、资源和提示模板。

MCP 本质上是在做“模型能力接入的统一协议层”，解决的不是“模型能不能调工具”，而是“不同 AI 应用怎样用统一方式接外部工具、资源和上下文”。

更直观的理解是，MCP 最适合被看成 AI 世界的统一插口。它统一的不是模型本身，而是 Host、Client、Server 之间发现、暴露和调用能力的方式。MCP Server 不只会暴露 Tools，还可以暴露 Resources 和 Prompts。

- Tool / Function Calling：解决模型如何表达“我要调用哪个工具、传什么参数”。
- RAG：解决模型如何拿到外部知识。
- Agent：解决谁来规划、决策、调用这些能力。
- MCP：解决这些外部能力如何被标准化暴露和接入。

所以 MCP 不等于 Agent，也不等于 Tool。它更偏协议和生态层，价值在于一次暴露、多处复用、统一 schema、降低接入成本。

**常见追问：**

- MCP Server 通常暴露哪些能力？
- STDIO 和 HTTP 传输怎么选？
- 为什么企业会关心 MCP？

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**协议层理解能力。

**对应章节：**[20 MCP模型上下文协议 §2、MCP 简介](20-MCP模型上下文协议.md#_2、mcp-简介)；[20 MCP模型上下文协议 §3、MCP 能做什么](20-MCP模型上下文协议.md#_3、mcp-能做什么)

**来源：**腾讯AI后台工程师一面（实际大厂面试题）

### Q7-4. MCP 和 Function Calling 的关系是什么？

Function Calling 更接近模型侧的“结构化调用机制”，MCP 更接近应用侧的“统一能力接入协议”。

前者解决的是模型如何表达“要调用哪个函数、传什么参数”；后者解决的是不同外部工具、资源、提示模板如何用统一标准暴露给客户端。两者不是替代关系，而是上下层关系。

可以简单理解为：Function Calling 更靠近模型决策，MCP 更靠近生态接入和协议标准化。真正落地时，Agent 完全可以在 MCP 暴露的能力之上继续用 Function Calling 做调用决策。

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**协议层和调用机制的边界理解。

**对应章节：**[20 MCP模型上下文协议 §2、MCP 简介](20-MCP模型上下文协议.md#_2、mcp-简介)；[17 Tools工具调用 §2、工具调用的工作方式](17-Tools工具调用.md#_2、工具调用的工作方式)

### Q7-5. MCP 是如何做到跨平台兼容的？

MCP 的跨平台兼容，本质上来自“统一协议，而不是统一实现”。

也就是说，不同平台、不同语言、不同宿主程序，只要都遵循同一套消息结构、能力暴露方式和调用约定，就能在协议层互通。这样客户端不需要为每一个外部系统写一套私有接入方式，服务端也能按标准暴露能力。

所以 MCP 的价值不在于它绑定了某个技术栈，而在于它把接入差异收敛成了统一的协议面。

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**协议标准化的理解。

**对应章节：**[20 MCP模型上下文协议 §5、MCP 架构知识](20-MCP模型上下文协议.md#_5、mcp-架构知识)

### Q7-6. MCP 技术协议的主体内容是什么？

如果从协议层展开，MCP 的主体内容按四层来讲最清楚：

- 参与角色：Host、Client、Server。
- 能力类型：Tools、Resources、Prompts。
- 通信机制：能力发现、请求、响应、错误、通知。
- 传输方式：stdio、Streamable HTTP 等承载协议的通道。

这里还需要补充一句细节：

- Tools 更偏 model-controlled，适合让模型自动决定要不要调用。
- Resources 更偏 application-driven，通常由宿主决定如何纳入上下文。
- Prompts 更偏 user-controlled，适合复用提示模板或工作流模板。

这样答出来，面试官通常能看出你理解的是协议本身，而不是只把 MCP 当成某个“现成插件市场”。

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否理解 MCP 协议层的基本构成。

**对应章节：**[20 MCP模型上下文协议 §5、MCP 架构知识](20-MCP模型上下文协议.md#_5、mcp-架构知识)；[20 MCP模型上下文协议 §3、MCP 能做什么](20-MCP模型上下文协议.md#_3、mcp-能做什么)

### Q7-7. MCP 服务器开发流程是什么？

一个 MCP Server 的典型开发流程通常是：

1. 明确要暴露的能力边界，是工具、资源还是提示模板。
2. 定义输入输出 schema 和错误处理方式。
3. 选择传输方式，比如 STDIO 或 HTTP。
4. 实现服务端逻辑，并补齐鉴权、日志、超时和异常处理。
5. 在客户端完成注册、发现、调用和联调测试。

工程上最容易被忽略的是能力边界和错误处理。MCP Server 不是简单把现有 API 套一层壳，而是要把能力设计成真正适合模型消费的接口。

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否理解 MCP 不只是“会用”，还包括服务端建设。

**对应章节：**[20 MCP模型上下文协议 §4、怎么用 MCP](20-MCP模型上下文协议.md#_4、怎么用-mcp)；[20 MCP模型上下文协议 §6、案例实战：本地 MCP 天气服务与客户端](20-MCP模型上下文协议.md#_6、案例实战：本地-mcp-天气服务与客户端)

### Q7-8. Agent 应该如何接入 MCP 工具？

Agent 接入 MCP 工具，核心是把 MCP 暴露出来的能力纳入自己的工具注册和调度体系。

通常的思路是：

- 先发现 MCP Server 暴露的工具或资源。
- 再把这些能力转换成 Agent 能消费的工具描述和 schema。
- 在执行时让模型决定何时调用，宿主负责真正发起 MCP 请求。
- 把结果回传给 Agent，进入下一轮决策。

真正的关键不在“接通”，而在“如何保证接通之后仍然可控”，包括权限、超时、失败重试、观测和审计。

**常见追问：**

- MCP 在你的架构里是只做权限检查，还是会和环境级安全沙箱一起工作？
- 如果已经有 MCP，为什么还需要容器、只读挂载或系统级隔离？

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**Agent 架构与 MCP 的结合方式。

**对应章节：**[20 MCP模型上下文协议 §4、怎么用 MCP](20-MCP模型上下文协议.md#_4、怎么用-mcp)；[20 MCP模型上下文协议 §6、案例实战：本地 MCP 天气服务与客户端](20-MCP模型上下文协议.md#_6、案例实战：本地-mcp-天气服务与客户端)

### Q7-9. MCP 的流式 HTTP 传输核心优势是什么？

流式 HTTP 的核心价值，是让结果可以边产生边返回，而不是必须等整次调用结束后一次性返回。

这样做有三个直接好处：

- 降低首包延迟，用户更快看到反馈。
- 支持长任务的中途进度回传，减少“卡死感”。
- 更利于宿主做取消、超时和部分结果处理。

对于 Agent 或研究型任务，这种能力尤其重要，因为很多调用本来就不是“瞬时完成”的。

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**流式协议在体验和并发上的价值理解。

**对应章节：**[20 MCP模型上下文协议 §5、MCP 架构知识](20-MCP模型上下文协议.md#_5、mcp-架构知识)

### Q7-10. MCP 调用如何保证并发？

MCP 并发能力不只是协议本身决定的，更取决于宿主和服务端如何设计请求处理模型。

要保证并发，通常要关注：

- 请求是否有唯一标识，避免响应错配。
- 服务端是否支持并行处理，而不是串行阻塞。
- 工具执行是否有超时、限流和优先级控制。
- 客户端是否能正确管理多请求上下文。

如果底层工具本身很慢，协议再好也救不了，所以并发治理要看“协议层 + 服务层 + 工具层”三层一起设计。

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**高并发调用下的协议和宿主设计能力。

**对应章节：**[20 MCP模型上下文协议 §5、MCP 架构知识](20-MCP模型上下文协议.md#_5、mcp-架构知识)

### Q7-11. A2A 和 MCP 的区别是什么？什么时候需要多智能体？

MCP 更关注“模型和外部能力怎么接”，A2A 更关注“Agent 和 Agent 之间怎么协作”。

前者偏工具与资源接入标准，后者偏多智能体通信和分工协作。如果系统只是需要接搜索、数据库、文件系统，MCP 的价值更明显；如果系统已经演化出多个角色明确、职责分离的 Agent，比如规划、检索、执行、审阅各自独立，那么 A2A 或多智能体编排才有意义。

多智能体不是越早越好。任务如果单 Agent 就能清晰处理，多智能体只会增加通信、调试和治理成本。只有在职责边界清晰、单 Agent prompt 已经过载、流程确实需要角色分治时，拆分才划算。

**常见追问：**

- Supervisor 和 Handoff 怎么选？
- 多智能体最常见的失败点是什么？
- 什么情况下 Skill 比独立 Agent 更合适？
- A2A 和 LangGraph 这类应用内编排框架、普通 Agent 框架的边界到底是什么？
- Agent Skills 和 Tool、独立 Agent 的边界怎么理解？什么时候更适合做成 Skill 而不是再拆一个 Agent？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**协议边界和系统拆分能力。

**对应章节：**[26 LangGraph多智能体与A2A §1、A2A 协议与多智能体架构](26-LangGraph多智能体与A2A.md#_1、a2a-协议与多智能体架构)；[26 LangGraph多智能体与A2A §2、Supervisor 与 Handoff](26-LangGraph多智能体与A2A.md#_2、supervisor-与-handoff)；[26 LangGraph多智能体与A2A §3、Skills 与多智能体的边界](26-LangGraph多智能体与A2A.md#_3、skills-与多智能体的边界)；[27 Agent Skills智能体技能与AI编程工具实践](27-Agent%20Skills智能体技能与AI编程工具实践.md)

**来源：**腾讯AI后台工程师一面（实际大厂面试题）

### Q7-12. 有哪些热门的 MCP 工具？

常见受关注的 MCP 工具通常集中在几类：

- 浏览器自动化类，比如 Playwright。
- 数据与后端类，比如数据库、Supabase 一类服务。
- 文件与代码类，比如本地文件系统、代码库。
- 搜索与知识类，比如网页搜索、知识库检索。

面试里更重要的不是背全名字，而是知道为什么这些工具受欢迎：因为它们覆盖了 Agent 最常见的外部能力需求。

**重要度：**`低频`（出现次数：1次） | **难度：**`基础`

**考察点：**对 MCP 生态有基本了解，但不要求死记硬背。

---

## 8、平台实践与框架选型：Coze、Dify、RAGFlow

### Q8-1. Coze / Dify 这类平台和 LangChain / LangGraph 的关系怎么理解？

Coze / Dify 更偏应用层、低代码和可视化交付，LangChain / LangGraph 更偏代码级开发框架。它们不是谁替代谁，而是同一条 AI 应用链路上的不同层级。

如果从这一层关系来理解：

- Dify / Coze 更适合快速把 Agent、RAG、Workflow 搭起来，方便业务侧验证、协作和交付。
- LangChain 更适合把 Prompt、Model I/O、Parser、Retriever、Tools 这些组件按代码方式组合起来。
- LangGraph 更适合状态显式、循环、条件路由、人机协同、多智能体这类复杂编排。

所以平台更接近“应用搭建层”，代码框架更接近“底层编排层”。真实项目里很常见的路径是：先用平台验证业务价值，再把核心链路迁到代码框架；或者平台负责上层业务编排，底层复杂能力由自建服务承接。

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**平台能力和代码能力的选型判断。

**对应章节：**[3 基于Coze&Dify平台的智能体开发 §1、智能体(AI Agent)概述](3-基于Coze&Dify平台的智能体开发.md#_1、智能体ai-agent概述)；[9 LangChain概述与架构 §2、LangChain 定位](9-LangChain概述与架构.md#_2、langchain-定位)

### Q8-2. 各类 Agent 开发框架应该如何选取？

框架选型不要看热度，要看任务复杂度、团队能力和交付要求。

- 如果目标是快速原型、生态丰富、常见组件齐全，LangChain 很合适。
- 如果任务有显式状态、循环、条件路由、人机协同或多智能体，LangGraph 更合适。
- 如果是低代码、快速验证业务流程，Coze / Dify 更适合。
- 如果系统边界简单、需求非常明确，直接手写 SDK 也可能是成本最低的方案。

更成熟的回答方式，不是简单比较“哪个最好”，而是说明“什么场景下用什么更划算”。能说出替代方案和迁移路径，通常比单纯夸某个框架更有说服力。

**常见追问：**

- 你最终会用哪些指标判断这次框架选型是不是成功的？
- 如果前期先用平台，后期迁到自研框架，迁移边界应该怎么划？

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**框架选型和工程判断。

**对应章节：**[9 LangChain概述与架构 §2、LangChain 定位](9-LangChain概述与架构.md#_2、langchain-定位)；[22 LangGraph概述与快速入门 §1、LangGraph 简介](22-LangGraph概述与快速入门.md#_1、langgraph-简介)

### Q8-3. 什么时候工作流比 Agent 更合适？

当业务步骤固定、输出格式明确、希望强可控和易审计时，工作流通常比 Agent 更合适。

比如分类、摘要、内容审核、报告生成、表单填充、固定审批链，这类场景流程路径通常是稳定的。用工作流能更清楚地定义节点职责、失败重试、人工介入点和 SLA。Agent 更适合开放任务和动态决策，而工作流更适合企业里大量“有规则、可追责、可回放”的流程型任务。

**常见追问：**

- Workflow 中哪些节点适合交给 LLM？
- 人工审核点应该加在哪里？
- 工作流如何逐步升级成 Agentic Workflow？

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**流程治理意识。

**对应章节：**[3 基于Coze&Dify平台的智能体开发 §6、工作流的搭建](3-基于Coze&Dify平台的智能体开发.md#_6、工作流的搭建)；[21 Agent智能体 §1、Agent 简介](21-Agent智能体.md#_1、agent-简介)

### Q8-4. 用 Python 调用 Dify / Coze 工作流时，最值得关注哪些工程细节？

重点需要关注五类问题：鉴权、参数对齐、流式模式、超时限制、日志追踪。

先说 Dify。它的工作流 API 重点字段通常是：

- `Authorization: Bearer {api_key}`
- 请求体里的 `inputs`
- `response_mode`
- `user`

这里有两个非常容易踩坑的点：一是 API Key 和工作流是绑定关系，不是拿一个全局 key 到处用；二是长流程尽量用 `streaming`，因为 `blocking` 很容易被网关超时打断。真正做流式时，要能识别 SSE 流里的 `workflow_finished`，并正确拿到最终 `outputs`。

再说 Coze。它更需要盯紧：

- `workflow_id`
- `app_id`
- `parameters`

其中 `parameters` 必须和工作流里定义的输入变量严格对齐，变量名一旦对不上，代码看起来能跑，请求也可能成功，但业务结果就是不对。流式处理时，则要能区分 `PING`、`MESSAGE`、`DONE`，或者 SDK 里的 `MESSAGE / ERROR / INTERRUPT` 事件。

如果从工程角度总结，重点需要看这几件事：

- 密钥、工作流、应用的绑定关系是否搞清楚。
- 请求参数名是否和平台工作流输入严格一致。
- 是不是默认用流式，而不是把长任务都压成阻塞式。
- 平台日志、`workflow_run_id`、业务 `request_id` 是否串起来了。
- 如果流程里有外部副作用，是否做好幂等、重试和失败补偿。

这道题真正考察的，不是“会不会发 POST 请求”，而是是否真正理解过平台 API 的真实调用链。

**常见追问：**

- 流式和阻塞式返回怎么选？
- 平台日志能解决哪些排障问题？
- 平台工作流和自建后端服务怎么协作？

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**是否看过平台 API 的真实调用链，而不是只会点界面。

**对应章节：**[4 Python调用Dify平台工作流 §4、请求格式](4-Python调用Dify平台工作流.md#_4、请求格式)；[5 Python调用Coze平台工作流 §3、通过 Python 代码调用工作流](5-Python调用Coze平台工作流.md#_3-通过-python-代码调用工作流)

### Q8-5. 开源 RAG 平台比如 RAGFlow，应该如何选型？和 Dify 或自研链路怎么比较？

这道题不要答成“谁更强”，而要答成“当前知识库场景更需要什么”。

如果重点是文档导入、解析、切块、检索和 RAG 编排体验，那么像 RAGFlow 这类平台会比较有吸引力；如果重点是多类 Agent、工作流、插件生态和业务 API 编排，Dify / Coze 这类平台的边界会更宽；如果核心链路涉及深度定制、复杂状态治理、合规审计和内部系统耦合，自研代码链路通常更稳。

真正做选型时，优先看四类因素：文档导入与解析质量、权限和多租户能力、是否方便对接业务系统、二次开发空间。很多项目不是卡在“能不能做 RAG”，而是卡在“解析质量稳不稳、权限做不做得住、后续能不能接进企业系统”。

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**RAG 平台选型判断，以及平台能力与自研能力的边界意识。

---

## 9、安全、评测、部署与可观测性

### Q9-1. 你会如何评估一个 RAG 或 Agent 系统的效果？

评估先拆成**离线评测**和**在线评测**，再把问题拆到具体层级，而不是只盯一个总分。

如果是 RAG，通常按两层看：

- 检索层：相关内容有没有被召回，引用片段对不对，badcase 是卡在切块、召回、重排，还是过滤。
- 生成层：答案是不是忠实于证据，引用是否正确，无依据时能不能拒答，最终回答对业务有没有帮助。

如果是 Agent，评测应分成两类：

- 轨迹级评测：有没有选对工具、参数对不对、有没有无效循环、是不是过早结束。
- 结果级评测：最终任务有没有完成，输出质量和用户体验是否达标。

在线评测则看用户满意度、转人工率、任务中断率、耗时、badcase 类型分布。对于 Agent，还要看工具调用成功率、重试率、循环次数和人工兜底比例。

自动评测上，通常不会只押某一种方案，而是把规则评测、`LLM-as-a-judge` 和人工抽检结合起来。规则和 LLM 评测适合放大规模、做回归，人工抽检负责兜住高风险误判和评价漂移。

更重要的是评测不能只告诉你“分数变低了”，而要能定位到底是哪一层出问题。比如召回差、上下文组装差、生成幻觉、工具失败、终止条件不合理，这些问题的修法完全不同。

更推荐的评测闭环是：**先分层建指标，再沉淀 badcase，最后让 badcase 反过来驱动 Prompt、检索、工具和流程迭代。**

**常见追问：**

- RAGAS 这类框架适合做什么？
- 如何建设 badcase 数据集？
- 自动评测和人工评测怎么配合？

**重要度：**`必刷`（出现次数：2次） | **难度：**`较难`

**考察点：**是否有评测闭环意识。

**对应章节：**[19 RAG检索增强生成 §3、RAG 综合案例：智能运维助手](19-RAG检索增强生成.md#_3、rag-综合案例：智能运维助手)；[21 Agent智能体 §5、实操与案例](21-Agent智能体.md#_5、实操与案例)

### Q9-2. 什么是“幻觉”？应用层应该怎么缓解？

幻觉不只是“完全胡说八道”，更常见的是“看起来很像真的，但细节、引用、时间点、权限范围或者工具结果已经偏了”。

因此，不应把幻觉当成单纯的模型问题，而应把它视为一条链路上的系统问题。比较稳妥的缓解思路通常有四层：

- 知识层：用 RAG、外部检索、引用和无依据拒答，尽量让模型基于证据回答。
- 执行层：把计算、查库、发消息、查订单这类事情交给 Tool，不让模型纯文本瞎编结果。
- 约束层：用结构化输出、schema 校验、关键字段规则校验和低温度策略，减少“格式对了但内容错了”的情况。
- 治理层：做 badcase 回灌、人工抽检、线上监控和降级，别把“模型大概率没问题”当作上线条件。

总结来说：幻觉很难被彻底消灭，工程目标不是“保证永不出错”，而是让它 **可发现、可限制、可回滚、可复盘**。

**常见追问：**

- RAG 为什么不能彻底消灭幻觉？
- 什么叫“有引用但依然不忠实”？
- 幻觉和 Prompt Injection 是一回事吗？

**重要度：**`高频`（出现次数：2次） | **难度：**`中等`

**考察点：**是否理解“模型能力问题”和“应用链路治理问题”的边界。

**对应章节：**[19 RAG检索增强生成 §1、RAG 简介](19-RAG检索增强生成.md#_1、rag-简介)；[14 输出解析器 §4、结构化输出](14-输出解析器.md#_4、结构化输出)

### Q9-3. 多用户场景下，如何为 Agent 做安全沙箱隔离？

如果 Agent 只是单机 Demo，很多风险不会暴露出来；但一旦进入多用户场景，安全隔离就必须从“工具权限”上升到“执行环境隔离”。

一个更稳的方案通常会分三层：

- 环境层：用 Docker 或其他容器把每个任务或租户隔离开，限制 CPU、内存、网络和文件系统访问范围。
- 系统层：配合 seccomp、AppArmor、只读根目录、临时工作目录、非 root 用户运行，避免直接碰宿主机。
- 应用层：对工具、文件访问、系统命令、外部连接做白名单和审计，不让模型拿到裸权限。

如果要执行代码、命令或读文件，通常不会只靠 Prompt 或业务代码做限制，而是会把工作目录挂成最小权限空间，敏感目录不挂载，数据库密钥和主机凭据也不进容器。MCP 或 Tool 负责“能不能调”，沙箱负责“即使调了也跑不出边界”，两者职责不同，最好一起上。

**重要度：**`高频`（出现次数：2次） | **难度：**`较难`

**考察点：**多用户 Agent 的安全隔离设计，以及协议层控制和环境层隔离的分工。

**对应章节：**[7 企业级大模型部署 §1、企业级大模型部署概述](7-企业级大模型部署.md#_1、企业级大模型部署概述)；[17 Tools工具调用 §6、从课程案例走向真实项目](17-Tools工具调用.md#_6、从课程案例走向真实项目)

### Q9-4. Agent 部署和运维有哪些指标？

Agent 运维至少要看五类指标：

- 效果指标：任务完成率、用户满意度、引用正确率。
- 性能指标：首 token、端到端延迟、P95/P99。
- 稳定性指标：调用成功率、超时率、重试率、失败率。
- 成本指标：token 消耗、工具调用成本、单任务平均成本。
- 治理指标：人工接管率、审计日志完整性、异常任务复盘效率。

如果是多工具、多步骤 Agent，还要看每一步的成功率和卡点分布，否则你只能知道“最终失败了”，却不知道失败发生在哪一层。

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**从 Demo 到生产的运维视角。

**对应章节：**[7 企业级大模型部署 §1、企业级大模型部署概述](7-企业级大模型部署.md#_1、企业级大模型部署概述)；[21 Agent智能体 §5、实操与案例](21-Agent智能体.md#_5、实操与案例)

### Q9-5. RAG 系统在实际部署中可能面临哪些挑战？

RAG 真正上线后，难点通常不在“能不能检索”，而在“这条从索引到回答的完整链路能不能长期稳定运行”。

这里首先要强调的是：RAG 不是单点能力，而是“索引阶段 + 检索与生成阶段”的工程链路。很多线上问题，本质上都是这两阶段里某一层出了问题。

先把挑战拆成六类：

- 数据侧：文档解析质量、切块策略、表格和 PDF 处理、知识更新时效。如果源数据脏、切块不合理，后面检索和生成都会被拖垮。
- 检索侧：Embedding 选型、召回质量、混合检索、重排效果、metadata 过滤。很多系统离线看起来能答，线上一放大就会暴露“召回不准、噪声太多、漏关键片段”的问题。
- 生成侧：上下文组装、引用溯源、忠实度控制、拒答策略。RAG 不是“检索了就不会幻觉”，如果上下文拼接差、Prompt 弱、引用不清，模型照样会编。
- 治理侧：权限隔离、版本管理、引用可追溯、知识回滚。企业里最怕的不是答错，而是答了权限外内容，或者答出来了却说不清依据来自哪里。
- 评测侧：badcase 建设、离线评测和在线指标闭环。没有评测，你很难知道问题到底出在切块、召回、重排还是生成。
- 工程侧：延迟、成本、缓存、可观测性、索引重建和线上运维。比如知识库一更新，是全量重建还是增量更新？查询慢是卡在检索、重排还是模型？这些都得拆开看。

所以面试里更稳的答法不是只说“部署会有很多工程问题”，而是明确讲出：RAG 是一条从数据接入、索引构建、检索召回到生成回答的完整链路，任何一层出问题，最终答案都会出问题。

**常见追问：**

- 如果 RAG 线上效果不好，你会优先从哪一层开始排查？
- 知识库频繁更新时，你怎么处理索引重建和版本回滚？

**重要度：**`高频`（出现次数：1次） | **难度：**`较难`

**考察点：**是否有生产系统思维。

**对应章节：**[19 RAG检索增强生成 §2、RAG 文本处理核心知识](19-RAG检索增强生成.md#_2、rag-文本处理核心知识)；[7 企业级大模型部署 §1、企业级大模型部署概述](7-企业级大模型部署.md#_1、企业级大模型部署概述)

### Q9-6. 如何确保 Agent 的行为安全、可控且符合人类意图？

这件事不能只寄希望于模型本身“够聪明”或“已经对齐过”。模型层的 SFT、RLHF / RLAIF 只能提供基础安全边界，真正落地到应用时，还必须补应用层治理。

通常会从四层做：

- 模型与提示层：用 System Message 明确角色、边界、安全规则和拒答策略。
- 工具与权限层：不给模型裸权限，所有 Tool 都要做 schema 约束、鉴权、参数校验和最小权限暴露。
- 执行与流程层：设置最大步数、超时、人工审批、转人工、失败兜底，避免无限循环和危险动作直接落地。
- 观测与审计层：保留调用日志、trace、输入输出、关键决策点和人工复盘链路。

如果再补一层生产视角，我还会把预算和熔断讲进去：

- 预算控制：最大工具调用次数、时间预算、token 预算、费用预算。
- 熔断机制：连续失败停止、异常率告警、重复无进展退出。

这些机制的价值不只是省钱，更重要的是把“模型可能一直试下去”的风险收住。

如果再往上一层总结，就是：模型对齐解决“基础行为别太离谱”，应用治理解决“在你的业务系统里别出事”。真正稳的 Agent，一定是“模型能力 + 权限边界 + 流程控制 + 人机协同”一起做，而不是只靠某一层。

**常见追问：**

- 模型已经做过对齐了，为什么应用层还要再做这么多安全治理？
- 哪些动作你会要求人工审批，而不是让 Agent 直接执行？

**重要度：**`高频`（出现次数：1次） | **难度：**`较难`

**考察点：**是否理解“模型对齐”和“应用层安全治理”是两套互补机制。

### Q9-7. Agent 链路耗时很长时，如何定位性能瓶颈？

Agent 一条链路跑到几分钟，不能只说“模型太慢”，要先把耗时拆开。

通常会按这几层做分解：

- 模型层：单次推理时长、首 token 延迟、输出 token 长度。
- 检索层：召回、重排、外部搜索、知识库请求耗时。
- 工具层：API 延迟、浏览器动作、代码执行、等待外部系统返回。
- 编排层：路由判断、Supervisor 判断、重复重试、串行等待。
- 结果层：后处理、校验、存储、日志落盘。

比较稳的做法是给每一步打 trace 和 span，先看 wall time 花在哪，再决定是换模型、改链路、减少步骤，还是把串行改成并行。如果用了 LangGraph，我还会看节点级耗时、是不是反复进入同一节点、有没有因为缺少明确完成信号而来回判断。

很多五分钟任务最后不是卡在单次模型调用，而是卡在多步链路过长、工具等待、监督节点重复判断，或者中间没有明确成功信号导致反复检查。也就是说，性能问题很多时候不是“模型太慢”，而是**状态流转和执行闭环没有设计好**。

**重要度：**`高频`（出现次数：1次） | **难度：**`较难`

**考察点：**Agent 性能排障能力，以及把长链路延迟拆解到模型、工具、检索和编排层的能力。

### Q9-8. 意图识别 / 任务路由应该怎么做？

需要先强调，这题和“模型路由”不是一回事。模型路由更接近“这次该用大模型还是小模型”，而意图识别 / 任务路由更接近“这次请求到底该走 FAQ、RAG、Tool、Agent、Workflow，还是直接转人工”。

比较稳的设计通常分三层：

- 第一层是目标分类：先定义清楚系统有哪些路由终点，比如闲聊、FAQ、知识问答、查状态、执行动作、复杂任务、人工兜底。
- 第二层是路由机制：高确定性场景先用规则和关键词兜底，模糊场景再用分类模型或 LLM 做语义判断。
- 第三层是置信度治理：低置信度不强判，允许澄清、降级或转人工，别让系统带着误判继续往下跑。

工程上通常不会做“单层万能路由器”，而是更偏好多级路由：

- 先做业务意图路由：判断这是 FAQ、RAG、Tool 还是 Agent。
- 再做子域路由：比如客服里再分订单、退款、工单、投诉。
- 最后再做模型路由：在具体链路里决定用强模型还是轻模型。

这样做的好处是更容易治理，也更容易评测。评估时重点看：路由准确率、低置信度占比、误路由成本、澄清命中率，以及每条路由分支的最终任务完成率。

**常见追问：**

- 什么时候先用规则路由就够了，什么时候必须上语义分类？
- 如果一个问题同时像 FAQ 又像 Tool 调用，你怎么处理？
- 如何避免错误路由把后续链路全部带偏？

**重要度：**`高频`（出现次数：1次） | **难度：**`较难`

**考察点：**分层路由能力、意图识别落地能力，以及把 FAQ / RAG / Tool / Agent 串成统一入口的系统设计意识。

**对应章节：**[17 Tools工具调用 §6、从课程案例走向真实项目](17-Tools工具调用.md#_6、从课程案例走向真实项目)；[19 RAG检索增强生成 §3、RAG 综合案例：智能运维助手](19-RAG检索增强生成.md#_3、rag-综合案例：智能运维助手)

### Q9-9. 你会怎么做大模型应用的可观测性？

至少要做到三件事：**有日志、有指标、有 Trace**。也就是能看见请求怎么流过系统、每一步花了多久、失败在哪里、用了多少 token、最后输出了什么。

具体上，应打通 trace_id / request_id，把入口请求、Prompt 版本、模型版本、索引版本、检索结果、工具调用、异常信息、耗时和 token 用量串起来。如果用了 LangChain / LangGraph，还需要重点关注节点流转、状态更新、人工中断点、重试次数和最终退出原因。

对 Agent 系统来说，可观测性尤其重要，因为很多问题都发生在中间步骤，而不是最终输出那一刻。真正有用的可观测性，不只是“最后报错了”，而是能告诉你：**它在哪个节点卡住、为什么重试、为什么结束、当时看到了什么状态。**

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**Trace、日志、指标意识。

### Q9-10. 控制大模型应用成本，你会优先从哪些层面下手？

通常从模型、上下文、检索、流程四层入手。

- 模型层：高低配模型分层，大任务用强模型，小任务用轻模型。
- 上下文层：压缩 Prompt，减少无效历史，控制返回长度。
- 检索层：优化召回和重排，减少无意义进窗内容。
- 流程层：减少不必要的 LLM 调用次数，能规则化就不要全靠模型。

很多系统成本高，不是因为模型太贵，而是链路设计太浪费，比如无差别全量检索、过长历史拼接、多次重复调用大模型、工具失败后盲目重试。

**常见追问：**

- 什么时候应该引入模型路由？
- 如何平衡成本和效果？
- token 成本和工具成本哪个更值得先优化？

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**成本优化思维。

**对应章节：**[1-1 大模型认知与工程概览 §4、大模型的工程实现（概览）](1-1-大模型认知与工程概览.md#_4、大模型的工程实现%EF%BC%88概览%EF%BC%89)；[7 企业级大模型部署 §1、企业级大模型部署概述](7-企业级大模型部署.md#_1、企业级大模型部署概述)

### Q9-11. 模型路由应该怎么做？

模型路由的核心不是“让所有请求自动找最强模型”，而是让不同复杂度、不同风险等级的请求走到最合适的链路。

比较常见的做法有三层：

- 意图路由：先判断这是 FAQ、RAG、工具调用、复杂 Agent，还是应该直接转人工。
- 复杂度路由：简单分类、格式化抽取、轻量总结走小模型；多步规划、开放生成、复杂决策走大模型。
- 成本路由：热点问题先查缓存，能规则化解决的就别进大模型，高价值用户或高风险任务再给更强模型预算。

真正落地时，通常不会把“路由”做成纯主观规则，而会配合评测和线上数据来调：

- 看不同路由分支的完成率、延迟、每任务成本。
- 看是不是某类问题被错误地下沉到了小模型。
- 看路由规则是否需要引入回退机制，比如小模型失败后升级到大模型。

所以模型路由本质上是效果、成本和稳定性之间的平衡器。做得好的系统，不是每次都用最贵的模型，而是能把“该省的地方省掉，该花的地方花对”。

**常见追问：**

- 什么场景下适合先用规则路由，而不是一开始就做模型路由？
- 小模型路由失败后，怎样设计升级和回退策略？
- 如何避免为了省成本把系统整体效果打穿？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**成本治理、模型分层和路由策略设计能力。

**对应章节：**[11 Model I/O 与模型接入 §2、LangChain 模型分类、参数与返回](11-Model-I-O与模型接入.md#_2、langchain-模型分类、参数与返回)；[7 企业级大模型部署 §1、企业级大模型部署概述](7-企业级大模型部署.md#_1、企业级大模型部署概述)

### Q9-12. 内网环境下怎么设计 Agent / RAG 系统？

内网环境下做 Agent / RAG，核心不是“把公网方案照搬一遍”，而是先把 **数据不出域、模型可控、依赖可替换、链路可观测** 这几件事立住。

如果按企业级部署思路设计，通常拆成三层：

- 应用层：Dify、Coze 类平台的私有化版本，或者自研后端服务，负责工作流、Agent 编排、权限和业务接口。
- 推理层：用 Xinference 这类托管平台统一管理 LLM、Embedding、Rerank，对外暴露 OpenAI-compatible API。
- 数据层：内网向量库、关系库、对象存储、知识库索引、日志和审计系统都放在可控域内。

这类架构的关键点一般有：

- 模型接入统一：上层尽量都走兼容 API，方便替换在线模型、本地模型和不同推理引擎。
- 网络和权限隔离：Agent 能访问哪些内网系统，必须按最小权限开放，不让模型拿到一把通吃的内网钥匙。
- 知识治理：文档解析、索引重建、版本回滚、租户隔离、引用追踪都要内建，不然内网知识库很快会失控。
- 可观测与审计：请求链路、工具调用、检索结果、模型版本、token 用量、异常告警都要能在内网闭环查看。
- 降级能力：内网模型抖动时，是否有缓存、规则链路、人工兜底或备用模型，不然系统会很脆。

总结来说：内网方案不是“离线版 Demo”，而是一套更强调安全边界、运维治理和模型可替换性的生产架构。

**常见追问：**

- 为什么很多企业会选择“应用层 + 推理层”解耦，而不是把所有东西混在一台机器上？
- 内网环境下，LLM、Embedding、Rerank 为什么最好分开部署和管理？
- 如果不能直接访问公网搜索，动态信息怎么补？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**企业私有化部署理解、应用层与推理层解耦意识，以及内网 Agent / RAG 的安全与运维设计能力。

**对应章节：**[7 企业级大模型部署 §1、企业级大模型部署概述](7-企业级大模型部署.md#_1、企业级大模型部署概述)；[7 企业级大模型部署 §3、模型部署](7-企业级大模型部署.md#_3、模型部署)；[12 Ollama本地部署与调用 §5、LangChain 整合 Ollama](12-Ollama本地部署与调用.md#_5、langchain-整合-ollama)

---

## 10、典型业务场景设计题

### Q10-1. 如果让你设计一个企业知识库问答系统，你会怎么做？

通常按“数据接入、检索链路、生成链路、治理能力”四层设计。

先把文档接入、解析、切块、向量化和索引更新机制搭好，再设计查询链路，包括 query 改写、混合检索、rerank、权限过滤和上下文组装。生成层要强调“基于证据回答、无依据时拒答、尽量带引用”。治理层则要补上权限、版本、监控、评测和 badcase 回灌。

如果是企业场景，通常还会预留转人工、知识修订、索引回滚和多租户隔离能力，因为这些往往比“第一次答对”更影响长期可用性。

**常见追问：**

- 如何支持知识更新？
- 如何避免用户问到权限外文档？
- 如果系统答非所问，优先排查哪里？

**重要度：**`必刷`（出现次数：1次） | **难度：**`较难`

**考察点：**从需求到架构的完整表达能力。

**对应章节：**[2-RAG 搭建企业私有&个人知识库 §5、使用 Dify 搭建知识库](2-RAG-搭建企业私有&个人知识库.md#_5、使用-dify-搭建知识库)；[19 RAG检索增强生成 §3、RAG 综合案例：智能运维助手](19-RAG检索增强生成.md#_3、rag-综合案例：智能运维助手)

### Q10-2. 如果让你设计一个 NL2SQL Agent，你会重点控制哪些风险？

重点应控制 schema 注入、SQL 安全、执行验证和歧义澄清四类风险。

首先不能把整个数据库 schema 全量塞进上下文，而是要按问题做裁剪和 schema linking。其次要限制只读查询、禁止危险语句、加执行沙箱和超时控制。再次要做语法检查和执行前校验，避免生成看似合理但跑不通的 SQL。最后，对时间范围、口径定义、字段歧义这类问题，要支持澄清，不要让模型自行脑补。

**常见追问：**

- 生成 SQL 前要不要先展示预览？
- 如何做 self-correction？
- 什么时候该放弃生成 SQL，转人工或转报表模板？

**重要度：**`高频`（出现次数：1次） | **难度：**`较难`

**考察点：**结构化查询和安全意识。

### Q10-3. 如果让你设计一个客服智能体，你会优先考虑哪些能力？

优先考虑意图识别、知识检索、流程执行、人机协同和复盘闭环。

客服场景不是简单问答，它往往同时涉及 FAQ、订单查询、退款流程、工单流转和情绪安抚。所以系统既要能回答，也要能查状态、调接口、补资料，还要在不确定时及时转人工，并把上下文完整交接过去。

上线后还要持续复盘高频未解决问题、误判意图、知识缺口和转人工原因，这样系统才会越做越稳，而不是只在演示时好看。

**常见追问：**

- 转人工条件怎么设计？
- 客服场景为什么更需要长期记忆或用户画像？
- 如何做满意度和闭环评估？

**重要度：**`高频`（出现次数：1次） | **难度：**`较难`

**考察点：**业务型 Agent 设计能力。

**对应章节：**[3 基于Coze&Dify平台的智能体开发 §7、项目：商户运营管家](3-基于Coze&Dify平台的智能体开发.md#_7、项目：商户运营管家)；[21 Agent智能体 §5、实操与案例](21-Agent智能体.md#_5、实操与案例)

### Q10-4. 如何设计 Agent 的完成判断与终止条件，避免过早结束？

Agent 的“结束”不能只靠感觉，也不能只靠看日志或一个宽泛的完成率分数。更稳的做法是给它设计显式的完成条件。

终止逻辑通常拆成四层：

- 任务层：是否达成用户目标，是否拿到了必须的产物或字段。
- 工具层：关键工具调用是否成功，返回结果是否满足预期约束。
- 状态层：当前 state 是否进入 done / failed / need_human 这样的终态。
- 保护层：最大步数、超时、重复无进展次数、异常退出条件。

如果链路里有 Supervisor 或监督节点，更适合把它当“辅助审查”和“异常兜底”，而不是唯一的结束依据。真正稳的方案是：只有当关键任务结果、工具返回和状态机条件都满足时，才允许进入最终答复节点。否则宁可继续执行、澄清或转人工，也不要过早把未完成结果返回给用户。

**常见追问：**

- 只靠监督节点统计完成率和查日志，为什么会慢、还容易误判？
- 有没有更通用的判断方式，比如直接看关键工具调用结果和状态字段？
- 如何避免 Agent 任务还没做完，就提前返回给用户？

**重要度：**`高频`（出现次数：1次） | **难度：**`较难`

**考察点：**Agent 终止条件设计、状态机思维，以及 Supervisor / 工具结果 / 状态字段的组合使用能力。

**对应章节：**[24 LangGraphAPI：节点、边与进阶 §2、Graph API 之 Edge](24-LangGraphAPI：节点、边与进阶.md#_2、graph-api-之-edge%EF%BC%88边%EF%BC%89)；[21 Agent智能体 §4、Agent 工作原理（V1.0）](21-Agent智能体.md#_4、agent-工作原理%EF%BC%88v1.0%EF%BC%89)

### Q10-5. Code Agent 怎么设计？

Code Agent 的核心不是“会写几行代码”，而是能围绕一个代码任务完成 **读代码库、定计划、改文件、跑验证、根据结果继续修正** 的闭环。从系统结构看，它本质上仍然是一个 **模型 + 工具集 + 运行循环 + 当前状态** 的执行系统，只不过工具和状态都更偏代码场景。

如果按模块拆分，通常设计为以下几层：

- 任务理解层：先把需求转成明确目标，判断是读代码、改 bug、补测试、重构，还是回答架构问题。
- 代码库理解层：通过代码搜索、文件树、符号索引、依赖关系、提交历史建立最小必要上下文，而不是把整个代码库一股脑塞进模型。
- 计划与执行层：先列出修改计划，再决定读哪些文件、改哪些文件、跑哪些命令、需要哪些验证。
- 工具层：至少要有搜索、读文件、编辑文件、运行测试、执行命令、查看日志这些能力。
- 反馈闭环层：根据 lint、测试、运行报错、diff 结果继续修正，而不是生成一次补丁就结束。
- 安全治理层：限制执行权限、隔离危险命令、保留变更和执行日志，避免 Agent 在代码库里无约束乱改。

真正的难点通常不在“会不会生成代码”，而在三个地方：

- 上下文治理：代码库很大时，怎么只拿到和当前任务最相关的上下文。
- 验证闭环：怎么判断修复真的生效，而不是只让模型说“我已经改好了”。
- 失败处理：当 Agent 连续修不好 bug 时，怎么停下来、怎么暴露中间诊断、怎么交还给人。

所以一个成熟的 Code Agent，更接近“面向代码任务的执行系统”，而不是“代码自动补全工具放大版”。它的关键不只是会写代码，而是能把 **代码库理解、工具调用、验证反馈、停止条件** 做成稳定闭环。

**常见追问：**

- 千万行代码库里，Code Agent 最容易先卡在哪里？
- Agent 修不好 bug 时，你怎么设计停止条件和人工接管？
- 静态知识和动态数据在代码场景里怎么区分，哪些该靠索引，哪些该靠运行反馈？

**重要度：**`高频`（出现次数：1次） | **难度：**`较难`

**考察点：**代码场景下的 Agent 设计能力、代码库上下文治理能力，以及“修改 - 验证 - 继续修复”的闭环意识。

### Q10-6. 如果让你设计一个 Deep Research 系统，它和普通 RAG 有什么不同？

普通 RAG 更接近“先检索，再回答”，而 Deep Research 更接近“围绕一个复杂主题，先拆研究任务，再多轮检索、交叉验证、综合整理，最后输出结构化报告”。

因此，Deep Research 通常需要查询规划、子任务拆分、多源检索、冲突检测、引用管理、可信度判断和迭代补检这些能力。它更接近研究助手，而不是问答助手。输出形式也更偏报告、摘要和引用列表，而不是一句直接答案。

如果按工程实现去理解，它本质上更接近“**工作流 / 图编排 + 多轮检索 + 报告生成**”的组合能力，而不是把普通 RAG 的上下文塞得更长。重点不只是召回，而是有没有把研究过程拆开、证据有没有被反复求证、最后能不能形成带引用的结构化结论。

**常见追问：**

- 如何保证结果可靠？
- 什么叫多源交叉验证？
- 这类系统为什么更需要人工审核点？

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**复杂检索与报告生成理解。

### Q10-7. 如何设计一个 Deep Research 系统？

Deep Research 的核心不是“查一次资料再总结”，而是“围绕复杂问题持续研究并形成结构化结论”。

一个比较完整的设计通常包括：

- 查询规划器：把复杂问题拆成子问题。
- 检索执行器：面向搜索、数据库、知识库做多源检索。
- 信息融合层：做去重、冲突检测、证据对齐和可信度加权。
- 迭代控制器：发现证据不足时继续补检，而不是一次性结束。
- 报告生成器：输出摘要、正文、引用和时间戳。

如果采用更工程化的表达方式，可以将其理解为一个研究型工作流：

- 前面是任务拆解和检索编排。
- 中间是多轮证据收集、去重、冲突处理。
- 后面是结构化报告生成和引用整理。

它和普通 RAG 最大的差异，是从“单轮问答”升级成“多轮研究流程”。所以设计重点不只是召回率，还包括规划质量、引用质量、可信度和过程可回放性。真正落地时，通常也更倾向于用 Workflow 或 LangGraph 这类显式编排方式来做，而不是把它完全交给一个黑盒对话 Agent。

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**复杂研究型系统的模块拆分能力。

### Q10-8. 如何设计 Python 代码解释器？

Python 代码解释器本质上是“模型生成代码 + 安全执行 + 回传结果”的闭环系统。

核心设计通常包括：

- 代码生成层：模型把用户需求转成 Python 代码。
- 沙箱执行层：隔离环境、白名单模块、超时限制、资源限制。
- 结果回传层：收集 stdout、stderr、文件产物、图表和返回值。
- 状态管理层：支持多轮执行时保留变量或工作目录。
- 安全治理层：禁止危险系统调用、网络访问和越权读写。

这类系统真正的难点不在“会不会运行 Python”，而在“如何既让它有执行能力，又不把宿主环境暴露出去”。

**常见追问：**

- 如果 Agent 需要执行系统命令或访问文件，你怎么防止它越权删除数据库、读取主机敏感文件？
- 除了白名单，你在宿主环境隔离上还会做哪些限制？

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**执行型智能体和安全沙箱设计。

**对应章节：**[17 Tools工具调用 §6、从课程案例走向真实项目](17-Tools工具调用.md#_6、从课程案例走向真实项目)；[21 Agent智能体 §5、实操与案例](21-Agent智能体.md#_5、实操与案例)

### Q10-9. 如何设计类 Manus 通用智能体？

这类系统不宜先强调“通用”，而应先回到 Agent 的最小骨架：**模型 + 工具集 + 运行循环 + 当前状态**。所谓类 Manus，本质上是把这四层能力扩展到更长任务链和更复杂任务空间中。

设计上通常要有：

- 任务理解与规划模块：把目标拆成可执行步骤。
- 工具调度模块：统一接搜索、浏览器、代码执行、文件系统等工具。
- 状态与记忆模块：维护任务上下文、待办和阶段成果。
- 执行与反思模块：根据中间结果继续执行、修正或重试。
- 安全与治理模块：权限控制、日志、失败恢复和人工接管。

这类系统和普通 Agent 的区别，不在于“工具更多”，而在于它需要长期推进任务、处理中间产物、管理复杂状态，并在较长链路里维持稳定性。因此，它更接近一个通用任务执行框架，而不是单轮问答机器人的放大版。

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**通用任务型 Agent 的系统拆分能力。

### Q10-10. 如何开发浏览器自动化 Agent？

浏览器自动化 Agent 的核心是把“看页面、理解页面、操作页面、校验结果”做成一个稳定闭环。

一个比较合理的设计通常包括：

- 页面感知层：拿到 DOM、截图、可交互元素信息。
- 决策层：根据目标决定点击、输入、滚动、等待还是回退。
- 执行层：调用浏览器自动化工具完成动作。
- 校验层：确认动作是否生效，页面是否进入预期状态。
- 治理层：超时、重试、幂等、防误操作和日志回放。

这类 Agent 最大的难点不在“会不会点按钮”，而在网页不稳定、异步加载、状态漂移和误操作成本高，所以一定要把验证和回滚意识做进去。

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**浏览器工具、任务规划和可靠性设计。

### Q10-11. 当 Agent 需要在真实或模拟环境中执行任务时，它和纯软件工具型 Agent 有什么本质区别？

最大的区别在于：软件型 Agent 主要在数字系统里操作，输入输出更结构化，可回放性也更强；而真实或模拟环境里的 Agent，面对的是感知噪声、状态不完备、实时反馈和物理世界副作用。

也就是说，纯软件工具型 Agent 更接近“调接口、读写数据、操作页面”，重点是权限、状态机和工具编排；真实环境 Agent 则多了感知、定位、动作执行和安全约束，很多时候不是“调用成功”就算完成，而是还要判断动作有没有真正生效、环境有没有变化、风险是否可控。

所以这类系统会更强调闭环感知、实时性、仿真验证、失败保护和人工接管。它本质上不是把工具再多接几个，而是把 Agent 从“信息处理系统”推进到了“感知-决策-行动闭环系统”。

**重要度：**`中频`（出现次数：1次） | **难度：**`较难`

**考察点：**对“软件型 Agent”和“行动型 / 具身环境 Agent”边界的理解。

---

## 11、项目表达与面试实战

### Q11-1. 面试官让你介绍一个做过的 RAG / Agent 项目，你应该怎么讲？

更稳的表达顺序是 `业务目标 -> 方案设计 -> 你负责的部分 -> 难点 -> 指标结果`。

不要一开始就报技术栈，而要先讲这个项目解决了什么业务问题，例如“降低客服查文档成本”或“让运营能自然语言查数”。然后再讲架构，比如用了 RAG、Tools、LangGraph 还是平台工作流。接着重点说你自己具体做了什么，比如索引策略、权限设计、工具接入、评测体系、成本优化。最后给出可量化结果，比如命中率、耗时、转人工率、人工节省时长。

如果希望表达更稳，可以采用适合应用岗的轻量 STAR 结构：

- 情境：业务问题和约束是什么。
- 任务：你负责哪一段，目标指标是什么。
- 行动：你具体做了哪些设计、排障、优化。
- 结果：最终指标、上线效果、复盘收获。

面试官在项目题里最常往下追的，通常不是“你用没用过某个框架”，而是这些方向：

- 你具体负责哪一层，别把团队成果全讲成自己做的。
- 遇到过哪些 badcase，最后怎么修。
- 为什么这么选型，而不是别的方案。
- 项目上线后效果怎么评估，问题怎么排查。

**常见追问：**

- 这个项目最难的点是什么？
- 你做过哪些 trade-off？
- 如果重做一次，你会怎么改？

**重要度：**`必刷`（出现次数：1次） | **难度：**`中等`

**考察点：**项目表达能力。

**对应章节：**[19 RAG检索增强生成 §3、RAG 综合案例：智能运维助手](19-RAG检索增强生成.md#_3、rag-综合案例：智能运维助手)；[21 Agent智能体 §5、实操与案例](21-Agent智能体.md#_5、实操与案例)

### Q11-2. 如果面试官问“你们为什么不用某个更热门的框架或模型”，怎么回答更稳？

回答重点不是证明“当前选择永远最对”，而是说明“当前选择和业务约束是匹配的”。

比较完整的回答可以按四层展开：

- 业务复杂度：当前问题到底需要单 Agent、Workflow，还是已经复杂到必须上 LangGraph / 多智能体。
- 工程约束：团队熟悉度、交付周期、可观测性、可维护性、迁移成本。
- 部署条件：是直接用在线模型，还是要接 OpenAI 兼容 API、本地模型、Ollama、Xinference 这类自建推理层。
- 成本与性能：延迟、吞吐、token 成本、模型版本稳定性、是否存在第三方版本漂移风险。

比如没选更重的多智能体框架，可能是因为当前任务用单 Agent 或 Workflow 已经够了；没选更大的模型，可能是因为延迟和成本不划算；没选某个托管平台，可能是因为我们更看重统一 OpenAI-compatible API、模型可控和私有化部署能力。

再往前走一步，还应该顺手体现两点：

- 你知道替代方案，不是没调研过。
- 你给当前方案留了迁移路径，不会把系统锁死。

**常见追问：**

- 如果未来需求变复杂，迁移路径是什么？
- 你们是如何做技术验证的？
- 如何避免技术选型锁死？
- 如果你的 MCP 是基于 Java 自研的，和成熟 Agent 框架相比，扩展性优势到底体现在哪？

**重要度：**`高频`（出现次数：1次） | **难度：**`中等`

**考察点：**技术判断和表达成熟度。

**对应章节：**[9 LangChain概述与架构 §2、LangChain 定位](9-LangChain概述与架构.md#_2、langchain-定位)；[7 企业级大模型部署 §1、企业级大模型部署概述](7-企业级大模型部署.md#_1、企业级大模型部署概述)

### Q11-3. 如果线上效果波动很大，你怎么向面试官展示你的排障能力？

最重要的是分层排查，并且给出清晰的证据链。

更规范的答法是：先确认是否存在输入分布变化，再看模型版本或 Prompt 是否变更，然后检查检索召回、工具调用、上下文组装、接口超时和日志链路。如果是 RAG，应抽样查看 query、召回片段和最终答案是否一致；如果是 Agent，则需要检查每一步工具调用和状态推进是否异常。最后再看是不是评测集失真或缓存污染。

这种回答比泛泛地说“调参数、优化 Prompt”更有说服力，因为它体现的是分层排障能力。

**常见追问：**

- 有没有遇到过偶发性错误？
- 如何做问题复现？
- 如何做一次有效复盘？
- 你会怎么判断问题主要来自模型幻觉，还是 RAG、Prompt、工具链路本身？

**重要度：**`中频`（出现次数：1次） | **难度：**`中等`

**考察点：**故障定位与复盘能力。

---

## 12、工具生态与岗位认知

### Q12-1. 你常用哪些 AI 开发工具？各自适合什么场景？

比较稳的答法，不是罗列名字，而是按场景分层。

通常可以分成几类：

- 通用对话与研究类：例如 `ChatGPT`、`Claude`、`Perplexity`，适合快速验证想法、梳理方案、写初稿、做资料总结。
- AI 编码协作类：例如 `Cursor`、`Claude Code`、`GitHub Copilot`，适合读代码、改代码、补测试、解释代码库结构，重点看它是更偏 IDE 内协作，还是更偏终端里的代码库级 Agent。
- 低代码 / 工作流平台类：例如 `Coze`、`Dify`，更适合业务快速验证、工作流编排、知识库接入和多人协作。
- RAG / 知识库平台类：例如 `RAGFlow`，更适合文档导入、解析、切块、检索和引用链路验证。

如果放到真实项目里，通常不会只选一种工具，而是按阶段组合使用。比如前期用通用对话工具梳理方案，用低代码平台做 POC，用 AI 编码工具接手核心链路实现，后面再把评测、部署和可观测性补齐。

如果需要一句更像面试现场的话，可以直接这样概括：方案梳理和资料总结常用 `ChatGPT`、`Claude` 这类通用工具；代码实现和仓库级修改更偏向 `Cursor`、`Claude Code`、`Copilot`；业务验证和工作流编排更常用 `Dify`、`Coze`；知识库链路验证则更适合 `RAGFlow` 这类平台。

这类问题真正考察的，不是“用过多少工具”，而是是否形成了自己的工具分层心智，知道不同工具各自解决什么问题。

**重要度：**`中频`（出现次数：1次） | **难度：**`基础`

**考察点：**工具生态认知，以及是否能按场景而不是按热度选工具。

**来源：**腾讯AI后台工程师一面（实际大厂面试题）

### Q12-2. Cursor、Claude Code、Copilot 这类 AI 编码工具的差异该怎么理解？

可以将它们理解为“都在帮助开发，但协作位置和交互方式不同”。

- Cursor 这类工具更偏 IDE 内协作，适合一边看代码、一边补全、局部改写、基于当前文件或工作区做编辑。
- Claude Code 这类工具更偏终端里的代码库级 Agent，适合跨文件理解、执行命令、改一组文件、做更完整的任务闭环。
- Copilot 这类工具更偏轻量级代码补全和编辑辅助，优势通常在低打断、嵌入现有编辑器工作流。

因此，不宜简单判断谁更强，而应回到任务类型本身。如果是“边写边补全、快速改一段代码”，IDE 内工具体验更顺；如果是“要理解整个代码库、跑命令、跨文件修改、完成一个更完整任务”，终端型 Agent 更有优势；如果团队已经有稳定 IDE 习惯，轻量补全类工具的接入成本也更低。

还可以补一句：工具能力会持续变化，所以真正稳定的判断标准不是名字，而是它对代码库上下文的理解深度、执行边界、可控性，以及是否契合团队工作流。

**重要度：**`中频`（出现次数：1次） | **难度：**`基础`

**考察点：**AI 编码工具的比较能力，以及是否有稳定的选型标准。

**来源：**腾讯AI后台工程师一面（实际大厂面试题）

### Q12-3. 如果让你总结“AI 应用工程师”和“算法研究岗”的差异，你会怎么说？

可以概括为，AI 应用工程师更关注“把模型能力稳定、安全、低成本地交付到业务系统中”，而算法研究岗更关注“如何改进模型本身的能力边界”。

前者的核心工作通常是技术选型、RAG / Agent 架构、工具和数据接入、工作流编排、评测、部署、监控和业务闭环；后者则更偏模型训练、微调策略、数据构造、算法实验和指标突破。两者会有交集，但能力重点不一样。

**重要度：**`低频`（出现次数：1次） | **难度：**`基础`

**考察点：**岗位认知是否准确。
