Context 管理:从 DeepSeek 全链路到中小企业五步流水线

上下文不只是 messages。本文先串 DeepSeek 级「Query → 回复」全链路,再降维成中小企业可落地的「意图 → 路由 → 拼装 → 生成」五步流水线。

上下文包含什么

  • 用户与 AI 的完整对话历史(可压缩、滑动窗口、摘要)
  • 用户个人偏好、性格特征、情感状态(长期记忆)
  • 之前的决策、承诺或未完成任务
  • 外部知识或记忆片段(如过往聊天摘要)

DeepSeek Context 管理全链路

前提:Decoder-only 架构 + KV Cache,加速新 Query 计算。

第一站:入口预处理(CPU,约 1~5ms)

  1. 文本归一化:清洗不可见字符,统一全半角
  2. Tokenization:BPE 分词成 ID 序列
  3. 横向拼接[System_Prompt] + [长期记忆事实] + [历史对话截断] + [当前 Query](此时只拼 ID)
  4. 位置索引生成:序列位置 0…N

输出:(Token_IDs, Position_IDs) 拷到 GPU。

第二站:GPU 输入投影(Embedding)

  1. 词向量查表
  2. 位置编码注入(如 RoPE)

输出:带位置信息的初始向量,进入第一层 Decoder。

第三站:并行双路召回(核心分水岭)

路径 A — KV Cache:新 Q 读历史 K/V,毫秒级做注意力,得到「基于历史的语义融合向量」。

路径 B — 外部检索:Query 经小 Embedding 模型,去长期记忆向量库捞 Top-K 相关切片(聊天摘要、个人偏好等)。

第四站:上下文组装与压缩(约 50~150ms)

  1. 相关性裁决:低分丢弃;中等则摘要小模型压成短句
  2. 最终拼接:按「System > 长期偏好 > 历史相关 > 当前指令」优先级组装;可能从百万级上下文压到数万 token

第五站:核心推理(约 1~3s)

  1. MoE 稀疏激活相关专家 + 滑动窗口注意力 → 首个候选 Token 概率分布

第六站:投机采样加速

  1. 草稿小模型快速写出 5~10 个 Token
  2. 大模型批量验证
  3. 错丢对留,循环至结束

第七站:流式返回

  1. 增量传输,首 Token 即开始推流

DeepSeek 这套基建是「F1 赛车」;中小企业更适合「手动挡皮卡」——开源小模型 + 普通 CPU,搭一套 70 分够用的 Context 管理。

中小企业实用级:上下文管理五步

第 0 步:工具箱

组件建议
基础 LLMQwen2.5-7B / Llama-3-8B(Ollama、vLLM 或 API)
小模型 A(意图)BERT-base-chinese 微调分类器(CPU 可跑)
小模型 B(检索)BGE-M3
存储Redis(最近 10 轮)+ ChromaDB / SQLite 向量插件

第一步:意图识别与粗分类

Query 先喂 BERT,判「闲聊 / 知识问答 / 任务执行」,约 20ms,成本接近 0。输出如 {intent: "task"}

第二步:轻量级路由(if-else)

  • 闲聊 → 基础 LLM + 最近 2 轮
  • 知识问答 → 触发检索
  • 任务执行 → 最近 5 轮 + 系统指令

关键思想:算力很贵,重任务才带长上下文

第三步:手工 Context 拼接

无 KV Cache 复用时,在 CPU 侧拼文本:

  • 短期记忆(Redis):只保留最近 10 轮
  • 长期记忆(ChromaDB):BGE-M3 向量检索 Top-3
  • 最终拼装
1
2
3
4
5
6
context = f"""
[系统指令] 你是一个助手...
[长期记忆] {retrieved_docs}
[近期对话] {redis_history[-5:]}
[用户当前问题] {current_query}
"""

第四步:调用基础 LLM

拼好的 context 作为 Prompt 调用 7B。无投机采样时可用 SSE 流式提升首字感知速度。

第五步:输出自检与格式化

正则或轻量 NER 收尾;事实类可接外部 API 校验,抑制幻觉。

架构差距对照

DeepSeek中小企业替代差距
KV Cache 显存复用Redis 存最近 10 轮纯文本,每次重拼慢约 30%,省大显卡
MoE 稀疏路由7B + BERT 意图分流深度差,日常够用
投机采样仅 SSE 流式首字快、总时长慢 2~3 倍
RAG 长历史库ChromaDB + BGE功能同,并发小
Chunk / 摘要压缩每 5 轮异步总结写入向量库多几步调用,逻辑可控

落地三句半

  1. 放弃复用,拥抱拼接:历史当文本存库,每次重拼 Prompt,好调试。
  2. 7B 当主力,BERT 当门卫:大模型只生成,小模型做判断。
  3. 定期压缩别贪多:超长对话总结成摘要进向量库,省掉大部分上下文长度。

跑通后,业务量上来只需把 7B 换成更强 API、Chroma 换成 Milvus——异步检索 + 拼装 Prompt 的骨架不用改。