项目案例-构建 AI 驱动的文档搜索系统-2

环境搭建指南


一、项目概述

本项目是基于Spring AI + PgVector的智能文档检索系统,支持向量搜索、关键词搜索和混合搜索等功能。


二、系统要求

硬件要求

  • 内存:8GB RAM(推荐16GB)
  • 存储:至少10GB可用空间
  • CPU:支持AVX指令集的多核处理器

软件要求

  • Java 17 或java21
  • Maven 3.6+ 或 Gradle 7.0+
  • PostgreSQL 16+(需安装pgvector扩展)
  • Git

三、开发环境搭建

1、前置条件

安装PostgreSQL并配置pgvector。本人是宝塔安装一件安装既可,但是、宝塔安装的话 🈚 扩展需要自已安装pgvector扩展

✅ 安装步骤(详细流程)参考 ✅ 宝塔 PostgreSQL 安装 contrib 扩展完整指南

✅ UUID创建报错参考 ✅ 宝塔 PostgreSQL 安装UUID指南

在使用 PGvector 之前,需要确保 PostgreSQL 实例已启用以下扩展:


sql 复制代码
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

2、手动创建向量存储表

在数据库中创建向量存储表(推荐在应用启动时由 Spring AI 自动创建):

sql 复制代码
CREATE TABLE IF NOT EXISTS vector_store (
    id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,
    content text,
    metadata json,
    embedding vector(1536)  -- 1536 是默认的嵌入维度
);

CREATE INDEX IF NOT EXISTS vector_index 
ON vector_store USING hnsw (embedding vector_cosine_ops);

💡 重要提示 :如果使用不同的嵌入维度,请将 1536 替换为实际的嵌入维度。PGvector 对 HNSW 索引最多支持 2000 个维度。


3、整合依赖

项目是一个基于Spring Boot的AI RAG(检索增强生成)应用,使用PostgreSQL和PgVector进行向量存储。以下是各个依赖的详细说明:


1. Spring Boot 核心依赖
  • spring-boot-starter-web : 提供Web开发支持,包括REST API、内嵌Tomcat等
  • spring-boot-starter-validation : 提供Bean验证支持(JSR-303)

2. Spring AI 相关依赖
  • spring-ai-pgvector-store :这是Spring AI框架中用于PgVector向量数据库的实现,允许将文档嵌入向量存储在PostgreSQL数据库中提供向量相似性搜索功能,支持RAG(检索增强生成)应用
  • spring-ai-markdown-document-reader : 专门用于读取和解析Markdown格式文档的组件,能够将Markdown文档转换为文本片段,便于后续处理,支持解析Markdown中的标题、段落、列表等结构化内容,通常与向量存储结合使用,用于构建知识库

3. 阿里云AI服务依赖
  • spring-ai-alibaba-starter-dashscope : 阿里云通义千问(DashScope)AI服务集成,提供大语言模型能力

4. 数据库相关依赖
  • postgresql : PostgreSQL数据库驱动
  • spring-boot-starter-jdbc : 提供JDBC数据库访问支持
  • spring-ai-pgvector-store : 与PostgreSQL集成的向量数据库功能,用于存储和检索向量嵌入

5. 开发辅助依赖
  • lombok : 简化Java代码的工具,自动生成getter、setter等方法
  • spring-boot-starter-test : 测试支持依赖

6. API文档工具
  • knife4j-openapi3-jakarta-spring-boot-starter : 增强版Swagger文档工具,提供API接口文档界面
xaml 复制代码
 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud.ai</groupId>
                <artifactId>spring-ai-alibaba-bom</artifactId>
                <version>1.0.0.2</version>  <!-- 1.0.0.4 笔记 -->
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-pgvector-store</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-markdown-document-reader</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

        <!--    接口文档    -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.4.0</version>
        </dependency>

    </dependencies>

4、 配置数据库连接

编辑 src/main/resources/application.yml 文件:

yml 复制代码
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/vector_store
    username: 你的用户名
    password: 你的密码
  ai:
   vectorstore:
      pgvector:
        index-type: HNSW
        distance-type: COSINE_DISTANCE
        dimensions: 1536
        max-document-batch-size: 10000 

5、 配置AI服务API密钥

在 application.yml 中配置阿里云通义千问API密钥:

yml 复制代码
spring:
  application:
    name: AiRag
  ai:
    dashscope:
      api-key: "xxxxx"
      chat:
        options:
          model: qwen-plus  [看你选择的模型]

6、配置 springdoc-openapi config
yaml 复制代码
# springdoc-openapi config
springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: 'default'
      paths-to-match: '/**'
      packages-to-scan:  com.atg.pgvector_practical.controller
# knife4j config
knife4j:
  enable: true
  setting:
    language: zh_cn

四、常见问题解决

1. pgvector扩展安装失败

  • 确保PostgreSQL版本 >= 14
  • 检查是否有足够的权限安装扩展
  • 验证PostgreSQL编译时是否支持扩展

可参考如下:

✅ 宝塔 PostgreSQL 安装 contrib 扩展完整指南
✅ 宝塔 PostgreSQL 安装UUID指南

✅ PostgreSQL + pgvector 远程连接使用指南(适用于 IntelliJ IDEA)


2. AI服务连接失败

  • 检查API密钥是否正确
  • 验证网络连接是否正常
  • 确认服务配额是否充足
相关推荐
阿明副业观察12 分钟前
2026年免费AI视频生成工具功能深度解析:有无水印、中文语音及商业用途考量
大数据·人工智能·ai作画·aigc·音视频·ai写作
收放扳机18 分钟前
PCB收放板设备机械手架构选型参考——三轴/四轴/六轴/蜘蛛手对比
人工智能·科技·架构·自动化·制造·pcb工艺
AKAMAI39 分钟前
Akamai 宣布与Anthropic达成 116 亿美元多年期协议,以支持其日益增长的需求
人工智能·云计算
甲维斯43 分钟前
我把“赶 Deadline”和AI做成了一款游戏
人工智能·游戏开发
代码不停44 分钟前
自动化测试(java)
java·开发语言·selenium·自动化
Smoothcloud润云1 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
hsfxuebao2 小时前
380K Star 的 OpenClaw 凭什么碾压 Hermes Agent?源码级架构对决——从 Gateway 到 Agent Loop 的五维拆解
人工智能
唠点键盘之外的2 小时前
26 向量数据库实战:从 0 搭一条能用的检索链路(pgvector + Spring AI)
数据库·人工智能·spring
冬奇Lab2 小时前
开源项目第235期:REA — 让 AI Agent 逆向任何东西,从网站/Electron 应用一路分析到二进制层
人工智能·开源·资讯
冬奇Lab2 小时前
LLM 驱动的自动化测试系列(11):API 测试为什么反而是 LLM 最保守的战场
人工智能·测试