跳到主要内容

98-Agent面试题精讲:原理篇

前言​

讲讲 Transformer 架构基本原理?Encoder 和 Decoder 是什么?​

我理解 Transformer 最核心的创新是 Self-Attention,让每个 token 都能直接和序列里任意其他位置建立联系,一次性并行计算,彻底解决了 RNN 顺序计算慢、长距离信息衰减的两个老问题。理解 Encoder 和 Decoder 的区别时我用这个角度:Encoder 是双向的,每个词能同时看前后文,适合做「理解」类任务;Decoder 是单向的,只能看前面的词,天然适合「生成」任务。至于为什么现代大模型(GPT、Claude、Qwen)都选 Decoder-only,核心原因是「预测下一个 token」这个训练目标极其统一、可以直接在海量无标注文本上做自监督学习,规模越大涌现出的能力越强。

什么是大模型项目的分词器?原理是什么?​

我觉得面试被问到 Tokenizer,最重要的是先说清楚「为什么需要它」,模型只能处理整数,不认识字符串,Tokenizer 就是把文字转成数字 ID 序列的桥梁。至于原理,主流路线都是子词分词,常见实现有 BPE、SentencePiece / Unigram、WordPiece 等。BPE 的直觉是从小单元出发,反复把出现频率最高的相邻片段合并成新 token,最终形成一个几万到十几万规模的词汇表,既能控制大小又能处理新词。实际开发里要注意的是:API 按 token 计费而不是按字数,1000 个汉字大概对应 1000-1500 个 token,但具体比例和模型 tokenizer 强相关,估算成本和上下文窗口用量都要用真实 tokenizer 来算。

大模型是怎么训练出来的?​

大模型的参数:温度值、Top-P、Top-K 分别是什么?各个场景下的最佳设置是什么?​

我调这几个参数的经验是,Temperature 是最关键的,另外两个基本不用动。

Temperature 控制输出的随机性,越低越稳定可复现,越高越发散有创意;Top-P 是从累积概率达到 P 的候选词里采样,比 Top-K 更灵活自适应;Top-K 是固定从概率最高的 K 个词里选。

实践下来,代码生成或者精确问答我会把 Temperature 调到 0~0.2,创意写作调到 0.8~1.2,日常对话 0.5~0.7 就够了。Top-P 和 Top-K 保持默认就好,同时调多个参数反而互相干扰

KV Cache 是什么?Prompt Caching 的原理是什么?​

我理解 KV Cache 和 Prompt Caching 是同一个机制在两个时间尺度上的应用。

KV Cache 是「单次推理内」的优化。自回归生成时,每次生成新 token 都要让模型重新对前面所有 token 算 attention。如果每次都从零开始算,N 个 token 的总计算量是 O(N³),根本不可接受。KV Cache 把前面所有 token 的 K 和 V 矩阵缓存在 GPU 显存里,每次新 token 只算自己的 Q、K、V,然后跟缓存的 K/V 做 attention,把总计算量从 O(N³) 降到 O(N²)。

Prompt Caching 是「跨请求」的优化。把上面 KV Cache 的概念从「单次生成内」扩展到「不同请求之间」。如果两个请求的 Prompt 前缀完全相同(比如都用同样的 System Prompt),第一个请求算完的 KV Cache 在 API 服务器上保留下来,第二个请求遇到相同前缀直接跳过计算、复用已有 KV Cache,只算新增的部分。

价值上的区别:

  • KV Cache 解决的是「让自回归生成可行」,是 Transformer 推理的基本盘
  • Prompt Caching 解决的是「降低 API 成本和延迟」,是工程层面的 ROI 优化。不同厂商的计费规则不一样,比如 Claude 的缓存读取价格可以低到普通输入 token 的 10%,OpenAI 等平台也有自己的缓存折扣;延迟收益也和前缀长度、命中率、服务端负载有关,不能死记一个固定比例

最关键的认知是,Prompt Caching 不是新发明,是 KV Cache 这个底层机制的工程级延伸。理解了 KV Cache,Prompt Caching 几乎是自然推论。

实际工程使用 Prompt Caching 的核心要点是:固定内容在前、动态内容在后,前缀只要差一个字符就缓存 miss。

如何写好 Prompt?分享下 Prompt 工程实践经验?​

我在实际做项目时踩过不少坑,发现 Prompt 写不好通常不是因为太短,而是因为「模糊」,模型根本不知道你想要什么格式、什么风格、给谁看的。后来总结下来,写好 Prompt 核心就是做好五件事:给模型设定角色、说清楚任务、交代背景上下文、约定输出格式、提供示例。其中格式约束是最容易忽略、但对程序解析影响最大的。而且 Prompt 不是写完就完了,我们项目里一定要建测试集、每次改动都跑一遍,才知道改好了还是改坏了。

什么是 CoT?为啥效果好?它有什么缺点或局限性?​

CoT 我第一次用是在做一个需要多步逻辑推理的任务,发现只要让模型先分步分析,效果提升就很明显。后来理解了为什么:模型是一个 token 一个 token 生成的,让它先组织中间步骤,等于给了它「草稿纸」,后面生成答案时能利用前面的推理上下文,自然出错就少了。缺点也很实际,消耗的 token 会多很多,延迟和成本都上去了,而且推理链本身也可能出错、错误还会累积传导。所以我的经验是:对需要多步推理的任务用 CoT,简单问答直接回答就好;对外产品里不一定展示完整 CoT,展示简要理由或核查步骤通常更合适

MoE 混合专家模型是什么?DeepSeek V3、Qwen 为什么用 MoE?​

我理解 MoE(Mixture of Experts,混合专家模型)的核心思想是把传统 Transformer 中的 FFN(前馈网络)层替换成 N 个并行的「专家网络」,再加一个 Router 来决定每个 token 进哪个专家。

核心设计哲学是「总参数大,但激活参数小」。比如 DeepSeek V3 总参数 671B,但每个 token 推理时只激活 37B(约 1/18)。这样能用「总参数 671B 的知识量」+「激活参数 37B 的推理成本」,达到 Dense 模型做不到的「学得多 + 跑得快」。

具体看 MoE 三个核心组件。

1. 多个专家(Experts):把 Transformer 每层的 FFN 复制 N 份(典型 N=8、64、256),每份就是一个独立的「专家」,在训练中各自学到不同的「擅长方向」(语言、代码、数学、知识等)

2. Router(路由器):每个 token 进到 MoE 层时,Router 算一个「专家偏好分数」,决定这个 token 该去哪个专家。最常见的是 Top-K 路由(K=1 或 K=2),DeepSeek V3 是 Top-8 + 1 个共享专家

3. 负载均衡:训练时要加辅助损失防止「专家不平衡」(Router 偏爱某几个专家,其他专家没被训过),保证所有专家都在学

为什么 DeepSeek V3、Mixtral、部分 Qwen 模型都在用 MoE?

  • 训练性价比高:同样算力下训出来的 MoE 模型,效果接近一个大 Dense 模型,但参数总量是 Dense 的 5-20 倍
  • 推理成本可控:每个 token 只用一小部分参数,推理速度和小 Dense 模型相当
  • 可扩展性强:要增加模型容量,加专家数比加层数容易

但 MoE 也有挑战:训练难度高(专家不平衡、Router 训不稳、并行化复杂);显存占用高(虽然激活只用 37B,但所有专家的参数都要加载到显存,671B 全量);推理时通信开销(分布式部署时专家分散在多张 GPU,token 路由有跨卡通信)。

MoE 是 2024-2026 年大模型最重要的架构方向之一,DeepSeek V3、DeepSeek R1、Mixtral、Grok、部分 Qwen MoE 模型都用了这条路线。但它不是唯一答案,很多主力 Dense 模型依然在生产里很常见,尤其是中小规模和部署稳定性优先的场景

对比使用过哪些主流大模型?你们项目中最终选用了哪个模型?为什么?​

在项目选型阶段,我会先把模型分成两类:一类是国内可落地的生产候选,比如 DeepSeek、Qwen、豆包这类模型;另一类是海外能力标杆,比如 GPT-5.5 / o 系列、Claude Sonnet / Opus 系列,用来做能力上限参照。

如果是面向国内企业用户的 Agentic RAG 系统,我倾向于把国内模型作为主链路候选,海外模型只做离线评测或非敏感场景兜底。原因不是海外模型不好,而是企业项目里合规、网络稳定性、成本预算、售后支持这些约束会直接决定方案能不能上线。

最终落地时,我不会死磕一个模型,而是用 Model Routing(模型路由):格式要求严格、Tool Use 多的节点优先选指令遵循和结构化输出稳定的模型;高频推理、数据清洗、摘要归纳这类节点优先选性价比高的模型;特别难的问题再路由给能力更强但更贵的模型。选模型从来不是看谁跑分最高,而是看谁最契合业务的合规、成本、延迟与能力特征。