项目案例-构建 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密钥是否正确
  • 验证网络连接是否正常
  • 确认服务配额是否充足
相关推荐
AI_小站2 小时前
6个GitHub爆火的免费大模型教程,助你快速进阶AI编程
人工智能·langchain·github·知识图谱·agent·llama·rag
xindoo2 小时前
GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers
人工智能·github
时间之里2 小时前
【深度学习】:RF-DETR与yolo对比
人工智能·深度学习·yolo
北京阿法龙科技有限公司2 小时前
数智化升级:AR 智能眼镜驱动工业运维效能革新
人工智能
abcnull2 小时前
用javaparser做精准测试
java·ast·静态代码分析·精准测试·javaparser
风落无尘2 小时前
《智能重生:从垃圾堆到AI工程师》——第二章 概率与生存
大数据·人工智能
j_xxx404_2 小时前
Linux:静态链接与动态链接深度解析
linux·运维·服务器·c++·人工智能
叶小鸡2 小时前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
收获不止数据库2 小时前
达梦9发布会归来:AI 时代,我们需要一款什么样的数据库?
数据库·人工智能·ai·语言模型·数据分析
hhb_6182 小时前
AI全栈编程生存指南
人工智能