deepseek-recipe ≠ DeepInfer 引擎
协议层:转换 API 请求、渲染提示词、编码 token、解析输出。不做推理。调用方需提供推理后端、工具执行与 HTTP。
是 / 不是
| deepseek-recipe | DeepInfer | |
|---|---|---|
| 是 | 请求 → Conversation → 提示词 / token;输出 → Chat Completions / Responses / Messages | 高性能推理引擎(开源离线路径面向 V4.1-Flash) |
| 不是 | 不加载权重、不跑算子 | 不替代协议转换(请用 recipe 或自研胶水) |
| 调用方须提供 | 模型推理 + 工具执行 + HTTP 传输 | 已支持加速器 + 构建环境 |
| 许可证 | MIT | Apache-2.0 |
协议面
- 格式:Messages、Chat Completions、Responses — 流式与完整响应
- 提示词:DeepSeek V4 / V4.1 对话渲染 + tokenizer 编码
- 思考模式、reasoning effort、temperature、top_p、输出 token 上限
- 输出解析:推理内容、工具调用、JSON、停止序列
- 结构化输出:JSON Schema / regex(是否约束解码由调用方后端决定)
- 图像(V4.1):base64 或 URL;V4 将图像替换为
[Unsupported Image]
max_tokens 默认值
依据 recipe README:编码后若请求未设 max_tokens,由 ConversationRequest::resolve_max_tokens 补默认:
| 模式 | 默认 max_tokens |
|---|---|
| 非思考 | 8192 |
| 思考 | 65536 |
思考 + max effort | 131072 |
Python 安装
Python 3.10+:
python3 -m pip install deepseek-recipe
from deepseek_recipe import ChatCompletionRequest, ConversionOptions, DeepseekV41Encoding
request = ChatCompletionRequest({
"model": "DeepSeek-V4.1-Flash",
"messages": [{"role": "user", "content": "Hello"}],
})
converted = request.convert(ConversionOptions())
rendered = DeepseekV41Encoding().render_conversation(converted.conversation)
print(rendered.prompt)
Rust 安装
cargo add deepseek-recipe@0.2 deepseek-recipe-encoding@0.2 serde_json@1
源码构建与图像依赖见上游 development guide。演示:cargo run -p encoding-decoding-demo --locked → http://127.0.0.1:7778。
胶水说明
- 单独使用 recipe 不会下载 DeepInfer 权重,也不会启动引擎
- 可接 DeepInfer 离线、其他后端,或官方 API
- 智能体 / harness → dshbase.com
- 仓库内示例:
server-rs(Axum + mock)、server-py(FastAPI + mock)
API 三件套(Messages · Chat Completions · Responses)
依据 recipe README 与生产解读:共享一套 Conversation;适配器完成 Messages / Chat Completions / Responses 进出。控制特殊 token 按 ID 编码,用户文本里“长得像标签”的内容保持字面量,避免注入。流式解析用状态机跨 UTF-8 / DSML / 工具参数分片。
| 关注点 | recipe 负责 | 调用方仍要做 |
|---|---|---|
| 请求形态 | 三件套 → Conversation + 提示词 / tokens | HTTP 鉴权、限流 |
| 注入安全 | 特殊 token 按 ID;用户文本无法注入控制符 | 不可信图片 URL 的目标过滤 |
| 流式 | 增量解析推理 / 正文 / 工具 | 后端提供的 token 流 |
| 工具 | 把工具调用事件落到协议帧 | 真正执行工具 |