基于文档的RAG问答,本地向量化+向量库检索增强生成
Spring AI 编排检索与生成流程,Ollama 提供本地LLM与Embedding,PGVector 作为向量存储
方案简介
本方案面向 Java 开发者,演示如何使用 Spring AI 框架结合 Ollama 本地大语言模型与 PGVector 向量数据库,构建基于自有文档的检索增强生成(RAG)问答系统。仓库主项目 ThomasVitale/llm-apps-java-spring-ai 是一个 Java + Spring AI 的 LLM 应用样例集合,其中专门设置了 use-cases/question-answering 与 rag/ 等模块演示 RAG 流程。整套方案适合希望在本地或私有环境中避免敏感文档外传、又需要将 LLM 能力接入企业知识库的 Java 后端工程师参考。
亮点与能力
方案具备以下能力:
- 通过 Spring AI 统一抽象接入多种 LLM 与 Embedding 提供方
- 在本地使用 Ollama 跑聊天与 Embedding 模型,避免外部 API 调用
- 使用 PostgreSQL 的 PGVector 扩展作为向量存储
- 支持多种 RAG 流程:Naive(朴素顺序检索)、Advanced(高级)、Branching(分支)、Conditional(条件)
- 在 use-cases 下提供完整可运行的 Question Answering 示例
- 文档读取器(PDF/Text/JSON/Markdown/Tika)与转换器(Metadata/Splitters)配套齐全
- 与 Chatbot、Semantic Search、结构化抽取、文本分类等用例共享同一套模型与数据栈
前置要求
前置要求:
- Java 25
- Podman 或 Docker(用于运行 PGVector 容器)
- 本地或远程可用的 Ollama 实例,并预拉取所需聊天与 Embedding 模型
- PostgreSQL + PGVector 扩展(通常以容器方式启动)
实施步骤
实施步骤参考如下:
1. 启动 PGVector(向量库)
使用 Podman 或 Docker 启动带 PGVector 扩展的 PostgreSQL 容器(具体命令以各用例子目录下的文档为准)。
2. 准备 Ollama 与模型
确保 Ollama 已在本地或指定地址运行,并拉取 RAG 示例所需的聊天模型与 Embedding 模型。
3. 进入 RAG 示例工程
- 选用
use-cases/question-answering作为入门级问答示例 - 或在
rag/rag-sequential/rag-naive、rag/rag-sequential/rag-advanced、rag/rag-branching等子模块中体验不同 RAG 流程
4. 配置 Spring AI 连接信息
在 application.properties 或 application.yml 中配置 Spring AI 指向 Ollama 与 PGVector(具体键值以子模块文档为准)。
5. 加载文档
通过 data-ingestion/document-readers 中的读取器(PDF/Text/JSON/Markdown/Tika)将自有文档读取为 Document 列表。
6. 切分并向量化
使用 data-ingestion/document-transformers/splitters 将文档切分为适合 LLM 上下文窗口的块,并由 Ollama Embedding 模型生成嵌入写入 PGVector。
7. 启动应用并提问
以 Spring Boot 方式启动 Java 应用,调用问答接口验证基于文档的检索增强生成效果。
使用与配置要点
使用与配置要点:
- Spring AI 屏蔽了不同模型提供方差异,相同代码可指向 Ollama、OpenAI 或 Mistral AI
- 向量存储使用 PGVector,可在同一 PostgreSQL 实例上与业务数据共存
- 文档加载管线:DocumentReader → Splitters → Metadata Enrichment → Embedding → VectorStore
- RAG 检索阶段:用户问题 → Embedding → PGVector 相似度检索 → TopK 上下文 → LLM 生成答案
- 可结合
guardrails/guardrails-input与guardrails/guardrails-output增加输入输出护栏 - 可结合
patterns/memory中的 JDBC 或 Vector Store Chat Memory 保留多轮对话上下文
优缺点
- ✓ 本地运行,数据不出域
- ✓ 支持 Naive/Advanced/Br
- ✕ 依赖容器运行 PGVector
- ✕ 本地LLM性能受硬件限制
出处
本方案挖掘自开源项目 ThomasVitale/llm-apps-java-spring-ai,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。