FIM 代码补全
FIM(Fill In the Middle,中间填充)是一种代码补全技术,允许你提供代码的前缀和后缀,由模型生成中间缺失的部分。这在 IDE 代码补全、代码片段生成等场景中非常实用。
应用场景
- 代码自动补全:在光标位置根据上下文生成代码
- 函数体补全:给定函数签名和调用处,生成函数实现
- 代码重构:在已有代码结构中填充新的逻辑
支持的模型
gpt-4o-minideepseek-ai/DeepSeek-V2.5- 更多模型请查看 模型列表
方式一:Chat Completions 接口
通过 extra_body 传入 prefix 和 suffix 参数:
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 系列等专长于代码的模型