Appearance
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端点,标准端点不支持此接口。
请求体参数
必填参数
| 参数 | 类型 | 说明 |
|---|---|---|
model | string | 模型 ID,如 deepseek-v4-pro |
prompt | string | 补全的前缀内容(代码开头部分) |
可选参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
suffix | string | — | 补全内容的后缀(代码结尾部分)。不传则退化为普通前缀补全 |
max_tokens | integer | — | 最大输出 token 数。FIM 场景最大 4096 |
temperature | number | 1 | 采样温度 [0, 2] |
top_p | number | 1 | 核采样参数 (0, 1] |
frequency_penalty | number | 0 | 范围 [-2, 2],降低重复内容概率 |
presence_penalty | number | 0 | 范围 [-2, 2],鼓励探讨新内容 |
stop | string | string[] | — | 遇到指定字符串时停止生成 |
stream | boolean | false | 启用流式 SSE 输出 |
stream_options | object | — | {include_usage: true} 流末输出 token 用量 |
echo | boolean | false | true 时响应中包含 prompt 内容 |
logprobs | integer | — | 返回 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/completions的prefix: true功能对比:FIM 可同时提供前后文,更适合 IDE 代码补全;前缀续写(Chat)更适合对话场景的格式控制
常见问题
Q: Continue 插件能用这个接口做 Tab 补全吗?
A: 可以。Continue 支持配置 DeepSeek FIM 端点,参考 Continue 文档中的 FIM provider 配置。
Q: 为什么补全结果有时会生成后缀已有的内容?
A: 模型对 FIM 的理解依赖提示词质量。确保 suffix 以换行符或明确的代码边界开始,帮助模型理解"从哪里结束"。