RAG大模型后端
构建不会幻觉的 RAG
2026年7月10日 · 8 分钟
检索是简单的那 80%
任何人都能把嵌入模型接到向量库,一个下午就跑出一个 demo。真正的工程难点在最后 的 20%——不要自信地胡编乱造。
我信任的管线
- 有意图地切分。 按结构切分(标题、代码块),而不是固定的 token 窗口,并保留 少量重叠。
- 带元数据入库(来源、章节、更新时间),以便过滤与引用。
- 先宽召回,再重排序。 先用向量相似度取 top-30,再用 cross-encoder 重排序, 保留最好的 5 条。
- 让答案有据可依。 强制模型引用 chunk id,当上下文不支持某个论断时就拒答。
context = rerank(query, vector_search(query, k=30))[:5]
prompt = f"""只依据上下文作答。若无支撑,就说不知道。
以 [id] 形式标注来源。
上下文:
{format_chunks(context)}
问题:{query}"""
没有评测就等于没做
如果你无法度量幻觉,你就无法减少它。
我维护一个小小的黄金集(问题/答案/来源三元组),对每次改动都在 忠实度 与 答案相关性 上打分。一个"感觉更好"却让忠实度掉了 8% 的 prompt 改动,绝不上线。