你用 FastGPT 搭知识库,模型那栏填了自建中转的 Base URL 和 Key,结果要么报错、要么能建库但一问就答偏。问题通常不在提示词,而在两处:向量模型走没走通中转,以及文档切片切得对不对。这篇按接入顺序讲清楚每一步配什么、怎么验,以及答不准时先改哪一项。
你用 FastGPT 搭知识库,模型那栏填了自建中转的 Base URL 和 Key,结果要么直接报错,要么库是建起来了但一问就答偏。这大概率不是提示词的问题,而是两处:向量模型有没有真正走通中转,以及文档切片切得对不对。下面按接入顺序讲,每一步配什么、怎么验,以及答不准时先改哪一项。
读这篇前先说清适用范围:这是给已经能跑通中转、准备把知识库接上的人看的。如果你连对话都还没通,先去 /sites 把站选中,再回来配向量。另外,各家中转站开放的端点不一样,能不能调 embeddings 和 rerank,得去站内目录看它自己写的接口说明,不要想当然。
先分清 FastGPT 里的两类模型:对话模型和向量模型
FastGPT 里模型是分槽位配的,别把它们当成一个东西。对话模型负责组织语言、根据召回片段作答;向量模型只负责把文本变成可检索的向量。两者是独立的配置项,完全可以指向不同来源——比如对话走官方,向量走自建中转,或者反过来。
- 对话模型
- 读召回片段、生成最终回答的那个,回答风格和准确度主要由它决定
- 向量模型
- 把文档和提问都编码成向量做相似度检索,决定「能不能找到」,不决定「答得好不好」
- 重排模型
- 对初步召回结果再排一次序,可选组件,不是必装
排查时先定位是哪一类出错:库建不起来(上传文档报错、知识库一直空)基本是向量模型或接口的问题;库建好了但回答乱,通常是检索质量和对话模型那边。这两个方向的处理方式完全不同,混在一起改只会越改越乱。
把自建中转填进向量服务:Base URL、Key 与协议口径
FastGPT 的模型配置走 OpenAI 兼容格式,界面上填的是基础地址,不是完整的接口路径。最常见的错就是多一层或少一层版本段,比如该填到域名的地方把 /v1 也带上了,或者反过来该带版本段却没带。地址错的时候表现往往是 404 或者模型列表拉不出来,而不是明确说 Key 不对。
另一个容易踩的坑:中转站能不能调 chat 接口,和它有没有开放 embeddings、rerank 是两码事。有些站只代理对话,向量端点根本没转发。填之前先去 /sites 找这个站,看它的说明里有没有写支持向量和重排。地址和协议的具体写法差异,去 /base-url 核对当时的口径,别凭记忆拼。
- 填基础地址和 Key在模型供应商配置里选 OpenAI 兼容类型,Base URL 填到站方说明的那一层,Key 用中转站发的那个
- 拉一次模型列表保存后点测试或手动拉取模型,能列出向量模型名说明连通性没问题;报错就先只查地址和协议
- 单独测向量端点用同样的地址和 Key 调一次 embeddings,确认这个站确实开放了向量接口,而不是只代理对话
- 确认模型名口径到 /models 对照当前可用的向量与重排模型命名,不要直接抄别处的模型名
这四步做完再回 FastGPT 建知识库。顺序很重要:连通性没过就先别碰切片参数,否则你改了半小时切片,最后发现是地址写错了。
文本切片:分块大小、重叠与分隔符怎么定
切片本质是在「检索命中率」和「上下文占用」之间做取舍。块切太小,一句话被拆成两半,语义散了,检索时两边都不完整;块切太大,召回一整段但真正有用的那句话被淹在中间,模型容易抓不住重点,还白烧 token。
| 参数 | 调大之后 | 调小之后 | 什么时候该动 |
|---|---|---|---|
| 分块大小 | 单块信息完整,但噪音多、占上下文 | 命中更精准,但语义易被切断 | 块读起来像半截话就调大,召回后答不到点上就调小 |
| 重叠长度 | 防止句子被切断,代价是重复存储 | 省空间,但边界处容易缺上下文 | 文档里长句、跨段论述多时适当加;一般不超过块大小的小比例 |
| 分隔符 | 按标题层级切,保留文档结构 | 按空行或句号切,切得更碎 | 规范条款、FAQ、会议纪要各自的层级不同,默认分隔符往往不合适 |
判断标准很简单:把一个块单独拿出来读,它能不能独立回答一个小问题。能,这个切法就基本可用;读起来前言不搭后语,就说明切错了地方。FAQ 这种一问一答的语料适合按问答对切,条款类适合按条切,会议纪要适合按人和话题切,别全用一套默认。
- 先按文档类型分组,不同结构用不同分隔符,别指望一套参数通吃
- 块大小从中等值起步,拿一批真实问题测,命中不对再上下调
- 重叠别设太大,重复内容对检索没有增益,只会让上下文更挤
- 每份文档上传后看一眼切出来的块数和块内容,这比看配置项直观得多
先清洗再切片:进料这一步省不掉
扫描件、表格密集的 PDF、双栏排版的文档,直接喂进去切出来的基本是乱序文本。这种料检索再准也救不回来,因为你切的是错误的东西。清洗这步在 FastGPT 外面做,它这层只负责切和存。
最值得做的几件事:去掉页眉页脚和页码,把被换行切断的句子合并回去,删掉目录页和版权页。这些做完再上传,无效块会明显减少。表格优先转成结构化文本或者问答对,整张表当成一个块通常既超长又检索不到——用户问的是表里某个字段,你丢过去一整张表,等于没给。
检索环节:相似度阈值、召回条数与重排的取舍
这三个参数经常被一起乱改。召回条数给少了会漏答,给多了会把无关片段一起塞进上下文,反而干扰模型判断——模型不是筛子,你喂进去的东西它都会看。相似度阈值是过滤噪音的闸门,调太高会大面积查不到,调太低等于没过滤。
重排模型不是必选项。语料条数少、问题类型集中的场景,收益有限,装了也看不出来;语料多、用户提问方式发散的时候,重排把真正相关的排到前面,差别才明显。它是加在召回之后的一道排序,解决的是「找回来一堆,哪个最相关」。
- 先关阈值看原始召回把相似度阈值调到最低或关闭,用测试问题看召回结果里到底有没有正确片段
- 有正确片段但排得靠后这种情况加召回条数或加重排,不是调阈值
- 召回里根本没有正确片段问题多半在切片或语料,回头查分块和清洗,别在检索参数上耗
- 逐个参数单独调每次只动一个参数,固定同一批测试问题对比前后结果,一次改三样等于没改
判断「改了有没有用」得有基线:准备一批你已知答案的问题,记录改之前的召回和回答,改完再跑一遍。没有基线的话,凭感觉调参数只是在原地转圈。
接进应用:把知识库挂到对话流程上
配好向量模型不等于应用里就用了知识库。知识库要在应用的流程编排里显式挂上去,指定哪个节点去查它。这是「配了没生效」最常见的原因:模型配置全对,但对话流程里压根没连知识库,回答当然是模型自己编的。
挂上之后还要管提示词。要求回答带引用来源时,提示词里得写清「只依据检索到的内容作答,检索不到就说不知道」,不然模型会拿常识补全,看起来回答了,其实和你的语料无关。这条对准确性要求高的场景尤其重要。
还有一点:同一套语料换个对话模型,回答风格和贴合度都会变。模型换代的时候别只换配置就上线,按 /model-upgrade-migration-checklist 走一遍,用同一批测试问题验证新旧表现,确认没有退化再切。
出问题时的排查顺序:从连通性到内容质量
FastGPT 知识库出错,最忌讳一上来就改参数。正确的顺序是从底层往上走,每层确认没问题再往上一层,这样能少走很多弯路。
| 顺序 | 查什么 | 通过的表现 | 不通过怎么办 |
|---|---|---|---|
| 一 | 向量接口本身能否调通 | 能拉到模型列表,embeddings 请求有正常返回 | 查 Base URL、Key、该站是否开放向量端点,去 /sites 看说明 |
| 二 | 文档是否成功切块入库 | 上传后能看到切出来的块,块数合理 | 看格式是否需要先清洗,换分隔符重试 |
| 三 | 检索能不能命中 | 用一句语料里原话提问,召回结果里有它 | 查切片大小、阈值,排除清洗问题 |
| 四 | 模型作答质量 | 回答基于召回内容,问不到时肯说不知道 | 调提示词,或换对话模型对比 |
两个快速定位的经验:只有部分文档出问题,多半是那份文档的格式问题,不是全局配置;全部文档都答偏,才回头查模型和参数。另外记录每份文档切出来的块数,块数为零或明显偏少,说明在切分那步就失败了,后面检索当然什么都找不到。
什么情况下这套配置不适用
不是所有场景都值得搭知识库。语料只有几十页、问题类型又固定的情况,直接把内容整理好塞进上下文可能更省事,省掉建库、切片、调检索这一整套。搭检索增强是为了应对语料规模大或者问题发散,规模没到那个程度,它就是额外维护成本。
还有两类要提前想清楚。需要严格权限隔离、每条问答可审计的场景,自建中转的日志和可见性得另外评估,能不能跑通不代表合规上过得去,具体看站内 /sites 里各站的说明。对准确性要求高到必须人工复核的业务,检索增强只是降低出错概率,不能替代复核环节——它让模型少编,但不会保证每句都对。
- 语料小、问题固定:考虑直接塞上下文,别硬上知识库
- 要严格权限与审计:先评估中转的日志能力,别只看连通性
- 必须人工复核的业务:检索增强是降错,不是免责
- 语料全是扫描件且无法清洗:先解决 OCR,再谈切片和检索
常见问题
知识库建好了,但问什么都答不准,第一步该查什么?
先用一句原文里明确写过的话去检索,看召回的块对不对。召回不对就是切片或向量模型的问题,召回对了但答偏才是对话模型和提示词的问题。跳过这一步直接调提示词,通常白忙。
向量模型换了要重建知识库吗?
要。换向量模型等于换了一套坐标,原来存的向量和新模型的维度、语义空间都对不上,检索会整体失效。所以向量模型要在灌数据前定好,之后换模型就整库重跑一遍。
自建中转的向量接口调不通,一般卡在哪?
多数是地址层级写错、该站没有开放 embeddings 或 rerank 端点、以及 Key 权限不含这类接口。先拿接口工具单独打一次,确认能返回向量,再回 FastGPT 里填。
切片大小有没有通用推荐值?
没有。判断标准是块单独拿出来能不能独立回答一个小问题。条款类文档适合小块,叙述类适合大一些。建议准备十来个真实问题,调一次参数测一轮召回,用结果说话。
重排模型是不是必须配?
不是。语料规模小、提问方式和语料表述接近时,加了收益有限还多一层延迟和费用。语料多、问法发散、召回头几条经常不相关时,重排的差别才明显。