项目案例-构建 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密钥是否正确
  • 验证网络连接是否正常
  • 确认服务配额是否充足
相关推荐
2501_9333295524 分钟前
企业级AI舆情中台架构实践:Infoseek系统如何实现亿级数据实时监测与智能处置?
人工智能·架构
阿杰学AI25 分钟前
AI核心知识70——大语言模型之Context Engineering(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·数据处理·上下文工程
赛博鲁迅33 分钟前
物理AI元年:AI走出屏幕进入现实,88API为机器人装上“最强大脑“
人工智能·机器人
Mr.朱鹏33 分钟前
Nginx路由转发案例实战
java·运维·spring boot·nginx·spring·intellij-idea·jetty
管牛牛1 小时前
图像的卷积操作
人工智能·深度学习·计算机视觉
云卓SKYDROID1 小时前
无人机航线辅助模块技术解析
人工智能·无人机·高科技·云卓科技
琅琊榜首20202 小时前
AI生成脑洞付费短篇小说:从灵感触发到内容落地
大数据·人工智能
imbackneverdie2 小时前
近年来,我一直在用的科研工具
人工智能·自然语言处理·aigc·论文·ai写作·学术·ai工具
白露与泡影2 小时前
2026版Java架构师面试题及答案整理汇总
java·开发语言