从零实操 Spring AI 第 5 篇:准备、读取并切分知识库文档
·
做 RAG 之前,很多人第一反应是向量数据库。
但真正影响效果的,往往是文档本身。
这一篇先处理知识库文档:准备、读取、切分。
答案先说
这一篇只做一件事:准备 Markdown 知识库文档,并在程序中读取、切分成文本片段。
读完并跟着做完后,项目会有一个明确的新增能力,而不是只停留在概念介绍。
上一篇做到哪了
第 4 篇我们接入了 Ollama 本地模型。
这篇会在上一节的基础上继续往前走。
这张图就是本篇的主线。先把流程看清楚,再进入代码会轻松很多。
核心概念
RAG 不是从模型开始,也不是从向量库开始,而是从文档开始。
文档质量、目录结构、切分方式,都会影响后面的检索和回答效果。
开始实操
1. 准备文档目录
docs
├── company
├── product
└── faq
2. 读取 Markdown 文档
@Service
public class DocumentLoadService {
public List<String> loadMarkdownDocuments() {
// 后续补充真实读取逻辑
return List.of();
}
}
3. 切分文档
@Service
public class DocumentSplitService {
public List<String> split(String content) {
// 后续补充真实切分逻辑
return List.of();
}
}
4. 添加测试接口
@GetMapping("/documents")
public List<String> documents() {
return documentLoadService.loadMarkdownDocuments();
}
运行效果
这里后续补充文档目录、读取结果和切分片段示例。
踩坑记录
这里先列出本篇最可能遇到的问题,后面实操时再补充真实截图和日志。
- 文档太短,检索效果不明显
- 文档内容重复,模型回答混乱
- 中文文件名或路径读取异常
- 片段太短导致语义不完整
- 片段太长导致检索不精准
- 没有保留文档来源和片段序号
项目里怎么理解
这一篇解决的是 RAG 的数据入口。只有资料被清晰地加载和切分,后面生成 Embedding 和向量检索才有意义。
本篇小结
这一篇完成的不是一个孤立知识点,而是让项目继续向最终的“企业知识库问答助手”靠近了一步。
下一篇预告
下一篇我们会为文档片段生成 Embedding,并接入 pgvector。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)