FIM 补全

FIM(Fill in the Middle)补全让模型根据前缀和后缀生成中间内容——适用于代码补全、文本填充等场景。

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)

参数

prompt — 前缀文本

前缀文本是 FIM 补全的核心输入,模型会基于这段文本生成后续内容:

const result = await fim({
  model,
  prompt: 'import { useState } from "react"\n\nfunction Counter() {',
})

suffix — 后缀文本

后缀文本告诉模型在生成内容的后面还有什么,帮助模型生成更准确的中间内容:

const result = await fim({
  model,
  prompt: 'function formatDate(date) {\n  ',
  suffix: '\n  return formatted\n}',
})

echo — 回显

设置 echo: true 后,响应中会包含前缀文本本身,方便你查看完整的上下文:

const result = await fim({
  model,
  prompt: 'function hello() {',
  echo: true,
})

console.log(result.choices[0].text)
// "function hello() { console.log('Hello!') }"

maxTokens — 最大生成 Token 数

限制模型生成的最大 Token 数量,控制补全内容的长度:

const result = await fim({
  model,
  prompt: 'function quickSort(arr) {',
  maxTokens: 256,
})

返回结果

fim() 函数返回一个简化的结果对象,包含 textusage

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) 进行验证。

API 参考

fim() 参数

modelrequiredDeepSeekModel
模型实例。FIM 补全使用的推理引擎。
promptrequiredstring
前缀文本。模型基于此文本生成后续内容。
suffixstring
后缀文本。提供生成内容之后的上下文,帮助模型生成更准确的中间内容。
echoboolean
false
是否在响应中包含前缀文本。
maxTokensnumber
生成的最大 Token 数量。

fim() 返回值

textstring
模型生成的补全文本。
usageFIMUsage
Token 使用量统计,包含 prompt_tokenscompletion_tokenstotal_tokens

model.fim() 返回值(FIMResponse)

idstring
补全请求的唯一标识符。
choicesFIMChoice[]
补全选项列表。每项包含 text(生成的文本)、finish_reason(结束原因)和 logprobs(对数概率)。
modelstring
使用的模型标识符。
usageFIMUsage
Token 使用量统计。