Skip to Content

FIM 代码补全

FIM(Fill In the Middle,中间填充)是一种代码补全技术,允许你提供代码的前缀和后缀,由模型生成中间缺失的部分。这在 IDE 代码补全、代码片段生成等场景中非常实用。

应用场景

  • 代码自动补全:在光标位置根据上下文生成代码
  • 函数体补全:给定函数签名和调用处,生成函数实现
  • 代码重构:在已有代码结构中填充新的逻辑

支持的模型

  • gpt-4o-mini
  • deepseek-ai/DeepSeek-V2.5
  • 更多模型请查看 模型列表 

方式一:Chat Completions 接口

通过 extra_body 传入 prefixsuffix 参数:

from openai import OpenAI client = OpenAI( api_key="<ACCELE_AI_API_KEY>", base_url="https://api.acceleai.cn/v1" ) response = client.chat.completions.create( model="deepseek-ai/DeepSeek-V2.5", messages=[ { "role": "user", "content": "请补全以下函数" } ], extra_body={ "prefix": """def calculate_sum(numbers: list[int]) -> int: \"\"\"计算列表中所有数字的和\"\"\" """, "suffix": """ result = calculate_sum([1, 2, 3, 4, 5]) print(f"结果: {result}") """ }, stream=True, max_tokens=256 ) for chunk in response: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True)

方式二:Completions 接口

直接使用 prompt(前缀)和 suffix 参数:

from openai import OpenAI client = OpenAI( api_key="<ACCELE_AI_API_KEY>", base_url="https://api.acceleai.cn/v1" ) response = client.completions.create( model="deepseek-ai/DeepSeek-V2.5", prompt="""def quicksort(arr: list) -> list: \"\"\"快速排序算法实现\"\"\" """, suffix=""" # 测试 test_array = [3, 6, 8, 10, 1, 2, 1] sorted_array = quicksort(test_array) print(sorted_array) """, stream=True, max_tokens=256 ) for chunk in response: if chunk.choices[0].text: print(chunk.choices[0].text, end="", flush=True)

使用建议

  • 提供充分的上下文:前缀和后缀应包含足够的代码上下文,帮助模型理解你期望生成的内容
  • 控制生成长度:合理设置 max_tokens,避免生成过多或过少的代码
  • 流式输出:推荐启用 stream=True,在 IDE 场景中可以逐步展示补全结果
  • 选择合适的模型:代码补全任务推荐使用 DeepSeek 系列等专长于代码的模型