正在刊行长文 · Essay
2026-10-18所有内容
随机比特 · Random Bits

为什么 DeepSeek 新模型突然删掉了 Jinja 模板?智能体时代的提示词早就不该用字符串拼接了

2026-10-18AI Engineering / Systemsrbits.uk
为什么 DeepSeek 新模型突然删掉了 Jinja 模板?智能体时代的提示词早就不该用字符串拼接了

将开源大模型接入本地推理集群时,最隐蔽的故障往往不抛任何报错。显存占用正常,接口状态码全是 200,但原本能连续修改十几个文件的编程智能体,升级模型权重后突然频繁中断任务。

顺着分词器输出的原始令牌流比对,病根才浮出水面。新协议将工具调用标签从无空格的 <|DSML|tool_calls> 改成了带前导空格的 <|DSML| calls>,旧版字符串模板漏掉了这一个空格;更致命的是,当智能体收到工具返回准备执行下一步时,静态模板将工具返回误判为新一轮提问,提前清空了前序步骤的 <think> 推理链。

在 DeepSeek-V4.1-Flash-1017 官方模型仓库中,研发团队正式删掉了 tokenizer_config.json 里的 Jinja 格式 chat_template 模板,改用独立 Python 编码器 encoding.py、测试集 test_encoding.py 与 Rust 编写的协议工具包 deepseek-recipe。伴随协议栈重构,模型在搭配 Claude Code 框架的 Terminal-Bench 4.0 评测中得分从 31.2 跃升至 42.3,超越 GPT-5.6 Sol 的 39.9;在 DeepSWE v1.1 上达到 77.0。

动态思维链与空白符压垮字符串模板

在单轮问答时代,读取 JSON 配置里的 Jinja 模板把消息循环拼成长字符串就够用了。但在多轮智能体协议下,提示词渲染高度依赖全局上下文状态。

常规长对话为了节省上下文开销,默认开启 drop_thinking 剥离已完成轮次的 <think> 推理块;但在多步工具调用中,中途剥离思考过程会让模型遗忘最初的排查计划。一旦会话挂载了工具声明,协议编码器会自动关闭历史思维链裁剪,防止多步工具编排中途遗忘前序推理状态。

同时,encoding.py 在渲染最前端部署了入口门卫校验。一旦输入混入 <|deepseek_image|> 内部占位符立即抛出 ValueError 终止编码,对 1 至 100 的连续整数推理预算(reasoning_effort)执行严格边界断言,并通过 <|action|> 与 <|read_url|> 单令牌指令在发起外部搜索或网页抓取前完成快速决断。

声明式模板盲目拼接与协议编码器有状态守护对比

纯函数流水线彻底解耦协议与推理层

新版 encoding.py 完全摒弃了对旧版 encoding_dsv4 的继承依赖,用四步首尾相接的纯函数流水线完成上下文转换:先将连续的 "tool" 消息折叠归并进前序 "user" 消息的 <tool_result> 块;再按前一条 "assistant" 消息的调用声明顺序重排异步返回的 <tool_result>;排定顺序后按遍历位置提取图像字节并替换为 <|deepseek_image|> 占位符;最后通过 namespace::name 隔离同名工具并渲染协议文本。

架构维度 声明式 Jinja 字符串模板 协议感知编码器管线(encoding.py / deepseek-recipe)
跨轮次思维链 静态一刀切,工具交互中途易误删 <think> 感知 tools 状态,挂载工具自动保留全量思维链
并发工具与多图 原样拼接,异步返回乱序导致图文错位 先归并工具块、再按声明序重排、最后按序提图
交付与边界校验 内嵌 JSON 脚本,漏空格无拦截 独立 Python 纯函数 + Rust deepseek-recipe 库

为支撑高并发生产环境,官方同步开源了 Rust 编写并提供 Python 绑定的 deepseek-recipe。将提示词编解码与流式解析独立封装为无状态协议库,才能把模型推理、工具沙箱执行与网络传输彻底解耦。

deepseek-ai/deepseek-recipe 官方仓库模块化目录结构

双向往返测试锁死智能体协议契约

Jinja 模板只有正向拼接、没有逆向校验,社区框架靠正则表达式抠取工具参数,遇到转义引号或流式截断极易产出残缺结构。

在 DeepSeek-V4.1-Flash-1017 随仓附带的 Python 测试集 test_encoding.py 中,协议不仅要通过黄金样本逐字节回归,还必须通过编码与解析双向往返测试。测试集将结构化消息送入 encode_messages 编码为 <|DSML| calls> 协议流,调用解析器逆向还原后再二次编码,两次产出的字节流必须 100% 重合;一旦残留控制令牌或混入无空格旧版标签,断言立即报错阻断。

encoding.py 四段正交预处理管线与双向往返契约测试架构

在长程智能体时代,提示词早已不是一段静态的文本模板,而是连接大模型推理内核与外部真实世界的核心通信协议。

随机比特公众号二维码
公众号 · 随机比特
从 AI 工具热闹里拆工程真相

写边界、控制面、上下文、成本与安全。