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