DeepSeek 代码补全可用 FIM(Fill In the Middle)接口:把光标前内容放进 prompt,把光标后内容放进可选的 suffix,模型返回应插入中间的文本。官方将它标为 Beta,因此要使用 Beta 地址,并为接口变更和补全错误准备回退。
准备 SDK 和 Beta 地址
安装 OpenAI Python SDK,把 Key 存在 DEEPSEEK_API_KEY 环境变量。官方FIM 指南要求使用 https://api.deepseek.com/beta,并说明 FIM 可用于内容与代码补全;最大输出限制以当前页面为准。完整参数可参考Completion 接口。

import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com/beta",
)
prefix = """def clamp(value, low, high):
\"\"\"把 value 限制在 low 和 high 之间。\"\"\"
"""
suffix = """
assert clamp(5, 0, 10) == 5
assert clamp(-2, 0, 10) == 0
assert clamp(12, 0, 10) == 10
"""
response = client.completions.create(
model="deepseek-flash",
prompt=prefix,
suffix=suffix,
max_tokens=128,
)
middle = response.choices[0].text
print(prefix + middle + suffix)
模型名应以当前官方文档和账号实际可用列表为准。不要把示例 Key、完整私有代码或生产配置提交给模型。
前缀和后缀怎样切才稳定
- 前缀:保留函数签名、缩进、必要的类型和相邻上下文,不要从半个字符处截断。
- 后缀:放入补全后必须衔接的代码,例如已有调用、测试或右侧括号。
- 任务边界:一次只补一个小函数或代码块;仓库级改造应改用能审查差异的编程流程。
- 输出预算:
max_tokens给完成当前缺口所需的范围,避免模型继续写无关代码。
补全后必须运行验证
- 把
prefix + middle + suffix保存到临时文件,不直接覆盖原文件。 - 先运行格式化和语法检查,再执行示例中的三个断言。
- 增加边界用例,例如
low > high时应该报错还是交换顺序,并明确产品规则。 - 查看代码差异,确认模型没有重定义函数、删除后缀或引入未声明依赖。
验收不是“接口返回 200”,而是插入后的完整文件能解析、测试通过,且行为符合你定义的边界。若返回 Markdown 代码围栏,应先拒绝或清理围栏,再做语法检查,不能直接拼入源文件。
常见错误怎么排
| 现象 | 检查项 |
|---|---|
| 404 或接口不存在 | 是否漏用 /beta 基础地址,SDK 是否调用 completions 而非 chat completions |
| 缩进或括号重复 | 前后缀切点是否重叠,后缀是否已含闭合结构 |
| 补全太长 | 缩小上下文和 max_tokens,在注释中写清只补中间代码 |
| 测试失败 | 保留原文件,记录补全和失败用例,修正后重新生成或人工修改 |
适用与未实测说明
FIM 适合明确缺口的小范围补全,不适合把未审查输出直接写进生产仓库。Beta 能力、模型名称和限制可能变化;付费与限流也应以当前控制台为准。本文没有调用你的 DeepSeek 账号,代码是可复核示例,未声称得到某个固定补全结果。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32922.html