项目案例-构建 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密钥是否正确
  • 验证网络连接是否正常
  • 确认服务配额是否充足
相关推荐
tap.AI1 天前
Agent Skills(二)架构深度解析:渐进式披露——解决智能体“上下文膨胀”的终极方案
人工智能
Niuguangshuo1 天前
理解MCMC、Metropolis-Hastings和Gibbs采样:从随机游走到贝叶斯推断
人工智能·神经网络·机器学习
棒棒的皮皮1 天前
【深度学习】YOLO模型精度优化全攻略
人工智能·深度学习·yolo·计算机视觉
淺川之夏1 天前
abstract 类,里面引用@Autowired ,使用注入类的方法,报空指针异常
java·开发语言
疯狂成瘾者1 天前
后端Spring Boot 核心知识点
java·spring boot·后端
集和诚JHCTECH1 天前
BRAV-7722赋能手术机器人:高性能控制方案,守护精准手术的每一刻
人工智能·嵌入式硬件·计算机视觉
Jouham1 天前
瞬维智能丨行业深度:AI智能重构B2B高客单价领域获客全链路实践
人工智能·重构
xwz小王子1 天前
PNAS:神经形态机器人电子皮肤
网络·人工智能·机器人
中科天工1 天前
如何选择适合的自动化包装解决方案?
大数据·人工智能·智能