一、面试万能开场句
Token 优化的核心目标:在不影响效果的前提下,减少输入/输出 Token 消耗,降低成本、提升速度、避免上下文溢出。
二、Token 优化全方案(面试背诵版)
1. RAG 阶段优化(最有效、最常用)
(1)控制召回数量
- 默认召回 5~10 片,只保留最相关 2~4 片
- 相关性低的片段直接丢弃,减少大量噪声
(2)优化分块大小
- Chunk 不要过大:512~1024 token 最合适
- 避免超大段文本塞进 Prompt
(3)加 Reranker 重排模型
- 先用向量库粗召回 10~20 条
- 再用轻量 Reranker 精排,只取 top2~3
效果:片段更精准,数量更少,Token 大幅下降
(4)Hybrid Search 混合检索
- 向量检索 + BM25 关键词检索结合
- 减少不相关长文本进入上下文
(5)片段内容精简
- 去掉无意义符号、空格、换行
- 去掉重复段落、冗余说明
- 结构化内容优先(表格→精简文本)
2. Prompt 层面优化(立竿见影)
(1)精简 System Prompt
- 去掉废话、重复要求、过长示例
- 保留核心规则:角色、约束、输出格式
(2)少用或少给 Few-shot 示例
- 示例非常占 Token
- 能用 1 个就不用 3 个
- 复杂场景改用指令描述代替示例
(3)禁止模型输出废话
- 强制要求:简洁回答、不重复、不解释、不加客套话
- 减少输出 Token(输出也计费)
(4)历史对话窗口截断
- 只保留最近 N 轮对话(如 3~5 轮)
- 旧历史用 Summary 摘要 代替原始对话
- 原始 10 轮 → 摘要后 1 轮
- Token 直接省 70%+
3. 模型调用策略优化
(1)选择合适窗口大小的模型
- 简单问答:用小窗口(4k/8k)
- 长文档:用 16k/32k,不要无脑上 128k
(2)关闭不必要的流式标记/思考过程
- 有些模型会输出大量思考内容(CoT)
- 生产环境可关闭,只保留最终答案
(3)设置 max_tokens 合理上限
- 避免模型疯狂输出长文本
- 根据业务设置:问答 512,总结 1024 等
(4)缓存重复请求
- 相同或高度相似问题直接走缓存
- 不调用模型,Token 消耗为 0
- 用 Redis 缓存:问题哈希 → 答案
4. 结构化与格式优化
(1)用结构化输出代替自然语言
- JSON/XML 结构明确,模型不会乱扩展
- 用 FunctionCall / ToolCall 强制结构,减少冗余
(2)去掉富文本、markdown 冗余
- 不需要就禁用
## ** -等格式符号 - 纯文本最省 Token
(3)关键词缩写/统一指代
- 长专有名词统一缩写
- 避免全文重复出现
5. 高级优化(面试加分,体现深度)
(1)Query 改写 / 问题浓缩
- 把用户口语化长问题 → 精简专业问题
- 减少检索与模型输入的冗余
(2)多级检索:先粗筛再精筛
- 第一层:库/目录级过滤
- 第二层:章节过滤
- 第三层:最终片段召回
进入 Prompt 的内容更少更准
(3)动态上下文长度
- 简单问题:小窗口
- 复杂问题:开大窗口
- 避免固定大窗口浪费 Token
(4)使用长上下文压缩技术
- 总结式压缩
- 关键信息抽取
- 句子权重过滤(保留高权重句子)
三、面试最标准流畅回答(直接背)
面试官问:怎么优化 Token 消耗?
你回答:
Token 优化主要从 RAG、Prompt、模型调用和架构四个方面入手。
- RAG 优化:控制召回片段数量,用 Reranker 精排只保留最相关内容,合理设置分块大小,精简文档内容,减少噪声。
- Prompt 优化:精简系统提示,减少或少用示例,对历史对话做窗口截断和摘要,避免长上下文堆积。
- 模型调用优化:选择合适窗口大小的模型,设置合理输出长度,缓存重复问题,避免无效调用。
- 结构化优化 :使用强制结构化输出,关闭多余格式,对长文本做摘要压缩。
最终目标是在保证效果的前提下,减少输入输出 Token,降低成本、提升响应速度、避免上下文溢出。
四、高频追问:怎么判断哪些内容该删、哪些该留?
回答:
- 保留高相关性、高信息密度句子
- 删掉重复、低相关、格式化冗余、无意义填充
- 用 Reranker 打分,低于阈值直接丢弃
- 历史对话只保留影响当前问题的核心信息