AI 学习笔记(十一):把本地模型接进知识库与 RAG 工作流(最小实践)
上一篇我们聊了“本地模型 + 云模型”怎么分工协作,这一篇继续 Phase 4,落到很多团队都会问的实操问题:
本地模型怎么真正接进知识库与 RAG,而不是只停留在本机聊天 demo?
很多人做 RAG 卡住,不是因为模型不够强,而是链路不完整:
文档进不来、索引不稳定、检索命中差、回答不可追踪,最后只能退回“全靠大模型记忆”。
这篇给你一套可落地、可迭代的最小实现。
1. 先统一目标:RAG 不是“加个向量库”
在工程里,RAG 的目标不是“让模型看起来更聪明”,而是三件事:
- 让回答基于可追溯证据(而不是编出来)
- 让知识更新成本可控(文档更新后可快速生效)
- 让结果质量可评估(命中率、引用率、失败原因可观测)
如果只做“文档 embedding -> topK -> 拼 prompt”,短期能跑,长期很容易失控。
更稳的做法是从一开始就把数据流和回退策略定义清楚。
2. 一条最小可用链路(先跑通,再优化)
建议先固定成 5 个环节:
Ingest:读取文档,提取 metadata(来源、更新时间、权限标签)Chunk:按语义和长度切分,保留段落标题与来源位置信息Index:向量化并写入向量库,同时保存原文引用Retrieve:检索 topK + 可选重排,输出证据片段Answer:模型基于证据回答,并返回引用与置信度
关键点:
- 不要在 Answer 阶段“自由发挥”过多;明确要求“仅基于检索片段回答”
- 每次回答必须返回引用 ID,避免后续无法复盘
3. 本地模型接入时,优先解决这 4 个工程问题
3.1 模型角色分工
最稳妥的起步方式:
- 本地 embedding 模型做向量化
- 本地或云模型做生成(按任务成本与质量要求切换)
这样可以先把“知识进入索引”稳定下来,再逐步把生成层迁到本地。
3.2 切分策略
比“固定 500 token”更实用的是:
- 主切分按标题/段落
- 超长段再按长度切
- 每块保留
docId + section + offset
没有这些 metadata,检索命中了也很难给出可信引用。
3.3 检索失败回退
常见失败不是模型崩溃,而是“检索不到可用证据”。
建议至少有两级回退:
- 降低相似度阈值并扩大 topK
- 仍失败时返回“未命中知识库”的明确响应,并提示补充文档
不要在无证据时让模型硬答。
3.4 可观测性
每次请求至少记录:
- query hash
- topK 命中文档 ID
- 相似度分数
- 最终引用片段
- token 用量与耗时
没有这组日志,你很难判断是“索引问题、检索问题,还是生成问题”。
4. 一个最小接口契约(便于后续替换模型)
1 | interface RagRequest { |
这层契约稳定后,你可以自由替换:
- embedding 提供方
- 向量库实现
- 本地/云推理模型
业务侧不需要跟着频繁改动。
5. 推荐的落地顺序
- 先接 1 类高价值文档(如内部技术规范)
- 先做只读问答,不做自动写入与自动执行
- 用真实问题集评估“命中率 + 引用准确率”
- 再逐步扩展文档范围和自动化程度
这比一开始追求“全量知识库 + 全自动 Agent”更稳,也更容易拿到可复用结果。
总结
把本地模型接入知识库与 RAG,核心不在“模型名字”,而在链路治理:
- 数据怎么进来
- 检索怎么命中
- 回答怎么引用
- 失败怎么回退
- 过程怎么观测
先做最小闭环,再做能力增强。这样你得到的不是一个 demo,而是一条可长期维护的 AI 工程链路。