接上篇文章说说遇到的问题:https://blog.csdn.net/DavidSoCool/article/details/160167181

根据这篇文档的操作搭建了“手机知识库”,问答时遇到了胡乱回答的问题,使用的是查询模式,当我询问的得到回答后,发现确实找到了我上传的txt文档,但是我点开引用的文档内容只有前半部分,导致回答我的问题变成瞎编的了。

实际上文档里面的内容:

基本参数
国内发布时间	2024年10月30日
电商报价	¥4199
上市日期	2024年10月30日
产品型号	荣耀 Magic7
使用场景	三防手机>,拍照手机>,智能手机>,音乐手机>,4G手机>,快充手机>,5G手机>,3G手机>,新品手机>,热门手机>,自拍手机>
机身颜色	绒黑色,雪域白,月影灰,天际蓝,朝霞金  查看外观>
指纹识别	超声波屏幕指纹识别>
面部识别	支持
外形
长度	162.1mm
宽度	75.8mm
厚度	7.95mm
重量	199g
硬件
CPU型号	高通 骁龙 8 Elite更多高通 骁龙 8 Elite手机>,手机性能排行>
CPU核心数	八核>
GPU型号	高通 Adreno 830
RAM容量	12GB>游戏运行流畅
RAM存储类型	LPDDR5X>
ROM容量	256GB>5.2万张照片2.2万首歌曲
存储卡	不支持容量扩展>
出厂系统内核	Android 15
操作系统	MagicOS 9.0
振动马达	X轴线性马达
扬声器	立体声双扬声器
屏幕
屏幕尺寸	6.78英寸
屏幕类型	全面屏(中置挖孔屏),直面屏>
屏幕比例	19.93:9
分辨率	2800x1264px
屏幕材质	OLED>
屏幕刷新率	120Hz(1-120)>
像素密度	453ppi
屏占比	93.2%
HDR技术	支持
屏幕亮度	HDR峰值亮度:5000nits 全局峰值亮度:1600nits
屏幕盖板	巨犀玻璃
摄像头
摄像头总数	四摄像头(后三)>
摄像头名称	后置摄像头1:广角镜头
后置摄像头2:超广角摄像头
后置摄像头3:长焦摄像头
像素	后置摄像头1:5000万像素
后置摄像头2:3200万像素
后置摄像头3:5000万像素
前置摄像头1:5000万像素
光圈	后置摄像头1:f/1.9
后置摄像头2:f/2.0
后置摄像头3:f/2.4
前置摄像头1:f/2.0
传感器尺寸	1/1.3英寸
广角	后置摄像头2:122°
前置摄像头1:90°
防抖功能	OIS光学防抖
闪光灯	后置:单LED闪光灯>
变焦倍数	后置:最大50倍数字变焦
网络与连接
网络类型	5G>,4G>,3G>
5G网络	移动5G(NR),联通5G(NR),电信5G(NR),广电5G(NR)更多5G手机>
SIM卡类型	双卡(Nano SIM卡)>
WLAN功能	双频WiFi,WiFi7(IEEE 802.11 a/b/g/n/ac/ax/be ),2x2 MIMO
定位导航	北斗(B1I+B1C+B2a三频),双频GPS(L1+L5),AGPS,Glonass,伽利略(E1 + E5a双频),蜂窝网络定位,WLAN网络定位
蓝牙	蓝牙5.4,支持BLE、SBC、AAC、LDAC、APTX、APTX HD
NFC	支持NFC>
红外功能	支持
机身接口	USB Type-C接口
其他网络参数	鸿雁通信
电池与续航
电池类型	不可拆卸式电池
电池容量	5650mAh大电池
有线充电	100w
无线充电	支持>,80w
无线反向充电	支持
功能与服务
三防功能	IP68和IP69等级
感应器	重力传感器,红外传感器,超声波指纹传感器,陀螺仪,指南针,环境光传感器,接近光传感器,加速度传感器,X轴线性马达,NFC
手机附件
包装清单	手机(含内置电池) x1 快速指南 x1 HONOR SuperCharge充电器 x1 Type-C数据线 x1 取卡针 x1 手机保护壳 x1 新机权益卡(含电子三包凭证) x1 TP保护膜(出厂已粘贴) x1
保修信息
保修政策	全国联保,享受三包服务
质保时间	1年
质保备注	主机1年,充电器1年
电话备注	7*24小时,普通话纠错问豆包

开始怀疑是文本块拆分的太小,调到了最大值1000(这里是AnythingLLM的最大值了),重叠改为128,top-k由原来的4改为8,

调整完后,需要重新上传文件再次向量化才会生效,完成向量化之后,再接着测试,还是依旧胡说。

后面把文档个问题交给ai分析,才发现是文档写的就由问题,拆分后上半部分很多“荣耀 Magic7”,但是后半部分却一个没有,重新把后半部分补充了几个“荣耀 Magic7”,这个问题算是解决了。。

修改后的文档:

荣耀 Magic7 基本参数
国内发布时间	2024年10月30日
电商报价	¥4199
上市日期	2024年10月30日
产品型号	荣耀 Magic7
使用场景	三防手机>,拍照手机>,智能手机>,音乐手机>,4G手机>,快充手机>,5G手机>,3G手机>,新品手机>,热门手机>,自拍手机>
机身颜色	绒黑色,雪域白,月影灰,天际蓝,朝霞金  查看外观>
指纹识别	超声波屏幕指纹识别>
面部识别	支持
外形
长度	162.1mm
宽度	75.8mm
厚度	7.95mm
重量	199g
硬件
CPU型号	高通 骁龙 8 Elite更多高通 骁龙 8 Elite手机>,手机性能排行>
CPU核心数	八核>
GPU型号	高通 Adreno 830
RAM容量	12GB>游戏运行流畅
RAM存储类型	LPDDR5X>
ROM容量	256GB>5.2万张照片2.2万首歌曲
存储卡	不支持容量扩展>
出厂系统内核	Android 15
操作系统	MagicOS 9.0
振动马达	X轴线性马达
扬声器	立体声双扬声器
屏幕
屏幕尺寸	6.78英寸
屏幕类型	全面屏(中置挖孔屏),直面屏>
屏幕比例	19.93:9
分辨率	2800x1264px
屏幕材质	OLED>
屏幕刷新率	120Hz(1-120)>
像素密度	453ppi
屏占比	93.2%
HDR技术	支持
屏幕亮度	HDR峰值亮度:5000nits 全局峰值亮度:1600nits
屏幕盖板	巨犀玻璃
摄像头
摄像头总数	四摄像头(后三)>
摄像头名称	后置摄像头1:广角镜头
后置摄像头2:超广角摄像头
后置摄像头3:长焦摄像头
像素	后置摄像头1:5000万像素
后置摄像头2:3200万像素
后置摄像头3:5000万像素
前置摄像头1:5000万像素
光圈	后置摄像头1:f/1.9
后置摄像头2:f/2.0
后置摄像头3:f/2.4
前置摄像头1:f/2.0
传感器尺寸	1/1.3英寸
广角	后置摄像头2:122°
前置摄像头1:90°
防抖功能	OIS光学防抖
闪光灯	后置:单LED闪光灯>
变焦倍数	后置:最大50倍数字变焦
荣耀 Magic7网络与连接
网络类型	5G>,4G>,3G>
5G网络	移动5G(NR),联通5G(NR),电信5G(NR),广电5G(NR)更多5G手机>
SIM卡类型	双卡(Nano SIM卡)>
WLAN功能	双频WiFi,WiFi7(IEEE 802.11 a/b/g/n/ac/ax/be ),2x2 MIMO
定位导航	北斗(B1I+B1C+B2a三频),双频GPS(L1+L5),AGPS,Glonass,伽利略(E1 + E5a双频),蜂窝网络定位,WLAN网络定位
蓝牙	蓝牙5.4,支持BLE、SBC、AAC、LDAC、APTX、APTX HD
NFC	支持NFC>
红外功能	支持
机身接口	USB Type-C接口
其他网络参数	鸿雁通信
荣耀 Magic7电池与续航
电池类型	不可拆卸式电池
电池容量	5650mAh大电池
有线充电	100w
无线充电	支持>,80w
无线反向充电	支持
荣耀 Magic7功能与服务
三防功能	IP68和IP69等级
感应器	重力传感器,红外传感器,超声波指纹传感器,陀螺仪,指南针,环境光传感器,接近光传感器,加速度传感器,X轴线性马达,NFC
荣耀 Magic7手机附件
包装清单	手机(含内置电池) x1 快速指南 x1 HONOR SuperCharge充电器 x1 Type-C数据线 x1 取卡针 x1 手机保护壳 x1 新机权益卡(含电子三包凭证) x1 TP保护膜(出厂已粘贴) x1
荣耀 Magic7保修信息
保修政策	全国联保,享受三包服务
质保时间	1年
质保备注	主机1年,充电器1年

本质上就是给后半段"贴标签",让向量检索能顺着关键词摸过去。折腾半天参数都没想到是文档结构的问题。

以后如果还有类似的参数表、清单类文档,都可以用这个思路:把核心关键词在文档里多撒几遍,让每个切片都能"雨露均沾"。

我对AI提了一个文档切分关联性的问题,下面是AI的回答:

我的问题:
    我有个问题,就是文章我是以一个整体文档进行上传的,即使被分片了,不应该还是有关联性吗?

AI的回答如下:
    这是一个非常深刻的问题!你触及到了 RAG(检索增强生成)系统中最反直觉的一个核心机制。
简单直接的回答是:在向量数据库的“检索”阶段,切片之间的关联性几乎为零。它们变成了互不认识的“孤岛”。
虽然你上传的是一个整体文档,但在 AnythingLLM(以及绝大多数 RAG 系统)内部,发生了一个“粉碎”的过程。我来为你拆解一下为什么“整体性”会丢失,以及为什么加上关键词就能解决问题。
1. 为什么“整体关联”会失效?
你可以把向量数据库想象成一个巨大的图书馆,而不是一个阅读器。
上传时(入库):
系统把你的文档像切蛋糕一样切开了。
切片 A(头部): “荣耀 Magic7 参数表...”
切片 B(中部): “屏幕亮度 1600nits...”
切片 C(尾部): “电池 5650mAh...”
系统把这三个切片扔进图书馆的不同书架上。虽然它们来自同一本书,但在图书馆的索引里,它们只是三张独立的卡片。切片 C 并不知道切片 A 的存在,切片 A 也不知道切片 C 是谁。
提问时(检索):
你问:“荣耀 Magic7 电池多大?”
系统拿着这个问题去图书馆找最像的卡片。
系统发现 切片 A 里有“荣耀 Magic7”,匹配度 90 分。
系统发现 切片 C 里只有“电池 5650mAh”,没有“荣耀”二字,匹配度可能只有 60 分。
关键点来了: 如果你的设置只允许取回前 4 名(Top-K=4),系统只把 切片 A 拿走了。切片 C 因为分数不够,被永远留在了书架上。
结论: 在检索阶段,系统只看“切片”和“问题”像不像,不看“切片”和“切片”是不是亲戚。
2. 为什么加上关键词就“复活”了?
当你手动在文档后半部分加上“荣耀 Magic7”这几个字时,你实际上是在修补索引。
修改后的切片 C: “荣耀 Magic7 电池 5650mAh...”
新的检索过程:
你问:“荣耀 Magic7 电池多大?”
系统去图书馆找,发现 切片 C 里竟然也有“荣耀 Magic7”!
于是,切片 C 的匹配度瞬间飙升到 95 分。
系统高高兴兴地把 切片 C 从书架上拿下来,和切片 A 一起喂给大模型。
3. 大模型其实很委屈
很多时候,并不是大模型(DeepSeek-R1)不够聪明,而是它根本没机会看到全文。
RAG 的工作流是: 检索 -> 筛选 -> 生成。
只有通过了“检索”这一关的内容,才能进入“生成”阶段。
如果后半段在“检索”阶段因为缺乏关键词被过滤掉了,大模型面对只有前半段的资料,只能根据它自己的训练记忆去“猜”后半段,这就导致了你觉得它在“瞎编”。
总结
你原本以为的流程:
上传文档 -> 系统理解全文 -> 回答问题
实际的 RAG 流程:
上传文档 -> **切碎成互不相关的碎片** -> **只抓取最像问题的碎片** -> 拼凑给模型 -> 回答问题
所以,你的操作(在尾部加关键词)是非常符合 RAG 原理的“元数据注入”技巧。这相当于给每一个碎片都贴上了“我是荣耀手机的一部分”的标签,确保它们能被顺利捞出来。

接着问AI大厂是怎么解决这个问题的:

我提问:大公司对于这种问题都是怎么解决的?

AI的回答:
大公司解决这个问题的核心思路非常明确:不再让 AI 去“猜”上下文,而是通过工程化手段,把上下文“硬塞”进每一个切片里。
在业界,这被称为“文档解析与分块策略(Document Parsing & Chunking Strategy)”的优化。大厂(如阿里、微软、字节等)在处理企业级知识库时,绝对不会直接把一个 TXT 或 PDF 扔进去就不管了。
针对你遇到的“文档后半段丢失”以及“切片断裂”问题,大公司通常采用以下 4 种成熟的工程化方案:
1. 父子索引模式 —— 最主流的解决方案
这是目前大厂解决“检索精准度”与“上下文完整性”矛盾的标准答案(参考资料中提到的 Small2Big 或 Parent-Child Retrieval)。
原理:
子切片(Child): 把文档切得很碎(比如 200 字),只用来做向量检索。因为内容少且聚焦,检索非常精准。
父切片(Parent): 记录该子切片所属的完整段落或完整文档块(比如 2000 字)。
流程:
用户提问,系统在“子切片”里找到了匹配的那一小段(比如“电池 5650mAh”)。
关键一步: 系统不直接把这一小段喂给 AI,而是根据 ID 找到它的“父亲”(包含“荣耀 Magic7 电池参数...”的那一大段)。
把“父亲”喂给大模型。
效果: 既保证了能搜到(因为切片小,特征明显),又保证了 AI 看到的上下文是完整的(因为喂的是父级)。
2. 智能文档解析 —— 解决“表格与结构”丢失
你遇到的文档是典型的“参数表”,这对普通 RAG 是噩梦。大厂会使用专门的文档解析模型(如阿里的 DocMind、微软的 Unstructured 等)。
做法:
表格重构: 系统识别出这是一个表格,不会按行切分,而是把整个表格转换成 Markdown 格式,或者转换成自然语言描述(例如:“荣耀Magic7的电池容量为5650mAh,支持100W快充...”)。
层级感知: 系统会识别文档的标题层级(H1, H2)。在切分时,自动把“当前标题”作为元数据附加到每一段文本前面。
对应你的情况: 如果用大厂的解析器,它会自动把“荣耀 Magic7”这个标题提取出来,拼接到每一行参数前面,自动完成了你手动做的工作。
3. 滑动窗口与重叠 —— 基础但必要的保底
这是最基础的工程手段(参考资料中提到的 Overlapping Window)。
做法: 切片时不是“一刀切”,而是“重叠切”。
切片 1:第 1-1000 字。
切片 2:第 900-1900 字(重叠 100 字)。
作用: 确保关键的连接词、主语不会因为切分正好切在中间而丢失。虽然不能完全解决长文档的主语丢失问题,但能大幅减少“断头”现象。
4. 语义分块 —— 让 AI 决定怎么切
大厂不再单纯按“字符数”切分,而是按“意思”切分(参考资料中提到的 Semantic Chunking)。
做法:
系统先通读文档,计算句子之间的语义相似度。
只要语义是连贯的(都在讲电池),就把它们归为一个块。
一旦话题突变(开始讲保修政策),就强制切分。
效果: 这样切出来的块,天然就是语义完整的,不会出现“上半句讲电池,下半句讲保修”的混乱情况。
总结:大厂 vs 个人用户的区别
表格
维度	个人/初级玩法	大厂/生产级玩法
文档处理	直接上传 TXT/PDF	先解析:转 Markdown,提取表格,清洗噪音
切片方式	固定长度(如 1000 字符)	父子索引:小切片检索,大块生成
上下文	依赖模型“猜”	元数据注入:自动把标题、文件名拼接到切片里
核心逻辑	“希望能搜到”	“确保搜到的每一块都自带完整背景”

总结袭来最好就是把文档转markdown,标题、文件名拼接到切片里。和大厂的区别就是,一个手动,一个自动化。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐