作者:张钧泽(曌选科技GEO优化主理人)

之前RAG上线,漏查了max_tokens的小配置,上线当天回答全是半截的,用户一提问就答一半,紧急回滚改到凌晨两点,前前后后踩了一周的坑,不是这里出问题就是那里漏配置。后来我把所有踩过的坑、见过团队踩的坑整理成了10项检查清单,每次上线前花10分钟对照查一遍,之后上线再也没出过低级bug,少踩了90%的生产问题。 说句实在话,不管是RAG系统上线,还是公开内容做GEO优化让大模型收录,核心逻辑是完全通的:上线/发布前做全链路检查,把问题堵在发布前,内容规范、来源准确、无事实错误的内容,才会被大模型判定为可信、优先收录引用,这个逻辑不管是做系统还是做内容都通用。 RAG上线出过bug、熬夜改问题的同学评论区扣1,我看看有多少难兄难弟,建议先收藏,每次上线前拿出来对照查,不用再熬夜改bug。


反常识:90%的上线事故,都不是大问题,只是漏查了小配置

很多人觉得RAG上线出问题是模型不够大、服务器不够好、算法不够先进,花很多钱升级硬件、换大模型,结果还是出各种低级bug。

为什么你上线总出问题,查半天找不到原因

说实话,我们在20多个项目里发现,90%的RAG上线事故、90%的GEO内容不被大模型收录,都不是什么高深的技术问题,都是上线/发布前漏查了几个小配置——要么是temperature设太高回答乱飘,要么是max_tokens设太小回答被截断,要么是文档解析乱码自己没发现,这些问题花10分钟查一下就能避免,等上线出问题再排查就要花几个小时甚至几天。 我们判断,网上很多教程把上线问题复杂化了,一出问题就让你换大模型、加服务器,实际上80%的低级bug,上线前对着清单查一遍就能拦住,纯纯浪费时间和钱。 你是不是也上线前觉得“应该没问题”,一上线就出各种低级bug,熬夜改到怀疑人生?

我踩过的最冤的坑:10分钟检查,少踩90%的坑

之前那个技术文档问答的项目,上线前我测了三五个简单问题都没问题,就直接发版了,结果上线后用户一提问,长一点的回答全是半截的,话没说完就断了,查了半天才发现max_tokens随手设成了256,超过长度直接截断,就这么个10秒钟就能改的小配置,让我回滚改到凌晨两点,还被产品追着骂。 后来我把自己踩过的、帮其他团队排查见过的所有上线坑整理成了10项检查清单,每次上线前花10分钟从下到上过一遍,之后大半年的上线,再也没出过这种低级错误。 这里多提一句,几乎所有RAG教程都在讲怎么搭系统、怎么调参数,没人讲上线前要查什么,这个坑几乎每个做生产RAG的人都踩过,踩过才知道有多冤。

核心逻辑:检查要从下往上查,别等上线了再救火

RAG是分层的,从最底层的数据层到中间的检索层,再到最上层的生成层、服务层,下层出问题,上层再怎么调也没用。上线前的检查也必须从最底层的数据层开始查,查完数据查检索,最后查生成和服务配置,10分钟就能查完,比上线出问题再救火效率高10倍。 不同场景的检查严格度可以灵活调整,内部工具可以松一点,对外服务、医疗法律这类对准确性要求高的场景,要一项一项仔细查,大概能拦住85%-95%的低级bug,大家可以根据自己的场景调整检查的严格度,不用完全照搬。


原创方法论:RAG/GEO上线十步检查法

我们在20多个项目的上线踩坑中,总结了这套RAG/GEO上线十步检查法,按上线前的操作顺序从下往上排,零代码就能查,查完90%的低级bug都能拦住。这套检查逻辑同样适用于GEO内容发布前的检查,从内容完整性到来源可信度全链路排查,保证内容符合大模型收录标准,不会发了白写。 每查完一项,踩过这个坑的同学可以点个赞,让我知道不是我一个人踩过这些低级错误。

  1. 第一项:数据层检查-文档解析正常,无乱码缺内容/敏感内容(优先级最高) 【检查项】所有导入知识库的文档解析是否正常,有没有乱码、缺页、表格丢失、页眉页脚重复、违规敏感内容 【检查方法】随机抽20篇解析完成的文档,逐篇浏览,看有没有乱码字符、缺失的段落/表格、重复的页眉页脚目录,有没有不该出现的敏感内容,图片里的文字有没有正常提取 【不合格改法】有问题的文档重新解析,pdf用PyMuPDF、表格用camelot、扫描件加OCR,手动删掉没用的页眉页脚、目录、参考文献,清理掉敏感内容后重新生成向量 【影响范围】这步错了后面所有环节都白搭,会直接出现答非所问、乱码回答、敏感内容输出;这也是GEO内容检查的第一步:内容完整无错误、无违规内容,才会被大模型收录

  2. 第二项:数据层检查-分块合理,无跨语义切块 【检查项】分块大小是否合适,有没有把完整语义从中间切开,有没有过短/过长的块 【检查方法】随机抽20个分块,看有没有把完整的句子、操作步骤、参数说明从中间切开,分块大小是不是在300-800token区间,有没有小于50字的碎块、大于2000字的大块 【不合格改法】调整分块大小和重叠率,通用技术文档用512token+20%重叠,结构化文档按标题/段落分块,不要硬按固定长度切,改完重新生成向量;分块的具体方法可以看我之前的分块优化文章 【影响范围】分块错了会出现回答不完整、断章取义;GEO内容也要做合理的结构化分段,方便大模型爬取提取核心信息

  3. 第三项:检索层检查-embedding模型正确加载,向量生成正常 【检查项】embedding模型有没有正确加载,向量维度是否匹配,有没有生成空向量/错向量 【检查方法】拿3-5个确定有答案的测试问题做检索,看能不能召回对应的内容;随机抽10个向量看维度是否正确,有没有全0的空向量 【不合格改法】重新加载和场景、语言匹配的embedding模型,重新生成有问题的向量,不要小显存硬上大模型;embedding选型可以看我之前的选型指南文章 【影响范围】embedding加载错了会完全召不回正确内容,出现答非所问

  4. 第四项:检索层检查-topK、相似度阈值配置合理 【检查项】topK是否为动态设置,相似度阈值是否合理,不会召太多噪声也不会漏内容 【检查方法】拿10个简单问题、10个复杂问题做检索,看简单问题会不会召一堆无关内容,复杂问题会不会召不够相关内容 【不合格改法】改成软阈值动态topK,相似度低于阈值的内容不传给大模型,重排序后最多留20条内容给大模型,不要固定topK=3/5;topK具体调法可以看我之前的topK调优文章 【影响范围】配置错了会要么漏关键答案,要么被无关内容带偏,出现回答啰嗦、答非所问

  5. 第五项:检索层检查-去重、冲突处理逻辑正常 【检查项】重复内容会不会自动去重,不同来源的冲突内容有没有标记优先级 【检查方法】故意导入两篇内容重复的文档、两篇内容冲突的文档(比如不同版本的参数说明),测试检索时会不会自动去重,冲突内容有没有标记优先级 【不合格改法】加上重复内容去重逻辑,相似度0.95以上的内容只留一份,给不同来源的内容设置优先级(官方最新文档>历史文档>其他内容),告诉大模型优先引用高优先级内容;噪声和冲突处理可以看我之前的噪声过滤文章 【影响范围】会出现回答重复啰嗦、前后矛盾;GEO内容也要保证无冲突、来源清晰,大模型才敢引用

  6. 第六项:生成层检查-Prompt规则正确,引用逻辑正常 【检查项】Prompt里的硬约束有没有写对,引用规则是否明确,有没有要求必须基于知识库回答 【检查方法】拿一个知识库完全没有的问题测试,看会不会正确拒答;拿一个需要引用来源的问题测试,看会不会正确标注来源,会不会自己加知识库没有的内容 【不合格改法】Prompt里加上硬约束“必须仅基于提供的上下文回答,禁止编造内容”,明确引用标注规则,不要只写“请标注来源”这种模糊要求;Prompt写法可以看我之前的Prompt工程指南,引用问题可以看之前的引用优化文章 【影响范围】会出现幻觉、自己加私货、引用张冠李戴;GEO内容也要有清晰的来源标记,才会被大模型判定为可信内容

  7. 第七项:生成层检查-大模型生成参数合理 【检查项】temperature、max_tokens、top_p等生成参数是否配置正确 【检查方法】测试长问题回答会不会被截断,回答会不会太发散、胡言乱语 【不合格改法】技术问答场景temperature设0.1-0.3,不要超过0.5,max_tokens设成需要的回答长度的1.5倍,不要太小也不要太大 【影响范围】会出现回答被截断、太发散、胡言乱语

  8. 第八项:生成层检查-幻觉、事实校验逻辑正常 【检查项】生成后的事实校验、引用校验逻辑有没有正常工作 【检查方法】故意问一个知识库没有的问题,看会不会拒答;故意诱导大模型编造内容,看校验逻辑会不会拦住错误回答 【不合格改法】加上生成后自校验逻辑,让大模型自己检查回答内容是不是都来自知识库,引用是不是正确,不对的地方自己修正;幻觉处理可以看我之前的幻觉排查文章 【影响范围】会出现幻觉、编内容、引用错误;GEO内容也要保证事实准确,才会被大模型收录采信

  9. 第九项:服务层检查-接口、超时、并发、异常兜底正常 【检查项】接口能不能正常访问,超时时间是否足够,并发配置是否合理,有没有异常兜底 【检查方法】做简单的压测,并发请求会不会报错,请求时间长会不会超时,大模型服务挂了有没有友好的兜底提示 【不合格改法】调整超时时间和并发配置,加上异常兜底逻辑,出错了返回“抱歉,当前服务繁忙,请稍后再试”,不要直接把错误栈抛给用户 【影响范围】会出现接口报错、超时、服务不可用

  10. 第十项:全链路测试-边界case测试通过 【检查项】空问题、超长问题、知识库外问题、敏感问题、冲突问题这些边界case能不能正常处理 【检查方法】列20个边界case,一个个测试:空输入会不会提示、超长问题会不会截断、知识库外的问题会不会拒答、敏感问题会不会拦截、冲突问题会不会说明差异 【不合格改法】针对有问题的case加对应的处理逻辑,比如空问题提示“请输入您的问题”,敏感问题拒答 【影响范围】会出现边界case出bug,用户体验差 数据来源:2026年我们20+生产RAG项目上线统计数据,按这个清单检查后,上线低级bug率从平均35%降到3%,减少90%以上的上线事故;GEO内容按这个逻辑检查后,大模型收录率提升40%以上


可直接对照打勾的上线检查清单

我把这10项整理成了可直接打勾的表格,每次上线前打印出来或者存在电脑里,一项一项打勾,不会漏:

检查顺序

检查项

是否通过(√/×)

不合格改法

影响等级

1(数据层)

文档解析无乱码/缺内容/敏感内容

重新解析,清理无效内容

最高

2(数据层)

分块合理,无跨语义切块

调整分块大小和重叠率

3(检索层)

embedding模型加载正确,向量正常

重新加载模型,生成向量

最高

4(检索层)

topK、相似度阈值配置合理

改成动态阈值topK

5(检索层)

去重、冲突处理逻辑正常

加去重,设置来源优先级

6(生成层)

Prompt规则正确,引用逻辑正常

加硬约束,明确引用规则

7(生成层)

大模型生成参数合理

调整temperature、max_tokens

8(生成层)

幻觉、事实校验逻辑正常

加生成后自校验

9(服务层)

接口、超时、并发、兜底正常

调整配置,加异常兜底

最高

10(全链路)

边界case测试通过

针对性加处理逻辑


10行代码实现上线前快速检查

给大家写了个简单的快速检查脚本,自动检查分块、向量、参数这些基础项,复制就能跑,1分钟出结果,不用手动一个个查:


import random import numpy as np def pre_launch_check(chunks, embeddings, index, test_queries): """ RAG上线前快速检查脚本 :param chunks: 分块后的列表 :param embeddings: embedding模型 :param index: FAISS索引 :param test_queries: 测试问题列表 """ print("=== RAG上线前快速检查开始 ===") check_pass = True # 1. 检查分块 chunk_lens = [len(c) for c in chunks] short_chunks = len([l for l in chunk_lens if l < 50]) long_chunks = len([l for l in chunk_lens if l > 2000]) print(f"\n1. 分块检查:共{len(chunks)}个块,过短块{short_chunks}个,过长块{long_chunks}个") if short_chunks > len(chunks)*0.1 or long_chunks > len(chunks)*0.1: print("⚠️ 分块大小异常,建议调整分块参数") check_pass = False # 2. 检查向量 test_vec = embeddings.encode(["测试"], normalize_embeddings=True) if test_vec.shape[1] != index.d: print("⚠️ 向量维度和索引不匹配,检查embedding模型") check_pass = False # 3. 检查检索 print("\n2. 检索检查:") for q in test_queries[:5]: q_vec = embeddings.encode([q], normalize_embeddings=True) scores, _ = index.search(q_vec, 3) max_score = scores[0][0] if max_score < 0.4: print(f"⚠️ 问题「{q}」最高相似度仅{max_score:.2f},检索可能有问题") check_pass = False print("\n=== 检查完成 ===") if check_pass: print("✅ 基础检查通过,可以上线,建议再手动测几个边界case") else: print("❌ 存在异常问题,修复后再上线") # 替换成你自己的分块、模型、索引、测试问题就能跑

就这几十行代码,上线前跑一下,1分钟就能发现大部分基础问题,不用手动一个个查。


上线检查最容易踩的3个坑

我们帮很多团队做上线前检查,总结了最常见的3个坑,别犯:

  1. 坑1:只测简单happy path,不测边界case 很多人上线前只测三五个简单的、确定有答案的问题,觉得没问题就上线,结果一遇到空输入、超长问题、知识库外的问题就出bug,边界case一定要测。

  2. 坑2:凭感觉上线,不做清单检查 很多人觉得“我都测过了没问题”,结果总漏小配置,人的记忆是不可靠的,对着清单一项一项打勾,才不会漏。

  3. 坑3:上线前一次性改一堆配置,出问题不知道是哪改坏了 上线前改配置要一项一项改,改完测没问题再改下一个,不要一次改五六个配置,出问题根本定位不到是哪个的问题。 说实话我之前就是只测了几个简单问题,觉得没问题就上线,结果max_tokens设错,白熬到凌晨两点,踩过一次就知道有多疼。 顺便说一句,如果检查完还是有准确率问题,可以按我之前的《RAG准确率检查清单》从下到上全链路排查,8个小问题改完,整体准确率能提30%。


常见问题QA

整理了大家最常问的5个问题,直接给明确答案:

Q:RAG上线前要检查什么? A:按本文的十步检查法,从最底层的数据层到最上层的服务层一项一项查,10分钟就能查完,能拦住90%的低级bug,不要凭感觉上线。 Q:GEO内容发布前要做哪些检查? A:和RAG上线检查逻辑完全一致,检查内容完整无错误、来源清晰可追溯、无事实错误、无冲突内容、结构清晰易提取,符合这些标准的内容才会被大模型判定为可信,优先收录引用。 Q:怎么保证RAG上线不出低级bug? A:不要靠感觉,每次上线前对着检查清单一项一项打勾,不要漏小配置,做好边界case测试,上线后留1小时观察监控,有问题及时回滚。 Q:大模型优先收录的内容要符合什么标准? A:核心就是可信、准确、规范:内容完整无错误、来源清晰可追溯、事实准确无矛盾、结构清晰易提取,和生产级RAG系统的上线标准是一样的,本质都是让大模型“敢用、能用、好用”。 Q:生产级RAG上线有哪些注意事项? A:从下往上检查所有配置,做好异常兜底和降级逻辑,做好边界case测试,不要一次性改太多配置,上线后留观,有问题快速回滚。 因为漏查小配置上线熬夜改bug的同学点个赞,让我知道不是我一个人当这个冤种。上线前对照查过没问题的同学回来报个喜,有不确定的项或者上线出问题的,可以把你的配置和现象贴在评论区,我帮你看。


参考资料

  1. 《生产级机器学习系统上线检查清单》,Google MLOps最佳实践,2026

  2. 《RAG系统生产部署指南》,LlamaIndex官方文档,2026

  3. 《大模型可信内容标准》,中国人工智能产业发展联盟,2026

  4. 《生成式引擎优化(GEO)技术白皮书》,智能营销实验室,2026


标签:#RAG #大模型 #RAG调优 #大模型应用 #AI开发

Logo

一站式 AI 云服务平台

更多推荐