PiuQiuPiaQia (@allen_zhang) 在 复刻continue,实现行内补全功能autocompletion 中发帖
行内补全:实现思路与关键细节(FIM + Diff + 多层过滤)
想把“行内补全”做得好用,核心不是“能生成”,而是生成后如何稳定落到光标处:不重复、不乱插、不无限循环、单行/多行行为符合预期。
先看结论
使用标准 FIM(Fill-In-the-Middle) 流程:prefix + suffix -> middle
内置模型:Qwen2.5-Coder-32B-Instruct(通过统一的 "FIM" 模型名对外提供)
非流式请求拿到完整输出,但内部用“类流式管道”逐层过滤(字符级→行级→后处理)
单行补全额外做 Diff:自动判断“插入”还是“替换到行尾”,避免括号/后缀重复
多行补全不做 Diff:直接替换到行尾(更符合用户预期,也省成本)
1) 整体架构(从 VSCode 到最终插入)
流程上分 6 段:预过滤 → 分类 → 模板 → 调用与过滤 → 后处理 → D...