什么是 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 功能,接口可能会有调整