做 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。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐