中间填充实验台
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 实验台页面中。
使用这个页面
- 从下拉框选择模型 —— 具备编码能力的模型会优先列在「编码模型(支持 FIM)」分组下。
- 在左侧文本框输入你的前缀(光标之前的代码)。
- 在右侧文本框输入你的后缀(光标之后的代码)。
- 点击生成。
模型会实时流式输出缺失的中间部分。生成完成后,你还会看到一个拼接预览 —— 前缀、生成的中间内容(以强调色高亮)和后缀被渲染成一个连续的整体,让你能像在编辑器里那样通读整段结果。
指标
生成结束后,输出下方会出现四张指标卡片:
- 总耗时 —— 从请求发出到最后一个 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。