ESC
开源 2 分钟阅读

DeepSeek 开源 deepseek-recipe:统一转换多格式 API 请求的 Rust/Python 工具库,支持 V4.1 模型

deepseek-recipe 是一套 Rust 库与 Python 绑定,可将 Messages、Chat Completions、Responses 等不同格式的 API 请求统一转换为 Conversation 格式,编码为 DeepSeek V4/V4.1 模型的 prompt,并解析模型输出。项目支持文本、图像、思维链、工具调用与流式响应,采用 MIT 许可证开源,帮助开发者快速搭建兼容

来源:GitHub

DeepSeek

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

打开 http://127.0.0.1:7778。

更多示例

Rust 和 Python 均支持将模型输出转换为流式响应。参见流式响应。要将对话编码为 token ID 或解码后端 token ID,参见配合 tokenizer 使用。

包与示例项目

包用途
deepseek-recipe协议转换与模型输出解析。
deepseek-recipe-core共享的对话、消息、图像和工具类型。
deepseek-recipe-encodingDeepSeek V4 和 V4.1 prompt 渲染与 token 编码。
deepseek-recipe-image图像获取与预处理。
deepseek-recipe-pythonPython 绑定,导入名为 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。