🧠 图解记忆: FIM 用前缀和后缀约束中间缺口,让补全同时理解代码两侧语义。
💡 答案要点
FIM = Fill-in-the-Middle(中间填充)
传统自回归模型的局限:
传统方法:从头预测到尾
代码:[def foo()] → [x = 1] → [return x]
问题:需要完整读完前半部分才知道后半部分
FIM 方法:同时看前后,中间填入
代码:[def foo(] → [x = 1, y = 2] ← 中间填充
优点:利用双向上下文FIM 实现方式:
python
# 三种 FIM 策略
# 1. SPM(Same Prefix Middle)
prefix = "def calculate(a, b):"
middle = " result = a * b\n return result"
suffix = ""
output = prefix + middle + suffix
# 2. PSM(Prefix Suffix Middle)
prefix = "def calculate("
middle = "a, b"
suffix = "):\n result = a * b"
output = prefix + middle + suffix
# 3. XML-style(用特殊 Token)
<PRE> prefix <MID> middle <SUF> suffix为什么对代码重要:
- 代码有很强的中缀结构(函数签名在两边,实现在中间)
- 传统 LTR(从左到右)模型无法有效利用未来上下文
- FIM 让模型同时看到函数签名和已有实现,生成更准确的中间代码
面试话术:
"FIM 是代码补全的关键技术。代码不像自然语言,它的结构是'双向'的——函数签名告诉你需要什么参数,函数实现告诉你做什么,中间的逻辑需要同时看到两边才能生成准确。FIM 让模型同时理解前后上下文,补全准确率大幅提升。"
