pgvector + Ollama Ollama + Java 25+ Podman/Docker+ Spring AI

基于文档的RAG问答,本地向量化+向量库检索增强生成

Spring AI 编排检索与生成流程,Ollama 提供本地LLM与Embedding,PGVector 作为向量存储

✓ 本地运行,数据不出域✓ 支持 Naive/Advanced/Br ✕ 依赖容器运行 PGVector✕ 本地LLM性能受硬件限制

方案简介

本方案面向 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-naiverag/rag-sequential/rag-advancedrag/rag-branching 等子模块中体验不同 RAG 流程

4. 配置 Spring AI 连接信息

application.propertiesapplication.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-inputguardrails/guardrails-output 增加输入输出护栏
  • 可结合 patterns/memory 中的 JDBC 或 Vector Store Chat Memory 保留多轮对话上下文

优缺点

  • ✓ 本地运行,数据不出域
  • ✓ 支持 Naive/Advanced/Br
  • ✕ 依赖容器运行 PGVector
  • ✕ 本地LLM性能受硬件限制

出处

本方案挖掘自开源项目 ThomasVitale/llm-apps-java-spring-ai,方案内容与实施命令均来自其 README 原文。

方案出处
ThomasVitale/llm-apps-java-spring-ai:Samples showing how to build Java applications powered by Generative AI and LLMs
779 star Samples showing how to build Java applications powered by Generative AI and LLMs using Spring AI and Spring Boot.

本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。