Skip to content

POST /completions 是 DeepSeek 的文本补全接口,主要用于 FIM(Fill in the Middle)场景——提供代码前缀(prompt)和后缀(suffix),让模型填写中间内容。这是 IDE 代码补全插件(如 Continue)的底层 API,需使用 /beta 端点,最大补全 4K token。

DeepSeek Completions API 参考

端点: POST https://api.deepseek.com/beta/completions

必须使用 /beta 端点,标准端点不支持此接口。

请求体参数

必填参数

参数类型说明
modelstring模型 ID,如 deepseek-v4-pro
promptstring补全的前缀内容(代码开头部分)

可选参数

参数类型默认值说明
suffixstring补全内容的后缀(代码结尾部分)。不传则退化为普通前缀补全
max_tokensinteger最大输出 token 数。FIM 场景最大 4096
temperaturenumber1采样温度 [0, 2]
top_pnumber1核采样参数 (0, 1]
frequency_penaltynumber0范围 [-2, 2],降低重复内容概率
presence_penaltynumber0范围 [-2, 2],鼓励探讨新内容
stopstring | string[]遇到指定字符串时停止生成
streambooleanfalse启用流式 SSE 输出
stream_optionsobject{include_usage: true} 流末输出 token 用量
echobooleanfalsetrue 时响应中包含 prompt 内容
logprobsinteger返回 token 对数概率,最大 20

响应体

json
{
  "id": "cmpl-...",
  "object": "text_completion",
  "created": 1718345013,
  "model": "deepseek-v4-pro",
  "system_fingerprint": "fp_...",
  "choices": [
    {
      "index": 0,
      "text": "    if a <= 1:\n        return a\n",
      "finish_reason": "stop",
      "logprobs": null
    }
  ],
  "usage": {
    "prompt_tokens": 20,
    "completion_tokens": 15,
    "total_tokens": 35,
    "prompt_cache_hit_tokens": 0,
    "prompt_cache_miss_tokens": 20
  }
}

注意:响应内容在 choices[0].text,不是 .message.content(这是 /chat/completions 的格式)。

代码示例

typescript
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.deepseek.com/beta",  // 必须 /beta
  apiKey: process.env.DEEPSEEK_API_KEY,
});

// FIM 代码中间填充
const response = await client.completions.create({
  model: "deepseek-v4-pro",
  prompt: "def fib(a):\n",              // 前缀
  suffix: "\n    return fib(a-1) + fib(a-2)",  // 后缀
  max_tokens: 128,
});

console.log(response.choices[0].text);
// 输出:中间的函数体逻辑(如基础情况判断)
python
from openai import OpenAI

client = OpenAI(
    api_key="<your api key>",
    base_url="https://api.deepseek.com/beta",
)

response = client.completions.create(
    model="deepseek-v4-pro",
    prompt="def fib(a):\n",
    suffix="\n    return fib(a-1) + fib(a-2)",
    max_tokens=128,
)
print(response.choices[0].text)

注意事项

  • FIM 接口不支持思考模式
  • suffix 是可选的:不传则变为普通的前缀续写补全
  • 最大补全长度为 4096 token,对函数级别补全足够
  • /chat/completionsprefix: true 功能对比:FIM 可同时提供前后文,更适合 IDE 代码补全;前缀续写(Chat)更适合对话场景的格式控制

常见问题

Q: Continue 插件能用这个接口做 Tab 补全吗?

A: 可以。Continue 支持配置 DeepSeek FIM 端点,参考 Continue 文档中的 FIM provider 配置。

Q: 为什么补全结果有时会生成后缀已有的内容?

A: 模型对 FIM 的理解依赖提示词质量。确保 suffix 以换行符或明确的代码边界开始,帮助模型理解"从哪里结束"。