什么是 FIM
FIM(Fill-in-the-Middle,中间填充)是一种特殊的补全模式。传统的文本生成只能从左到右续写,而 FIM 可以让模型根据「上文」和「下文」来填充「中间」缺失的部分。这在代码补全场景中极为实用——你写了函数签名的前半部分和后半部分,模型帮你补全中间的实现。
FIM 补全 API
DeepSeek V4 Flash 和 Pro 均支持 FIM 补全(仅限非思考模式):
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ.get('DEEPSEEK_API_KEY'),
base_url='https://api.deepseek.com'
)
response = client.completions.create(
model='deepseek-v4-flash',
prompt='def fibonacci(n):\n if n <= 1:\n return n',
suffix='\n\n# 测试\nprint(fibonacci(10))',
max_tokens=256,
temperature=0,
stop=['\n\n#']
)
print(response.choices[0].text)
# 输出:
# return fibonacci(n-1) + fibonacci(n-2)Prompt 设计最佳实践
| 策略 | 示例 | 效果 |
|---|---|---|
| 函数签名提示 | 上文=函数签名+docstring,下文=return语句 | 补全函数体实现 |
| 测试驱动 | 上文=函数定义,下文=测试用例 | 生成满足测试的代码 |
| 注释驱动 | 上文=注释描述,下文=类型标注 | 按注释生成代码 |
集成到编辑器
VS Code(通过 Continue 插件):配置 tabAutocompleteModel 指向 DeepSeek 即可启用 FIM 补全。
Neovim(通过 llm.nvim):配置 fim 端点指向 DeepSeek completions API。
FIM 与 Chat API 对比
| FIM 补全 | Chat 补全 | |
|---|---|---|
| 接口 | /v1/completions | /v1/chat/completions |
| 上下文 | 上文 + 下文 | 仅上文(对话历史) |
| 速度 | 更快(无对话开销) | 较慢 |
| 成本 | 更低(无系统消息) | 较高 |
| 适用 | 实时补全、内联建议 | 对话式编程、复杂问答 |
注意事项
- FIM 仅支持非思考模式,启用 thinking 时将报错
- suffix 参数为必填项(与标准 completions API 不同)
- stop 参数建议设置为下文的前几个字符,避免补全越界
- 目前为 Beta 功能,接口可能会有调整