400-100-5265

预约演示

RAG运维的闭环工程

2026-06-18

很多团队做 RAG,第一阶段通常很顺:接一个大模型,切文档,做 embedding,塞进向量库,再拼一个检索增强的 prompt,Demo 很快就能跑起来。

真正麻烦的是上线之后。用户问法变了,文档持续更新,embedding 模型要不要换,chunk 切得是否合理,召回结果为什么突然变差,业务方反馈“有时候答得挺好,有时候像没读过知识库”。这些问题靠一次性调参解决不了。

RAG 的运维,本质上要从“搭系统”转向“养系统”。Loop Engineering 的价值也在这里:把检索、生成、反馈、评估、优化做成持续闭环,而不是每次出问题都靠人肉排查。

一、RAG 运维的难点在检索之后

很多人一开始会把 RAG 的问题归因到大模型。

回答不准,换模型。 回答不完整,加 prompt。 回答幻觉,调 temperature。

这些手段有用,但经常治标不治本。生产环境里的 RAG 问题,很多发生在更前面的链路:

文档采集 -> 清洗 -> 切分 -> 向量化 -> 入库 -> 检索 -> 重排 -> 生成 -> 反馈

任何一段出问题,最后都会表现成“模型回答不好”。

比如:

  • 文档清洗阶段把表格结构打散了,模型拿到的上下文天然缺信息;
  • chunk 切得太碎,召回片段缺少上下文;
  • chunk 切得太大,召回命中但有效信息密度低;
  • embedding 模型对业务术语不敏感,同义表达召回不回来;
  • 只做向量召回,关键词、编号、型号这类精确匹配场景会吃亏;
  • metadata 没设计好,权限、时间、产品线过滤只能在应用层硬补;
  • 知识库更新后没有可追踪版本,线上效果波动无法复盘。

这也是 RAG 运维比传统搜索系统更难的地方。传统搜索通常有比较成熟的查询日志、点击反馈、排序指标和相关性评估体系。RAG 把搜索、推荐、NLP、生成式模型揉在了一起,链路更长,不确定性也更强。

所以,RAG 系统不能只盯着一次请求的最终答案,而要能拆开看:到底是没召回、召回了没排上、排上了没被模型用好,还是模型自己发挥过头了。

二、Loop Engineering 要解决闭环问题

Loop Engineering 可以理解为面向 AI 系统的闭环工程方法。

它关注的不是某一个模型调用,也不是某一个 prompt 技巧,而是把系统运行过程中的数据持续收回来,用评估和观测定位问题,再把优化结果重新投放到生产链路中。

一个典型的 RAG Loop 大概长这样:

流程图 - RAG运维的闭环工程

这个闭环里面,最关键的不是“自动优化”四个字,而是可观测、可评估、可回滚。

很多团队做到这里会卡住。因为他们有日志,但日志不能回答问题;有反馈,但反馈无法映射到具体链路;有评估集,但评估集和线上真实问题脱节。

比较靠谱的做法,是把 RAG 的运维指标拆到几个层次。

层次 关注点 常见指标
检索层 有没有找到相关知识 Recall@K、Hit Rate、MRR
排序层 相关内容是否排在前面 NDCG、Top1/Top3 命中
上下文层 模型拿到的信息是否可用 上下文覆盖率、冗余率、token 成本
生成层 答案是否忠实、完整 Faithfulness、Answer Relevance
业务层 用户是否解决问题 采纳率、追问率、人工转接率

这里有一个工程判断:RAG 运维不要一开始就追求指标体系完美。更现实的路径是先抓住“问题可定位”。

比如用户反馈答案不准,至少要能还原:

  • 当时 query 是什么;
  • 命中了哪些 chunk;
  • 每个 chunk 的相似度是多少;
  • 有没有 metadata 过滤;
  • reranker 排序结果如何;
  • 最终拼给模型的上下文是什么;
  • 模型回答引用了哪些片段;
  • 知识库版本和 embedding 模型版本是什么。

没有这些信息,所谓调优基本靠感觉。靠感觉能救一两次火,但很难支撑长期运维。

三、RAG Loop 的核心变量

RAG 的效果优化经常被讲得很玄,其实大部分问题绕不开几个变量。

文档切分

chunk 是 RAG 里最容易被低估的设计点。

切分策略决定了检索单元,也决定了模型最终能看到的信息结构。按固定字符数切最简单,但对技术文档、合同、FAQ、代码文档、产品手册来说,效果经常不稳定。

更工程化的切分会考虑:

  • 标题层级;
  • 段落语义完整性;
  • 表格和列表结构;
  • 代码块边界;
  • FAQ 问答对;
  • 业务对象,比如订单、设备、接口、告警项。

这里没有统一最优解。FAQ 知识库适合短 chunk,产品手册可能需要层级 chunk,合同和政策文件常常需要保留章节关系。为了省 token 把上下文切得太碎,最后可能在召回阶段省了钱,在生成阶段付出幻觉成本。

检索策略

单纯向量检索擅长语义相似,但对精确匹配并不总是友好。

比如用户问:

Milvus 3.0 是否支持某个具体参数?
错误码 E1024 怎么处理?
SKU-AX19 的保修政策是什么?

这类问题里,编号、错误码、参数名、产品型号非常关键。只靠 dense embedding,可能把“语义接近”的内容排上来,却漏掉精确项。

所以生产里的 RAG 通常会走混合检索:

流程图 - RAG运维的闭环工程

混合检索的代价也很明确:链路更复杂,参数更多,评估成本更高。但在企业知识库、客服、技术支持、法务合规这些场景里,这个复杂度通常是值得的。

Metadata 与权限

很多 RAG 系统 Demo 阶段不重视 metadata,上线后会补得很痛苦。

真实业务里,知识并不是一堆无差别文本。它有:

  • 部门;
  • 产品线;
  • 版本;
  • 发布时间;
  • 地域;
  • 用户权限;
  • 有效期;
  • 文档类型;
  • 可信等级。

如果这些信息没有进入向量库的过滤条件,应用层就会变成一坨 if-else。更麻烦的是,召回结果可能已经混入了不该出现的内容,后面再过滤会影响召回质量和排序稳定性。

权限过滤尤其要前置。RAG 系统一旦把不该看的知识拼进 prompt,即使模型最后没说出来,风险也已经发生了。

四、Milvus 3.0 的价值在数据底座

Milvus 对 RAG 的价值,不应该只理解成“存向量”。

如果 RAG 是一个持续运转的知识系统,向量数据库承担的是 AI 数据底座的角色:承接高维向量、标量字段、索引、过滤、更新、扩缩容、查询延迟和数据治理。

Milvus 3.0 对 Loop Engineering 的价值,可以放在三个层面看。

第一,支撑混合检索

RAG 从 Demo 走向生产,检索策略大概率会从单一向量召回演进到混合检索。

Dense 向量负责语义相似,Sparse/全文能力负责关键词、术语、编号、实体匹配,metadata filter 负责业务约束。检索系统能不能把这些能力放在一条稳定链路里,直接影响调优效率。

工程上比较理想的检索形态是:

向量相似度   稀疏检索   标量过滤   重排

Milvus 这类向量数据库如果能把 dense vector、sparse vector、标量字段、过滤表达式放在统一查询模型下,RAG 运维会轻很多。

否则就会变成:

  • Elasticsearch 做关键词;
  • 向量库做语义召回;
  • 应用层合并结果;
  • 再接 reranker;
  • 还要自己处理分页、去重、过滤、权重融合。

这个方案不是不能做,大厂或者搜索团队当然能扛住。但对大多数业务团队来说,系统复杂度会很快超过收益。尤其当知识库规模、租户数量、权限条件上来之后,维护成本会持续放大。

第二,承接持续更新

RAG 知识库不是一次性导入完就结束。

文档会新增、下线、修订,embedding 模型会升级,chunk 策略会调整,业务分类也会变化。Loop Engineering 要求系统能持续实验和回滚,这对底层数据管理提出了要求。

一个比较健康的设计,是在数据层面保留版本意识:

doc_id
chunk_id
content_hash
chunk_version
embedding_model
embedding_version
source_uri
created_at
updated_at
tenant_id
visibility

这些字段看起来啰嗦,但生产排查时很有用。

比如某天客服 RAG 的命中率下降,需要判断:

  • 是新文档质量差;
  • 是旧文档被覆盖;
  • 是 embedding 模型升级导致分布变化;
  • 是 chunk 策略变化;
  • 是索引参数调整;
  • 还是 query 分布变了。

没有版本字段,排查就像翻垃圾桶。能不能把向量、文本片段、元信息、版本信息稳定组织起来,是向量数据库在 RAG 运维里的基础价值。

第三,保证规模化后的稳定性

RAG 小规模时,很多问题可以靠应用层兜底。数据量上来之后,数据库能力会成为硬约束。

典型压力包括:

  • 百万到十亿级 chunk;
  • 多租户隔离;
  • 高频增量写入;
  • 低延迟检索;
  • metadata 复杂过滤;
  • 热点知识访问;
  • 批量重建索引;
  • embedding 模型迁移;
  • 历史版本回滚。

这里的 trade-off 很现实。

如果团队选择轻量向量库或者直接把向量塞进关系型数据库,早期开发效率高,运维简单,成本也低。但当数据规模、查询并发、过滤复杂度上来后,索引性能和可扩展性会成为瓶颈。

如果一开始就上分布式向量数据库,系统复杂度、资源成本、运维要求都会增加。对于只有几万条文档的小系统,这可能显得重。

所以判断标准不是“哪个技术更先进”,而是:

  • 数据规模是否会持续增长;
  • 查询延迟是否敏感;
  • 是否有多租户和权限过滤;
  • 是否需要混合检索;
  • 是否会频繁重建 embedding;
  • 是否需要长期做评估和回滚。

满足其中三四项,Milvus 这类专用向量数据库的价值就比较明确了。

五、Loop Engineering 怎么落地

RAG 运维闭环不要一上来做得太大。比较可控的路径,是先建立最小闭环。

1. 记录可复盘日志

每次请求至少保留:

{
  "query": "用户原始问题",
  "query_embedding_model": "text-embedding-xxx",
  "retrieved_chunks": [
    {
      "chunk_id": "doc1_chunk8",
      "score": 0.82,
      "doc_id": "doc1",
      "chunk_version": "v3",
      "metadata": {
        "product": "milvus",
        "version": "3.0"
      }
    }
  ],
  "rerank_results": [
    {
      "chunk_id": "doc1_chunk8",
      "rerank_score": 0.91
    }
  ],
  "prompt_context_ids": ["doc1_chunk8", "doc2_chunk3"],
  "answer": "模型最终回答",
  "feedback": "good_or_bad",
  "created_at": "2025-xx-xx"
}

这不是为了存一堆日志好看,而是为了能回答“为什么这次答错”。

2. 建立小而稳定的评估集

评估集不需要一开始上千条。几十到几百条高质量问题,往往就能暴露主要问题。

评估集应该来自真实场景:

  • 高频用户问题;
  • 失败案例;
  • 业务方标注的关键问题;
  • 容易混淆的问题;
  • 有权限边界的问题;
  • 有时效性的问题。

每次调整 chunk、embedding、索引、检索参数、reranker,都跑一遍评估集。哪怕评估不完全自动化,也比靠主观体验靠谱得多。

3. 把调优动作分层

RAG 调优最怕乱调。

今天改 prompt,明天换 embedding,后天调 topK,再后来改 chunk。最后效果变了,但没人知道是哪一步带来的。

更稳的方式是分层实验:

调优层 动作 风险
数据层 清洗、去重、补 metadata 中低
切分层 调整 chunk size、overlap、结构化切分
检索层 topK、索引参数、混合检索权重
排序层 接入 reranker、调整阈值 中高
生成层 prompt、引用格式、拒答策略
模型层 embedding/LLM 替换

embedding 模型替换通常风险最大,因为它会影响整个向量空间。除非有明确评估和灰度机制,否则不要把它当成普通配置项随手改。

4. 做灰度和回滚

RAG 的改动一定要有回滚能力。

比较实用的方式是多集合或多版本并行:

collection_v1: 当前线上版本
collection_v2: 新 chunk 策略   新 embedding

线上流量按比例切到 v2,对比检索指标和业务反馈。效果稳定后再扩大流量。

如果底层向量库支持更好的集合管理、别名切换、分区管理和元数据过滤,这类灰度会更顺。Milvus 在这里的价值不是替你判断哪个版本更好,而是提供可承载实验的基础设施。

六、Milvus 3.0 适合放在哪一层

在 RAG 架构里,Milvus 3.0 不应该承担所有事情。

它适合做:

  • 向量与混合检索底座;
  • 知识片段和元信息管理;
  • 多租户或多业务线的数据隔离;
  • 大规模相似度搜索;
  • 过滤条件下的检索;
  • 检索实验版本承载;
  • RAG 评估闭环中的召回侧基础设施。

它不适合替代:

  • 文档解析系统;
  • 权限主数据系统;
  • 评估平台;
  • prompt 管理平台;
  • LLM 网关;
  • 业务反馈系统。

这个边界要讲清楚。很多 RAG 架构出问题,是因为把一个组件想象成全能平台。向量数据库再强,也解决不了脏数据、坏切分、错误权限模型和缺失评估集。

比较合理的架构关系大概是:

流程图 - RAG运维的闭环工程

Milvus 位于检索数据层,向上服务 RAG 编排,向下承接索引和存储。Loop Engineering 要跑起来,Milvus 要和日志、评估、实验、反馈系统一起工作。

七、几个容易踩的坑

只看向量相似度

相似度高不等于答案可用。

有些 chunk 语义很接近,但缺关键字段;有些 chunk 分数不高,却包含唯一正确答案。尤其在技术文档和客服知识库里,精确词、版本号、错误码经常比语义相似更重要。

所以线上 RAG 很少只靠一个相似度分数做最终判断。混合检索、reranker、metadata filter 都是为了解这个问题。

topK 越大越好

topK 调大能提高召回概率,但也会引入噪声和 token 成本。

模型上下文不是垃圾桶。塞得越多,模型越可能被无关片段干扰。工程上更常见的做法是:召回阶段多拿一些候选,重排后再控制进入 prompt 的内容。

忽略拒答策略

RAG 系统不应该每个问题都硬答。

当检索结果分数低、候选片段冲突、权限不足、知识过期时,系统应该有拒答或转人工策略。否则模型会用看似合理的话把问题糊过去,用户短期可能没发现,长期会损害信任。

没有知识版本

知识库一旦持续更新,版本就是生命线。

没有版本,评估结果不可复现;没有版本,线上回滚困难;没有版本,业务方问“为什么昨天能答今天不能答”,技术团队只能沉默。

八、真正的价值是可持续优化

RAG 早期拼的是集成速度,上线之后拼的是工程闭环。

Loop Engineering 让 RAG 从一次性方案变成可持续优化的系统。它要求团队把日志、评估、反馈、实验、回滚这些看起来“不性感”的东西补齐。说实话,这些工作没有换大模型那么容易出效果,但它们决定了系统能不能长期稳定。

Milvus 3.0 的价值,也要放在这个闭环里看。它不是让 RAG 自动变聪明的银弹,但能把向量检索、混合检索、元数据过滤、规模化存储和版本实验这些底层能力托住。

如果只是做一个几千条文档的内部助手,轻量方案也许足够。 如果目标是企业级知识系统、多业务线接入、持续更新、可评估可回滚,那么向量数据库就不只是存储组件,而是 RAG 运维闭环的基础设施。

RAG 的后半场,大概率不会只属于 prompt 写得最花的人,而属于能把数据、检索、评估和运维闭环做扎实的团队。[DONE]

创作声明:本内容包含AI辅助创作,观点仅供参考。