牛客面经整理:百度 AI Agent 开发一面(提示词 / 单测生成 / Attention)(二十四)
收录日期:2026-04-27
关键词:AI、Agent、提示词工程、上下文、代码理解、AST、单元测试、评估、Transformer、Attention、长上下文
1. 项目深挖(怎么答更稳)
参考答案
- 先讲业务目标与指标(时延/成功率/成本/用户满意度),再讲链路(检索→规划→工具→校验→输出)。
- 强调你负责的模块:提示词、工具协议、评估集、观测与回滚策略。
- 准备 1 个失败案例:定位、修复与如何避免回归。
2. 提示词模板怎么设计与迭代?怎么判断“真的更好”?
参考答案
- 模板结构:角色/目标/约束/可用工具/输出 schema/示例(few-shot)/拒答规则。
- 迭代方法:
- 固定评测集(覆盖边界与高频场景),离线回归对比(成功率、格式正确率、幻觉率)。
- 在线 A/B(任务完成率、人工介入率、平均轮次、成本)。
- 关键:避免只靠“主观感觉”;把“好”拆成可量化指标。
3. 单 Agent 还是多 Agent?为什么这样设计?
参考答案
- 单 Agent:链路简单、成本低、调试容易;适合明确任务与较少工具调用。
- 多 Agent:分工明确(Planner/Executor/Verifier/Tool-specialist),更强但更贵、更难控(通信噪声、循环)。
- 取舍维度:可控性、可观测性、成本/时延、失败模式(是否容易发散)。
4. Agent 任务怎么拆分?粒度怎么决定?
参考答案
- 典型做法:目标 → 子目标 → 可执行步骤(每步能被工具/函数完成、可校验)。
- 粒度判断:
- 太粗:失败不可定位、重试代价大。
- 太细:轮次上升、上下文膨胀、成本增大。
- 常见策略:层级式计划(高层粗、执行细),结合预算(最大步数/最大成本)做 early stop。
5. 上下文怎么构建?如何避免过长/污染?
参考答案
- 构建:系统约束 + 用户目标 + 关键事实摘要 + 必要的历史对话 + 工具结果(结构化)+ 检索到的证据。
- 避免污染:
- 只注入与当前子任务强相关的信息(检索阈值、重排、去重)。
- 工具结果结构化(表/JSON),减少冗余自然语言。
- 定期“事实摘要”替代原始长对话(保留决策与约束)。
6. 上下文窗口不够时,优先保留哪些信息?为什么?
参考答案
- 第一优先:系统提示词(规则/安全/输出格式)与用户当前目标。
- 第二优先:已确认事实、关键约束、最新工具结果(能影响下一步决策的)。
- 第三优先:历史过程的摘要(而非原文),以及可回溯的引用 ID(便于再检索)。
7. 做代码理解时,AST/调用关系怎么用起来?
参考答案
- 用 AST 做结构化切片:函数边界、变量/类型、控制流关键节点,避免把整仓库塞进上下文。
- 用调用图做检索:从入口函数向外扩展依赖(限定深度/白名单),只拉取相关文件与符号。
- 组合:符号级 embedding(函数/类粒度)+ 语义检索 + rerank,提升相关性与稳定性。
8. 单测生成:哪些代码不适合生成单测?怎么识别与过滤?
参考答案
- 不适合:
- 强副作用(真实写库/发请求/依赖时间随机性)但缺乏注入点。
- 纯粘合层(简单转发/薄包装)价值低。
- 依赖复杂环境(浏览器/原生能力)且无可替代的模拟层。
- 识别与过滤:
- 规则:识别外部 I/O(DB/RPC/FS)、时间/随机、全局状态写入。
- 结构:是否可依赖注入、是否有纯函数边界、是否已有测试夹具。
9. 覆盖率高但测试质量差,怎么处理?
参考答案
- 常见坏味道:断言弱(只测“能跑通”)、过度 mock、对实现细节耦合、易 flaky。
- 改进:
- 强化断言(业务不变量、边界条件、错误分支)。
- 引入 mutation testing/故障注入思路,逼迫断言有效。
- 对外部依赖用稳定 fake/测试容器替代过度 mock。
10. mock 什么时候必须?什么时候会带来问题?
参考答案
- 必须:外部不可控依赖(RPC/第三方接口/邮件短信/支付)、高成本资源(大模型调用)做隔离。
- 有问题:把被测模块内部实现全 mock 掉,导致测试“只测 mock”;或 mock 行为与真实不一致引入虚假安全感。
- 建议:优先 stub/fake(更接近真实),在模块边界 mock。
11. 依赖数据库 + RPC 的函数,怎么让生成的单测稳定运行?
参考答案
- 依赖注入:把 DB/RPC 作为接口传入,测试替换为 fake 或本地服务。
- 环境隔离:用 Testcontainers/内存数据库(如 SQLite)或本地沙箱服务,确保可重复。
- 数据管理:固定种子数据、清理策略、避免并发污染。
12. 怎么评估单测质量?除了覆盖率还有哪些指标?
参考答案
- 质量指标:mutation score、缺陷检出率、flaky rate、运行耗时、断言密度与可读性(是否可维护)。
- 过程指标:失败定位时间、回归集覆盖关键路径的比例、重跑成本。
13. LLM 的输入是什么?模型真正“看到”的是什么?
参考答案
- 模型输入最终是 token 序列(ID),经 embedding 映射到向量空间。
- 注意力在向量上计算相似度与加权聚合;超过上下文长度会被截断或需要分段策略。
14. Self-Attention 的作用是什么?为什么要拆成 Q/K/V?
参考答案
- 作用:让每个 token 能“按需关注”其他 token,形成上下文相关的表示。
- Q/K/V 拆分:通过不同线性投影让“我在找什么”(Q)与“我是什么特征”(K/V)解耦,提升表达能力与可学习性。
15. 为什么需要 Multi-Head?为什么 Attention 是动态加权?
参考答案
- Multi-Head:在不同子空间并行关注不同关系(语法、指代、主题等),再拼接融合。
- 动态加权:权重随输入变化,对不同上下文选择不同信息来源,比静态卷积更灵活。
16. 同一个 token 的 Q/K/V 为什么不一样?
参考答案
- 因为 Q/K/V 是三套不同参数矩阵的线性投影结果;同一输入在不同“视角”下表示不同,用于匹配与聚合。
17. Attention 复杂度高,长上下文怎么优化?
参考答案
- 算法:稀疏/滑窗注意力、分块与近似注意力(降低
O(n^2))。 - 系统:KV cache、FlashAttention、张量并行、量化。
- 产品/工程:RAG 检索替代“全塞上下文”、摘要压缩、分阶段生成(先草稿后精修)。
18. 幻觉一般是什么原因?工程上怎么降低?
参考答案
- 原因:上下文缺失/歧义、训练偏差、过度采样、工具结果未被严格约束。
- 降低:
- RAG + 引用证据,工具结果结构化注入。
- 输出 schema 校验、规则/单测验证、反思/复核器(Verifier)。
- 对高风险动作加“确认门”(human-in-the-loop)与权限限制。