项目案例-构建 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密钥是否正确
  • 验证网络连接是否正常
  • 确认服务配额是否充足
相关推荐
liliangcsdn8 分钟前
LLM复杂数值的提取计算场景示例
人工智能·python
小和尚同志14 分钟前
OpenCodeUI 让你随时随地 AI Coding
人工智能·aigc·ai编程
AI视觉网奇18 分钟前
2d 数字人解决方案-待机动作
人工智能·计算机视觉
人工智能AI酱39 分钟前
【AI深究】逻辑回归(Logistic Regression)全网最详细全流程详解与案例(附大量Python代码演示)| 数学原理、案例流程、代码演示及结果解读 | 决策边界、正则化、优缺点及工程建议
人工智能·python·算法·机器学习·ai·逻辑回归·正则化
爱喝可乐的老王44 分钟前
机器学习监督学习模型--逻辑回归
人工智能·机器学习·逻辑回归
Ao00000044 分钟前
机器学习——逻辑回归
人工智能·机器学习·逻辑回归
智算菩萨1 小时前
【How Far Are We From AGI】3 AGI的边界扩张——数字、物理与智能三重接口的技术实现与伦理困境
论文阅读·人工智能·深度学习·ai·agi
daidaidaiyu1 小时前
Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)
java·spring
智算菩萨1 小时前
【How Far Are We From AGI】2 大模型的“灵魂“缺口:当感知、记忆与自我意识的迷雾尚未散去
人工智能·ai·agi·感知
deepxuan1 小时前
Day1--python三大库-Pandas
人工智能·python·pandas