我前阵子接手了一个挺常见的需求:公司有一本 100 多页的内部设备操作手册,大家每天都要翻,但问题来的时候没人愿意一页页找,领导想要一个能“直接回答”的工具。调研了一圈,最后我用开源的 Dify 搭了一套知识库 RAG 问答系统,把手册丢进去,AI 就能基于手册内容回答员工的问题,还能标注引用来源。整个过程从部署到调优踩了不少坑,这篇就把完整的实战过程写出来,包括 RAG 的核心原理、Dify 知识库的构建细节、检索调参经验,以及生产环境里那些文档里不会写的问题,想用 Dify 做知识库问答的人可以参考。
先交代一下我的环境和目标,后面所有的操作都围绕这两个前提展开:
- 服务器:一台 4 核 8G 的 Linux 机器,装了 Docker 和 Docker Compose,系统是最常见的 CentOS 7,这也是很多人卡住的地方,后面会专门说。
- 目标效果:把 PDF 格式的手册导入 Dify 知识库,创建一个问答应用,员工提问后 AI 能检索手册中的相关内容并给出带引用的回答,回答内容只基于手册,不能凭空编造。
1. 先聊清楚:为什么拿 Dify 来啃 100 页手册
1.1 100 页手册对大模型来说,不是“读完”就能答的
很多人第一反应是:手册不长,直接把全文丢给大模型不就行了?这个想法在 50 页以内的文档上勉强能跑,但 100 页手册通常有 8 到 12 万字,算下来好几万 token。硬塞给大模型会带来几个很现实的问题:
第一是上下文窗口放不下。就算模型支持 128K 甚至更长的上下文,把整本手册全塞进去之后,可用窗口也所剩无几,而且多轮对话时每轮都要重复携带全部手册内容,token 成本直线上升。
第二是注意力会被稀释。大模型看 10 万字的时候,真正相关的可能只有中间某一段。模型容易把早期内容和后文的关键细节混在一起,甚至把不同章节的参数弄串。我见过有人把手册里温度范围和压力范围搞反的例子,这种错误在设备操作场景里问题就大了。
第三是更新成本高。手册这个月改一版、下个月补一页,如果每次都重新生成一个“背诵全文”的系统,维护成本完全不可控。
所以正确思路是RAG(检索增强生成):把手册拆成一块一块的片段(chunk),先建立索引;用户提问时,先用问题去检索最相关的几个片段,再把“问题 + 检索到的片段”一起交给大模型生成答案。打个比方,传统方式相当于让一个人把整本书背下来再答题,RAG 则是让这个人带着书进考场,考到哪一题就翻到对应页码照着答。既省记忆,又保证答案有出处。
1.2 Dify 在这个场景里解决的是哪几件事
选 Dify 而不是从头写一套 RAG 流程,是因为它把这四件事都做成了开箱即用的模块:
- 知识库管理:支持上传多种格式文档,内置文档解析、分段(chunking)、清洗规则,不需要自己写文本切片的代码。
- 应用编排:可以创建一个 Chatbot 应用,关联知识库,配置提示词后直接得到一个可对话的 API 和 Web 页面。
- 模型接入:Dify 本身不提供大模型,而是负责接各家模型。OpenAI、各家国产大模型 API、Ollama 本地模型都能接,切换模型只改配置,不动业务代码。
- 可观测性:每一次问答的检索过程都能在调试面板里看到,系统到底检索了哪些片段、为什么这样回答,一目了然。这一点对排查问题太重要了,自研 RAG 想做到这个透明度要费不少功夫。
1.3 这个实战的内容范围
这篇文章会从零开始走一遍完整链路:Dify 部署、模型接入、手册导入与分段、检索参数调优、应用编排与提示词设计、生产环境瓶颈与优化方向。每一步都会解释为什么这么做,以及踩过的坑。想看基础概念的直接按章节往下看,已经部署好的可以直接跳到第 3 节。
2. 部署与模型接入:最容易磨掉耐心的两小时
2.1 Docker Compose 装 Dify,CentOS 7 上有几个暗坑
Dify 官方推荐的部署方式是 Docker Compose。我在 CentOS 7 上装的时候,第一步就遇到了麻烦——系统自带的 yum 源里 docker-compose 可能装不上或者版本太老。实践中建议用独立安装的 Docker Compose 二进制,而不是 yum 版本:
# 安装 Docker 基础环境(CentOS 7 常用方式) sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io # 启动 Docker sudo systemctl start docker sudo systemctl enable docker # 安装 Docker Compose v2 插件 sudo mkdir -p /usr/local/lib/docker/cli-plugins sudo curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64" -o /usr/local/lib/docker/cli-plugins/docker-compose sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-composeCentOS 7 上最容易翻车的地方是内核版本和存储驱动。老内核可能导致 Docker 容器运行不稳定,建议部署前确认一下:
uname -r如果内核是 3.10 的老版本,尽量先升级,或者用 Docker 的 overlay2 存储驱动配置来规避部分问题。另外 CentOS 7 上 Docker Compose v2 插件需要较新版本的 Docker,如果docker compose version报错,大概率是 Docker 版本太老。
装好 Docker 后,获取 Dify 源码并启动:
git clone https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env docker compose up -d第一次启动会拉取前端、后端、数据库、向量存储等多个镜像,耗时取决于网速,建议在带宽稳定的环境进行。启动完成后访问http://服务器IP就能看到初始化页面。
初始化时指定管理员邮箱和密码,这一步很简单,但密码策略有点严格,建议一次设置成大小写字母加数字的组合。
2.2 Windows 本机部署的注意事项
有不少人是在 Windows 上试玩 Dify 的,这个场景我也帮朋友处理过。Windows 下需要先装 Docker Desktop,注意两个点:
一是要保证 WSL2 后端正常运行,否则 Docker Desktop 启动不起来。在 PowerShell 里执行wsl --status能确认状态。
二是内存分配。Dify 全家桶跑起来大概要吃 4G 左右内存,Docker Desktop 默认可能只给 2G,需要在 Settings 里手动调到 4G 以上,否则容器会频繁 OOM。我实测 8G 内存的 Windows 机器跑起来比较从容。
2.3 接入模型:三种常见方式怎么选
Dify 本身不带模型,所以部署完后的第一件事就是接大模型。在“设置-模型供应商”页面里配置。我试过三种方式:
| 方式 | 适用场景 | 优点 | 要考虑的问题 |
|---|---|---|---|
| OpenAI API key | 有海外账号,业务允许调用海外 API | 效果稳定,生态好 | 网络链路、费用、数据合规 |
| 国产大模型 API(OpenAI 兼容接口) | 国内部署,数据不出境 | 合规、速度快 | 部分模型在复杂推理上稍弱 |
| Ollama 本地模型 | 纯内网、无外网环境 | 数据完全本地、免费 | 效果受机器配置影响大 |
我在实际项目中用的是一家国产大模型的 OpenAI 兼容接口,Dify 里选择“OpenAI-API-compatible”这个供应商类型,填三个东西:API Key、API 地址、模型名称。
这里有个经验:模型名称必须填对方平台上真实存在的模型 ID,不是随便写个“gpt-4o”就能用。我曾在这上面卡了十分钟,一直报错,后来发现我填的模型名称和平台实际支持的模型 ID 不一致。
2.4 credentials validation 报错,九成是这三个原因
如果你在配置模型时看到 “An error occurred during credentials validation” 这个提示,别慌,这是 Dify 在校验 API Key 和地址时失败了。按我的排查经验,绝大多数情况是这三类问题之一:
- API Key 错了或过期了。直接去模型平台复制一个新的,粘贴时注意别带回车符。
- API 地址不对。很多 OpenAI 兼容接口的完整地址是
https://xxx.com/v1,有些平台在控制台里给的是不带/v1的地址,Dify 填 base URL 时要补全。 - 内网无法访问该地址。Dify 服务器如果在内网,访问不了外网模型 API,自然校验失败。这种情况要么用内网代理,要么换成同内网可访问的模型服务。
一个额外提示:如果你用了 Nginx 或者 Caddy 做 HTTPS 反向代理,并且 Dify 页面能打开但模型校验失败,先检查反代配置里有没有把请求路径转发正确——Dify 后端 API 路径需要完整透传,路径重写过深就会导致回调地址不对。这属于 SSL/反向代理部署里比较容易忽略的地方,我在 2.1 部署完后就用 Caddy 配了 HTTPS,第一次配完后模型校验失败,排查了半天才发现是路径重写把/v1吞掉了。
3. 知识库构建:100 页手册的正确拆解姿势
3.1 入库前先想清楚:PDF 到底能不能直接用
很多人第一步就是直接把 PDF 拖进 Dify,然后发现处理报错。Dify 的文档解析器虽然支持 PDF,但对扫描版 PDF(本质是图片)和排版复杂的 PDF,解析效果很不稳定。热搜词里那个 “dify unstructured api url is not configured for doc file processing” 报错,就是 Dify 在处理部分文件类型时需要一个独立的非结构化文档解析服务,而默认环境里没配置。这个服务需要额外部署,比较折腾。
我的建议是:能用文字版就不用 PDF,能用结构化格式就用结构化格式。实际操作中,我把那本 100 页的手册从 PDF 转成了 Markdown 文本,用 Pandoc 或在线工具都能转,转完后再人工扫一遍,重点检查表格有没有错乱、图片里的文字有没有丢失。
如果你确实只能用 PDF,优先用文字版 PDF(能选中文字的),并且把 Unstructured 服务部署好。部署方法就是多起一个容器,然后在 Dify 的环境变量里配置对应的 API 地址,官方文档有说明,这里不展开。
这里有个知识点想多说一句:知识库到底能不能存图片?能。Dify 的知识库支持把图片作为附件或文档一起入库,但图片本身不会被语义理解,它要么靠文件名、要么靠 OCR 之后的文字被检索到。如果你的手册里大量内容是结构图、电路图,纯靠 RAG 检索图片是抓不到语义的,建议把图片的关键信息写成文字描述,随图入库,检索效果提升非常明显。
3.2 分段策略:同一份手册,不同模式结果差别巨大
Dify 创建知识库时,最关键的选择是“分段模式”。默认有两种可选:
- 自动分段:系统根据段落标题和空白自动切分,对于结构良好的 Markdown 文档效果尚可。
- 自定义分段:按固定 token 大小切分,可以设置分段长度(如 500 token)和重叠长度(如 50 token)。
我一开始用自动分段,效果不太理想,因为手册里有很多并列的操作步骤,被切得七零八落。后来改用自定义分段,设置了分段长度 500、重叠长度 80,才稳定下来。
这里必须提一下 Dify 的高阶用法:父子分段(Parent-Child Chunking)。原理是把文档按两层结构切:子块(小片段)用来做检索匹配,父块(大的完整段落或章节)用来做生成上下文。这样既能保证匹配的精准度,又能保证送进大模型的内容是完整的段落,不会因为切得太碎导致上下文断裂。
在 Dify 知识库设置里可以配置是否启用父子分段,配置父子块的最大 token 数。我实测下来的配置是:
- 子块最大 token:300 到 500 之间。太小了匹配不到足够语义,太大了检索精度下降。
- 父块最大 token:1000 到 2000。这个值取决于你的手册段落有多长,原则是父块能覆盖一个完整的操作单元。
用自己的话解释为什么这样设置:子块小,检索时定位精准,不会把“温度设置”和不相干的“电压设置”揉在一起;父块大,生成回答时大模型能读到一整段完整逻辑,不会因为只有半截话而瞎猜。
3.3 清洗规则:页眉页脚和目录是最大的噪音源
导入文档后,Dify 会提示你配置清洗规则。很多人直接跳过,但这一步其实很关键。那本 100 页的手册,页眉页脚每页都有公司名称和文档编号,目录占了前 5 页,如果不清洗,这些内容会被切成大量重复片段,检索时造成严重干扰。
我的清洗规则经验:
- 把“公司名称、文档编号、第 N 页”这类页眉页脚信息设为忽略,声明为“重复子串”,这样所有命中该规则的片段会被自动过滤。
- 目录部分尽量在导入前就从文档里删掉,或者用清洗规则把它排除。目录本身没有信息量,还经常包含页码,容易误导检索。
- 手册里大量的“注意”“警告”等带有特殊标记的提示框,如果解析后保留了特殊符号,建议在清洗规则里清除,避免污染 embedding 向量。
3.4 入库后的质量验证:抽三个片段就知道行不行
知识库建好只是开始,必须验证分段质量。我每次入库后都会做下面这三件事:
- 随机抽查片段。在知识库的文档列表里点进任意片段,看看有没有完整的语义边界。如果一个 fragment 里标题和正文被切开了,或者表格被切成两半,就要调分段参数。
- 试检索。在知识库里直接试验一个典型问题,比如“如何校准温度传感器?”,看召回的前几名片段是不是真的包含校准步骤。如果召回的是手册里其他章节的内容,说明 chunk 切得有问题。
- 检查关键数字的完整性。设备手册里充满了量程、温度、压力、参数名和对应数值,如果这些数字恰好被切到了两个片段里,检索时必然丢信息。切分时用重叠长度(overlap)就是为了缓解这个问题。
这个验证过程看起来简单,但能帮你把检索质量的问题在源头就过滤掉一大半。很多人后来调到崩溃,其实问题出在分段上,而不是检索参数上。
4. 检索与重排序:回答质量的分水岭
4.1 三种检索模式,先搞懂再选
Dify 知识库关联到应用后,在“上下文”设置里可以选择检索模式。三种模式的差别,我用大白话说一下:
- 向量检索:把问题和每个片段都转成向量,用余弦相似度找最接近的片段。优点是能理解语义,比如问“温度怎么调”和手册里的“设定温度值”能匹配上;缺点是对精确关键词匹配不敏感。
- 全文检索:基于关键词匹配,类似搜索引擎。优点是查“PT100”这种精确型号时不会漏;缺点是不理解语义。
- 混合检索:把向量检索和全文检索的结果按权重合并,再用 Rerank 重排序。这是目前最稳的组合:先各自召回,再统一排序,既保语义又保精确。
纯向量检索最大的问题是同义词和精确词之间的平衡。设备型号、零件编号这种内容,语义上相近但字面上不同的词很容易被漏掉;而全文检索又解决不了“加热”和“升温”这种语义等价的问题。所以100 页手册这种既有大量术语又有大量操作语义的场景,我建议直接上混合检索,不要省这一点配置工夫。
4.2 TopK 和 Score 阈值:不是越大越好,也不是越小越好
Dify 的检索设置里有个“TopK”参数,表示最终召回多少个片段给大模型。很多人习惯直接拉满,其实 TopK 过大反而有害——塞给大模型太多无关内容,它会困惑,甚至引用错片段。
我实测的感受:
- TopK = 3 到 5 对大多数知识库问答最合适。如果是那种答案明确、步骤清晰的问法,3 个片段基本够了;如果是开放性问题,5 个更稳。
- 分数阈值(Score)是过滤低相关片段的闸门,设太低会混入噪音,设太高可能召回为空。建议先用默认值,然后看调试面板里实际召回的分数分布再做调整。我这边最终设的阈值是 0.5 到 0.6 之间,低于这个分数的片段基本都不相关。
这里给一个实操建议:别靠感觉调参,要看调试面板。Dify 每次问答的调试面板里会显示每一个召回片段的得分,你连续问十几个问题,就能看到匹配得好的问题和匹配得差的问题分别落在什么分数段,然后据此设置阈值。这个数据驱动的调法比猜靠谱得多。
4.3 Rerank 模型:什么时候必须上
如果你启用了混合检索,Dify 会提示你配置 Rerank 模型。Rerank 的作用是:把向量检索和全文检索召回的候选片段,用一个专门的模型重新算一遍相关性,把最合适的排到最前面。
我一开始没配 Rerank,直接用混合检索跑,回答质量时好时坏。后来配了 Rerank 模型后,效果提升非常明显。原因在于,向量检索和全文检索各自的排序逻辑不同,简单合并的 TopK 结果不一定是最优组合,Rerank 能对候选做一次精细的“最终审阅”。
Rerank 模型有两种接入方式:
- 本地部署:用开源的 BGE-Reranker 等模型,通过本地推理服务暴露 API。适合数据敏感、完全内网的环境。
- 走 API:一些商业模型服务商提供 Rerank API,配置方式和普通模型类似。
对外语和中文内容混排的场景,我建议可以用中文优化的 Rerank 模型。实测中文手册场景下,开源 BGE 系列的效果已经足够好。
需要注意一点:Rerank 不是必须从一开始就配置,但如果你发现“检索到的内容里明明有正确答案,AI 却答偏了”或者“TopK 片段里关键信息排得太靠后”,那就是该上 Rerank 的信号。
4.4 调参前后的实测对比
下面这组对比来自我实际调试过程中的一个问题:“手册里推荐的冷却液温度是多少?”调整前用的是纯向量检索,TopK 设为 2,没有 Rerank;调整后改为混合检索 + Rerank,TopK 设为 4。
| 配置 | 实际回答 | 问题点 |
|---|---|---|
| 纯向量,TopK=2,无 Rerank | “手册未明确说明冷却液温度,建议咨询厂商。” | 实际手册里有明确数值,但没被召回 |
| 混合检索,TopK=4,有 Rerank | “手册第 3 章设备参数中提到,冷却液温度建议控制在 25℃ 至 30℃ 之间。来源:设备参数表。” | 正确,且带引用片段 |
同一个知识库、同一个问题,效果却天差地别。这直观地说明:RAG 的质量瓶颈往往不在大模型本身,而在检索链路。检索不到,再强的模型也只能胡说或说“不知道”。
5. 应用编排与提示词:把检索结果变成可用答案
5.1 创建 Chatbot 应用并关联知识库
Dify 安装完成后,首页会引导你创建应用。选“聊天助手”类型,然后在应用编排页面的“上下文”部分,把你刚才建好的知识库加进去。这一步操作很简单,有一个细节值得注意:应用可以关联多个知识库,比如你以后有设备手册、产品手册、维修记录等多个知识库,可以在一个应用里都挂上,然后通过检索策略控制优先级,也可以在编排里手动指定每个知识库的权重。
我目前的应用就是“设备操作手册”一个知识库,但预留了多知识库的扩展位。因为在生产环境里,很可能把 FAQ、操作手册、故障代码表拆成三个知识库分开维护,检索时按问题类型路由到不同知识库,效果会好很多。这个后面在“Agentic RAG”的部分再细说。
5.2 提示词模板:怎么约束 AI 只用手册内容
Dify 内置的默认提示词能用,但距离“好用”还差一层。我最终的提示词大致长这样:
你是一名设备操作助手,请基于提供的知识库内容回答用户问题。 规则: 1. 只使用知识库中检索到的内容回答,不要使用自身先验知识。 2. 如果检索内容不足以回答问题,明确回复“根据当前手册内容,无法回答该问题”。 3. 回答中尽量引用具体的章节名称或来源片段编号。 4. 当问题涉及数值、型号时,必须完整保留知识库中的原始数值和单位,不得近似或改写。 5. 如果知识库某一片段包含自相矛盾的内容,请指出矛盾之处。这个提示词有几个设计意图:第一条和第二条是防幻觉,防止 AI 拿自己的知识出来“圆场”;第三条是溯源,方便用户在页面里看到答案依据;第四条是设备手册场景的关键,因为参数数值一旦被“润色”就可能出安全事故;第五条是用于发现手册本身的质量问题,实测中我就靠这条找到了原手册里两处自相矛盾的参数描述。
提示词这东西不需要写得花哨,要写清楚边界和约束,大模型才能稳定遵守。
5.3 自动溯源:让每个回答都有出处
Dify 在“功能”里打开“引用与归属”选项后,问答回复会自动附带引用的文档片段,用户在页面上能看到回答内容的来源。这不仅是体验问题,也是信任问题——只有能指出“我说的是手册第几章”,员工才敢照着这个 AI 的建议操作设备。
我当初做这个项目的一个验收项,就是“所有回答必须显示引用来源”。Dify 把这件事做成了开关,不需要自己折腾前端。如果你用 API 对接自己的系统,响应体里也有引用片段的字段,可以直接展示出来。
5.4 调试三板斧:是检索问题还是生成问题
调试 Dify 应用时,我固定的三板斧是这样的:
第一板斧,看上下文里召回的内容对不对。在调试面板展开“上下文”,确认 Launched 出来的片段是否覆盖了问题的答案。如果召回片段里根本没有答案,那就去调检索参数,别碰提示词。
第二板斧,单独测试检索不经过生成。Dify 的知识库页面里可以直接做召回测试,输入问题看召回结果,这样能快速判断是分段问题、向量问题还是重排问题。
第三板斧,固定召回结果,改提示词。如果召回内容已经没问题但回答仍然跑偏,那问题出在生成环节。此时把提示词调得更严格,或者换一个更稳的大模型,再测。
这三板斧的核心思路是把 RAG 这条链路拆开:检索是检索,生成是生成,永远不要混在一起下结论。我见过很多人一遇到“回答不对”就疯狂调提示词,调了半天才发现召回的内容本身就是错的。
6. 上线之后的那些事:瓶颈、优化与后续扩展
6.1 RAG 在实际运行中最容易掉链子的环节
把应用真正放给同事用之后,我观察到的几个高频问题,和网上常说的 RAG 瓶颈基本对得上:
- 分段质量是永远的源头。手册更新了某几页,新片段的分段风格和旧内容不一致,召回结果就开始变差。
- 长尾问题召回不足。员工问的问题往往带着口语缩略,比如“温度设多少合适”,而手册原文是“温度设定值”。向量检索能部分缓解,但不是全部,Rerank 能再救回一部分,仍然有漏网之鱼。
- 多轮对话的上下文污染。用户问完 A 问题又问 B 问题,检索片段里可能混入 A 问题的残留内容,导致 B 问题回答被干扰。Dify 里有“多轮对话”的上下文清理设置,需要按场景调整。
- 知识库版本更新与陈旧内容。手册更新后,旧版片段如果不及时下线,新旧内容会同时被检索到,AI 可能给出“过时”的答案。这就是我在提示词里加“自相矛盾时指出来”的另一个原因。
6.2 从基础 RAG 走向 Agentic RAG:当知识库多了之后
如果公司有多个知识库,比如设备手册、产品 FAQ、故障代码表、培训材料,那就是从“单库问答”走向“多库路由”的场景。基础 RAG 会把所有知识库的片段混在一起检索,效率和精度都会下降。更好的方案是让 AI 先判断问题属于哪个知识库,再去对应库里检索,这就是常说的 Agentic RAG 的雏形。
Dify 的工作流编排模块可以做到这一点:创建一个分类节点,让模型先判断问题类型,然后根据类型走不同的知识库检索分支,最后统一汇总生成答案。这个改造我目前正在做,效果比单库硬检索要好,尤其是当问题涉及“这个故障对应哪个代码”这类需要检索维修库的场景,路由到正确的库之后,回答准确率提升很明显。
6.3 知识库的增量更新:别等手册改版才想起来
手册不是静态的,它会被修订、增补、替换。我在实际运维中总结了一个简单的更新节奏:
- 每次手册改版,用流程化方式导出新的 Markdown,重新入库。
- 入库前对比旧版本,找出新增和删除的章节。
- 在 Dify 知识库里删除旧文档,上传新文档,重建索引。
- 抽几个关键问题做回归测试,确认新旧版本切换后没有回答“过时参数”。
这个流程看着繁琐,但比“不问不管、问了才更新”靠谱得多。知识库是拿来用的,不是拿来建的,内容保鲜才能保证回答可信。
6.4 二次开发方向:Dify 能嵌入现有系统吗
Dify 提供完整的 API,应用编排完成后可以拿到 API 密钥,通过 HTTP 接口调用对话和知识库检索能力。这意味着你可以把 Dify 嵌入到公司自己的工单系统、企业微信机器人、运维平台里,前端界面自己写,后端问答能力由 Dify 提供。
做过一次对接后,我的感受是 Dify 更像一个“RAG 中间件”:知识库管理、检索、编排都在 Dify 里完成,业务系统只需要通过 API 发送消息、接收回复和引用。二次开发的重点往往不在 Dify 本身,而在于把引用内容的结构化数据转换为业务系统需要的格式。
如果你需要在现有页面上嵌入聊天窗口,Dify 的 WebApp 模式也支持 iframe 嵌入,几分钟就能上线一个可用页面,适合先给团队试用,后续再逐步替换成定制化前端。
写在最后的实操体会
如果只挑一条最有价值的经验,那就是:先保证检索质量,再谈大模型效果。我调试这个项目的过程中,大多数“回答不对”的问题,最后都回溯到了分段不合理、检索参数不合适、Rerank 没配上这些环节,而不是大模型“不够聪明”。把这一层做好,哪怕模型不是最顶级的,回答质量也能稳定在可用水平。
还有一点想提醒大家,知识库 RAG 类项目真正的验收标准不是“demo 跑通”,而是“持续用不翻车”。文档更新、分段策略、检索调优这些运维工作,在项目上线后才是真正的日常。用 Dify 这类开源工具的好处是,这些环节都有可视化的配置界面和调试面板,踩坑了起码有地方下手查。希望这篇实战记录能帮你少走一些弯路。