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)

プロンプト設計のベストプラクティス

戦略効果
関数シグネチャのヒント前文=関数シグネチャ+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
コンテキスト前文 + 後文前文のみ(会話履歴)
速度より高速(会話オーバーヘッドなし)より低速
コストより低い(システムメッセージなし)より高い
適用リアルタイム補完、インライン提案対話型プログラミング、複雑な Q&A

注意事項

  • FIM は非思考モードのみサポートしており、thinking を有効にするとエラーになります。
  • suffix パラメータは必須です(標準の completions API とは異なります)。
  • stop パラメータは後文の最初の数文字に設定することをお勧めします。補完が範囲を超えないようにするためです。
  • 現在はベータ機能であり、API は変更される可能性があります。