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 は変更される可能性があります。