KnowFlow Agent Day10:实现文档切片与数据保存

一、今天完成的内容

今天继续开发 KnowFlow Agent,主要完成了文档切片功能。

前面的 Day08 和 Day09 已经实现了文档信息管理,以及 Spring Boot 调用 FastAPI 解析文档。今天在这个基础上,把解析后的长文本拆成多个较短的文本片段,并保存到系统中,为后续的 Embedding 和 RAG 检索做准备。

本次新增了以下接口:

复制代码
POST /api/documents/{id}/chunks
GET  /api/documents/{id}/chunks
POST /ai/documents/chunk

其中,FastAPI 负责执行文本切片,Spring Boot 负责业务处理和保存切片数据。

二、什么是文档切片

文档切片就是把一篇较长的文档拆成多个较短的文本片段。

例如,一份企业售后手册可能包含退货、退款、维修和物流等内容。如果直接把整份文档交给大模型,不仅会浪费 Token,还可能让模型难以找到真正相关的信息。

切片之后,系统可以只查找与用户问题最相关的几个片段,再把这些内容交给大模型。

整体流程如下:

复制代码
长文档
  ↓
拆分成多个切片
  ↓
保存切片
  ↓
根据用户问题查找相关切片
  ↓
交给大模型生成回答

三、chunkSize 是什么

chunkSize 表示每个切片允许包含的最大字符数。

例如,一篇文档有1000个字符:

复制代码
chunkSize = 500,大约拆成2个切片
chunkSize = 200,大约拆成5个切片

chunkSize 不能设置得太大,否则一个切片中可能包含很多无关内容,影响检索准确率;也不能设置得太小,否则一句完整的话可能会被拆开。

项目当前默认值为:

复制代码
{
  "chunkSize": 500
}

四、为什么需要 overlap

overlap 表示相邻切片之间重复保留的字符数。

假设一句话刚好在切片边界处被截断:

复制代码
切片1:用户可以在收到商品七天内
切片2:申请退货,运费由商家承担

这两个切片单独来看,表达的信息都不够完整。

加入重叠内容后:

复制代码
切片1:用户可以在收到商品七天内
切片2:收到商品七天内申请退货,运费由商家承担

第二个切片保留了前面的部分内容,语义会更加完整。

项目当前的默认配置为:

复制代码
{
  "chunkSize": 500,
  "overlap": 50
}

表示每个切片最多500个字符,相邻切片重复保留50个字符。

五、切片是一个一个查找吗

切片保存后,并不是每次都从第一条开始逐个查找。

后续系统会使用 Embedding,把每个切片转换成一组数字,也就是向量。用户的问题同样会被转换成向量,然后通过向量检索找到语义最相近的几个切片。

例如,用户询问:

复制代码
质量问题退货时,运费由谁承担?

系统会找到类似下面的内容:

复制代码
Top 1:质量问题产生的退货运费由商家承担
Top 2:用户可以在签收后七天内申请退货
Top 3:退款将在审核通过后到账

系统通常只把最相关的3到5个切片交给大模型,不需要把整份知识库都发送过去。

六、今天实现的业务流程

今天实现的完整流程是:

复制代码
Spring Boot 接收文档内容
        ↓
调用 FastAPI 切片接口
        ↓
FastAPI 返回多个文本片段
        ↓
Spring Boot 保存切片
        ↓
更新文档切片数量和解析状态

切片数据可以使用内存保存,也可以在启用 MySQL 后保存到 kf_document_chunks 表。

当同一份文档重新切片时,系统会先清除旧切片,再保存新的结果,避免产生重复数据。删除文档时,对应的切片也会一起删除。

七、接口请求示例

生成文档切片:

复制代码
POST /api/documents/1/chunks
Content-Type: application/json

请求内容:

复制代码
{
  "content": "这里是一段需要进行切片的企业售后知识文本......",
  "chunkSize": 500,
  "overlap": 50
}

查询文档切片:

复制代码
GET /api/documents/1/chunks

系统会按照切片序号,从前到后返回该文档的所有切片。

八、测试结果

今天补充了切片生成、重叠内容和错误参数校验等测试。

复制代码
Spring Boot:16个测试全部通过
FastAPI:4个测试全部通过

九、今天的总结

通过今天的开发,我理解了文档切片并不只是简单地把文章截成几段,还要考虑切片大小、上下文重叠、重复切片和数据保存等问题。

Day10 完成后,项目已经能够把企业文档转换成适合检索的小段文本。下一步将学习 Embedding,把这些切片转换成向量,为真正的 RAG 相似度检索做准备。

相关推荐
鬼手爱剪辑5 分钟前
短剧AI 配音技术的难点、原理、开源和闭源软件汇总-2026 年
人工智能
田里的水稻6 分钟前
PyTorch_Dataloader\TensorBoard---数据加载与可视化
人工智能·pytorch·python·神经网络·机器学习
卿卿的产品经理日记12 分钟前
【AI产品经理实战】Day 38|try-except 踩坑实录:报错是数据
人工智能·笔记·python·学习·产品经理
cxj751414 分钟前
GEO 工程化实践:关键页面的快慢双轨更新与多引擎引用维护
人工智能·geo·geo优化
Java_AI工程师15 分钟前
Spring4 / SpringBoot1.x 老项目想接入 AI?不用升级框架!3 套无痛落地方案
java·人工智能·spring boot
znnnk15 分钟前
【AI技术】Vibe Coding 实践指南:从项目规划到高效开发
人工智能·ai·ai编程·ai ide·vibe coding
Simon_lca21 分钟前
ZARA、H&M、SHEIN验厂差异全对比:一套底层记录,三套接口输出
大数据·人工智能·经验分享·科技·制造
爱喝雪碧的可乐23 分钟前
DeepSeek 崩了近5小时:一次故障扒透「单点依赖、重试风暴与大模型高可用」
大数据·人工智能·deepseek
GlobalTradercrb26 分钟前
独立站SEO先写博客还是先优化产品页?看站点阶段
数据库·人工智能·google·pdf·go·seo
田里的水稻31 分钟前
FA_CNN卷积神经网络三---非线性激活函数PyTorch
人工智能·pytorch·神经网络·机器学习·cnn