deepseek-recipe
English | 中文
deepseek-recipe 是一组 Rust 库和 Python 绑定,可将不同格式的 API 请求统一转换为 Conversation 格式,编码为 DeepSeek 模型的 prompt,并将模型输出转换为相应格式的响应。使用这些组件可将推理后端接入支持多种格式的 API 服务。模型推理、工具执行和 HTTP 传输需在外部提供。
快速开始 · 流式响应 · 配合 tokenizer 使用 · 许可证
支持范围
- 请求/响应格式: 支持 Messages、Chat Completions 和 Responses 请求的转换、流式响应及完整响应。支持文本、图像、思维(thinking)和客户端工具调用。
- Prompts: 将 DeepSeek V4 和 V4.1 对话编码为 prompt 或 token ID。
- 生成设置: 思考模式、推理力度(reasoning effort)、
temperature、top_p和输出 token 上限。 - 输出解析: 思维内容、工具调用、JSON 对象输出和停止序列。
- 图像: 以 base64 或外部 URL 提供。图像组件提供基于 OpenCV 的 DeepSeek V4.1 预处理。
- 工具定义: 函数工具;Responses API 还支持工具命名空间和
apply_patch自定义工具。
尚不支持
- Token 概率(
logprobs和top_logprobs)。 - 文档内容、音频/视频输入以及通过
file_id检索文件。 - 服务端工具执行,如
web_search。 - JSON Schema 和正则表达式输出约束,或工具
strict设置的强制执行。 - 每个 Chat Completions 请求返回多个补全(
n > 1)。 apply_patch以外的 Responses 自定义工具定义。- Responses 会话存储及通过
previous_response_id检索上下文。 - Responses 加密思维内容(
encrypted_content)。
使用 deepseek-recipe
将 Chat Completions 请求转换为 DeepSeek V4.1 prompt:
Python
安装
Python 3.10+:
python3 -m pip install deepseek-recipe
示例
from deepseek_recipe import ChatCompletionRequest, ConversionOptions, DeepseekV41Encoding
request = ChatCompletionRequest({
"model": "deepseek-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.1 deepseek-recipe-encoding@0.1
源码构建和图像依赖请参阅开发指南。
示例
use deepseek_recipe::openai::ChatCompletionRequest;
use deepseek_recipe::request::{ConversionOptions, ProtocolRequest};
use deepseek_recipe_encoding::PromptEncoding;
use deepseek_recipe_encoding::v4::dsv41::DeepseekV41Encoding;
use serde_json::json;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let request: ChatCompletionRequest = serde_json::from_value(json!({
"model": "deepseek-flash",
"messages": [{"role": "user", "content": "Hello"}],
}))?;
let converted = request.convert(ConversionOptions::default())?;
let rendered = DeepseekV41Encoding::new().render_conversation(&converted.conversation);
println!("{}", rendered.prompt);
Ok(())
}
编码与解码演示
在仓库根目录运行编码与解码演示:
cargo run -p encoding-decoding-demo --locked
更多示例
Rust 和 Python 均支持将模型输出转换为流式响应。参见流式响应。要将对话编码为 token ID 或解码后端 token ID,参见配合 tokenizer 使用。
包与示例项目
| 包 | 用途 |
|---|---|
deepseek-recipe | 协议转换与模型输出解析。 |
deepseek-recipe-core | 共享的对话、消息、图像和工具类型。 |
deepseek-recipe-encoding | DeepSeek V4 和 V4.1 prompt 渲染与 token 编码。 |
deepseek-recipe-image | 图像获取与预处理。 |
deepseek-recipe-python | Python 绑定,导入名为 deepseek_recipe。 |
| encoding-decoding-demo | 一个 Web 界面,用于编码 prompt、检查特殊 token,并将完整模型输出解码为 Chat Completions、Responses 或 Messages。 |
| server-rs | 带 mock 推理的 Axum API 示例。 |
| server-py | 带 mock 推理的 FastAPI 示例。 |
许可证
项目代码和公开文档基于 MIT 许可证授权。捆绑 tokenizer 的相关声明见 static/tokenizers/README.md。