FIM(Fill in the Middle)是 DeepSeek 提供的一种特殊补全模式。与对话式生成不同,FIM 接收一段文本的前缀 (prompt)和可选的后缀 (suffix),模型负责生成中间缺失的部分。这种模式特别适合代码补全——当用户在编辑器中输入到一半时,FIM 可以根据已有代码的前后文,智能补全中间的代码片段。
使用 fim() 函数进行 FIM 补全。你需要提供一个模型实例和前缀文本:
import { createModel, fim } from 'deepseek-kit'
const model = createModel ({ model: 'deepseek-v4-flash' })
const result = await fim ({
model,
prompt: 'function fibonacci(n) {' ,
})
console. log (result.text)
模型会根据前缀生成后续内容,例如补全斐波那契函数的实现。
通过 suffix 参数提供后缀文本,模型会生成前缀和后缀之间的中间内容:
const result = await fim ({
model,
prompt: 'function add(a, b) { \n ' ,
suffix: ' \n return result \n }' ,
})
console. log (result.text)
// "const result = a + b;"
这在代码编辑器场景中特别有用——用户的光标位于代码中间,你需要根据光标前后的内容补全当前行或代码块。
你也可以通过 DeepSeekModel 实例直接调用 FIM:
import { createModel } from 'deepseek-kit'
const model = createModel ({ model: 'deepseek-v4-flash' })
const result = await model. fim ({
prompt: 'const greeting = "Hello, ' ,
suffix: '!"' ,
maxTokens: 100 ,
})
console. log (result.choices[ 0 ].text)
通过模型实例调用 model.fim() 时,会自动使用 DeepSeek 的 Beta 模式 API 端点(api.deepseek.com/beta),这是 FIM 功能所需的。
前缀文本是 FIM 补全的核心输入,模型会基于这段文本生成后续内容:
const result = await fim ({
model,
prompt: 'import { useState } from "react" \n\n function Counter() {' ,
})
后缀文本告诉模型在生成内容的后面还有什么,帮助模型生成更准确的中间内容:
const result = await fim ({
model,
prompt: 'function formatDate(date) { \n ' ,
suffix: ' \n return formatted \n }' ,
})
设置 echo: true 后,响应中会包含前缀文本本身,方便你查看完整的上下文:
const result = await fim ({
model,
prompt: 'function hello() {' ,
echo: true ,
})
console. log (result.choices[ 0 ].text)
// "function hello() { console.log('Hello!') }"
限制模型生成的最大 Token 数量,控制补全内容的长度:
const result = await fim ({
model,
prompt: 'function quickSort(arr) {' ,
maxTokens: 256 ,
})
fim() 函数返回一个简化的结果对象,包含 text 和 usage:
const result = await fim ({
model,
prompt: 'const sum = ' ,
})
console. log (result.text)
console. log (result.usage)
通过 model.fim() 调用则返回完整的 FIMResponse 对象:
const response = await model. fim ({
prompt: 'const sum = ' ,
})
console. log (response.id)
console. log (response.choices[ 0 ].text)
console. log (response.choices[ 0 ].finish_reason)
console. log (response.usage)
以下是一个模拟代码编辑器补全的完整示例:
import { createModel, fim } from 'deepseek-kit'
const model = createModel ({ model: 'deepseek-v4-flash' })
const prefix = `
import { z } from 'zod'
export const UserSchema = z.object({
name: z.string(),
email: z.string().email(),
age: z.number().int().positive(),
})
export function validateUser(input: unknown) {
`
const suffix = `
}
const result = validateUser({ name: '张三', email: 'test@example.com', age: 25 })
console.log(result)
`
const result = await fim ({
model,
prompt: prefix,
suffix,
maxTokens: 200 ,
})
console. log (result.text)
模型会根据前后文生成 validateUser 函数的实现,例如使用 UserSchema.safeParse(input) 进行验证。
model required DeepSeekModel
模型实例。FIM 补全使用的推理引擎。 后缀文本。提供生成内容之后的上下文,帮助模型生成更准确的中间内容。 Token 使用量统计,包含 prompt_tokens、completion_tokens 和 total_tokens。 补全选项列表。每项包含 text(生成的文本)、finish_reason(结束原因)和 logprobs(对数概率)。