Skip to content

中间填充实验台

FIM 实验台是一个小而专注的页面,用于测试代码补全式的生成。你提供一个前缀(光标之前的代码)和一个后缀(光标之后的代码),模型负责填补中间的空缺。

侧边栏位置: 代码补全(在工具工坊下方) 路由: /fim加入版本: v0.4.7(2026 年 5 月)

什么是中间填充?

大多数对话 API 只支持从左到右的生成:你给出提示词,模型从你停下的地方继续往下写。FIM 不一样 —— 模型同时能看到空缺之后的内容,并写出自然衔接两端的内容。

GitHub Copilot 的行中建议、Cursor 的「Tab 补全」背后靠的就是这个能力。Ollama 提供的多个模型原生支持它:

  • Qwen2.5-Coder(全部尺寸)
  • CodeLlama-code 变体)
  • Codestral
  • DeepSeek-Coder
  • StarCoder

Ollama 通过 /api/generate 接口上的 suffix 字段暴露 FIM 能力,LLMxRay 则把它呈现在 FIM 实验台页面中。

使用这个页面

  1. 从下拉框选择模型 —— 具备编码能力的模型会优先列在「编码模型(支持 FIM)」分组下。
  2. 在左侧文本框输入你的前缀(光标之前的代码)。
  3. 在右侧文本框输入你的后缀(光标之后的代码)。
  4. 点击生成

模型会实时流式输出缺失的中间部分。生成完成后,你还会看到一个拼接预览 —— 前缀、生成的中间内容(以强调色高亮)和后缀被渲染成一个连续的整体,让你能像在编辑器里那样通读整段结果。

指标

生成结束后,输出下方会出现四张指标卡片:

  • 总耗时 —— 从请求发出到最后一个 token 的实际时间
  • 模型加载 —— Ollama 把模型载入内存所花的时间(热启动时为 0 ms)
  • 生成 token 数 —— 模型为中间部分产出的 token 数量
  • 速度 —— 每秒 token 数

如果模型不支持 FIM

如果你选了一个非编码模型,页面会提前给出提示。若仍要尝试,Ollama 会返回一个明确的错误:qwen2.5:3b does not support insert(或类似内容,其中带有对应的模型名)。页面会把这个错误显示在输出区,而不会崩溃。

幕后原理

页面调用 /api/generate,并带上 Ollama 提供的 suffix 字段:

json
{
  "model": "qwen2.5-coder:7b",
  "prompt": "def fibonacci(n):\n    if n <= 1:\n        return n\n    ",
  "suffix": "\n\nprint(fibonacci(10))"
}

流式返回的 NDJSON 与普通对话的解析方式相同 —— 每行一个 JSON 对象,不断累积 response 增量,直到 done: true

另见

Released under the Apache 2.0 License.