Skip to content

FIM(Fill in the Middle)补全允许你提供代码前缀(prompt)和后缀(suffix),模型生成中间的内容。通过 /completions 接口(非 chat)调用,需使用 /beta 端点,最大补全 4K token。

DeepSeek API FIM 补全(Beta)

此功能为 Beta 版本,需使用 Beta 端点:https://api.deepseek.com/beta
使用 /completions 接口(非 /chat/completions

什么是 FIM

FIM(Fill in the Middle):给模型开头和结尾,让它填补中间。这是 IDE 代码补全功能(如 Copilot 的 Tab 补全)的底层原理。

def fib(a):
    [模型填这里]
    return fib(a-1) + fib(a-2)

基本用法

typescript
import OpenAI from "openai";

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

// 注意:用 client.completions,不是 client.chat.completions
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 版本:

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)

实际应用示例

函数体补全:

typescript
const response = await client.completions.create({
  model: "deepseek-v4-pro",
  prompt: `function debounce(fn: Function, delay: number) {\n`,
  suffix: `\n  return debounced;\n}`,
  max_tokens: 200,
});

注释补全:

typescript
const response = await client.completions.create({
  model: "deepseek-v4-pro",
  prompt: `// 计算两个日期之间的工作日数量\n// `,
  suffix: `\nfunction countWorkdays(start: Date, end: Date): number {`,
  max_tokens: 100,
});

注意事项

项目说明
接口/completions(不是 /chat/completions
端点必须用 https://api.deepseek.com/beta
最大补全4K token
suffix 是可选的不传 suffix 则退化为普通前缀补全
仅非思考模式FIM 不支持思考模式

FIM vs 对话前缀续写

FIM对话前缀续写
接口/completions/chat/completions
上下文前缀 + 后缀对话历史 + 前缀
适用场景代码补全插件对话中控制输出格式
思考模式❌ 不支持✅ 支持

常见问题

Q: Continue 插件支持 FIM 吗?

A: 支持,Continue 插件可以直接配置 DeepSeek FIM 端点用于代码补全,在 IDE 中实现 Tab 补全效果。

Q: max_tokens 4K 够用吗?

A: 对于函数级别的补全(几十到几百行代码)基本够用。如果需要补全整个文件或大模块,建议拆分成更小的补全单元。