Spring AI 1.0.1 配合ollama + RGA外挂知识库实现

编程教程 > Java > Spring (10) 2025-09-05 15:09:55

概述

实现外挂知识库基本就是给AI喂系统消息。或者以固定格式限制住AI的乱来。

环境

  • spring-ai-bom 1.0.1 spring ai基础库版本1.01
  • spring-ai-starter-model-ollama ollama提供大模型服务
  • spring-ai-starter-vector-store-qdrant qdrant提供向量数据库
  • spring-ai-tika-document-reader spring集成apache tika实现普通文档(ppt/excel/pdf....)解析为向量文档

配置参考

spring:
  application:
    name: boot3-ai
  ai:
    ollama:
      base-url: http://localhost:11434
      chat: # 聊天模型,用于对话聊天
        options:
          model: deepseek-r1:32b
          temperature: 0.3 #0-2 越大越随机乱来
      embedding: #嵌入模型(用于向量数据库数据解析)
        options:
          model: mxbai-embed-large  # 默认嵌入模型
      init:
        embedding:
          additional-models:
            - mxbai-embed-large # 添加嵌入模型初始化检测
        chat:
          additional-models:
            - deepseek-r1:32b
        pull-model-strategy: when_missing
    vectorstore:
      qdrant:
        host: localhost
        port: 6334
        use-tls: false
        api-key: your-super-secret-api-key-2025
        collection-name: qdrant-collection-name
        initialize-schema: true # 自动创建collection,建议开启

 

RAG 手动查询外挂知识库方案

核心代码部分

@Resource
VectorStore vectorStore;

@Resource
ChatModel chatModel;


public Flux<ChatResponse> chatStream(String query) {
        log.info("query: {}", query);
        //手动从向量库查询结果
        SearchRequest searchRequest = SearchRequest.builder()
                    .query(query)
                    .topK(5)
                    .similarityThreshold(0.6)
                    .build();
        List<Document> documents = vectorStore.similaritySearch(searchRequest);
        
        log.info("从资料库找到{}个相关文档",documents.size());
        String context = documents.isEmpty()
                ? "未检索到相关信息。" //注意这里如果直接返回空字符串则会导致限制失效,AI回去查自己的内置知识库回答问题。所以必须设置没有搜索到的提示词
                : documents.stream()
                .map(doc -> "来源: " + doc.getMetadata().get("source") + "\n内容: " + doc.getText())
                .collect(Collectors.joining("\n\n"));

        log.info("资料库文档信息: {}", context);
        String systemMessageContent = """
                # 角色设定
                你是一名专业的企业智能客服,负责为客户提供准确、可靠、礼貌的咨询服务,你目前服务于XQLEE科技俱乐部
               
                # 回答规则
                1. 你的所有回答必须严格基于提供的知识库内容,不得脱离知识库信息自行发挥。
                2. 当知识库中包含足够信息时,请根据内容给出简洁、清晰、专业的回答。
                3. 如果用户问题属于以下两类,请按规则处理:
                   a) **通用交互**(如:你好、在吗、你是谁、你能做什么等):
                      - 直接友好回应,无需依赖知识库。
                      - 示例:
                        - 用户问“你是谁”,回答“我是本企业的智能客服,可以为您解答相关问题。”
                        - 用户问“你好”,回答“您好!很高兴为您服务。”
                   b) **业务问题**(如:订单、产品、售后等):
                      - 必须严格基于知识库内容回答。
                      - 若知识库中无相关信息,请**仅回复**:
                            我目前无法回答这个问题
                4. 当知识库和角色设定中无相关信息,或信息不足以完整、准确回答问题时,请直接回复:“我目前无法回答这个问题”。
                5. 禁止猜测、编造、推断答案,确保回答的严谨性和可信度。
                
                # 行为要求
                - 使用礼貌、正式、专业的语言。
                - 回答应聚焦问题,避免冗余信息。
                - 始终遵守知识边界,不越界回答。
                
                # 执行指令
                请严格按照以上规则响应用户提问。
                
                
                # 知识库返回内容
                %s
                """.formatted(context);

        Prompt prompt = new Prompt(List.of(
                // 1. 核心 SystemMessage:定义角色 + 注入检索到的知识
                new SystemMessage(systemMessageContent), // ✅ 注入知识
                // 2. UserMessage:用户的实际问题
                new UserMessage(query)
                // 注意:这里没有 AssistantMessage,因为这是新问题
        ));
        return chatModel.stream(prompt);
    }

 

RAG Spring 集成工具外挂知识库方案

添加额外依赖

除开前面的通用依赖,使用spring ai 1.0.1集成方案还需要添加以下依赖

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-advisors-vector-store</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-rag</artifactId>
        </dependency>

核心代码

顾问模式 该方案为spring 官方文档
参考连接 https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html

登录后查阅

此处内容需登录后查阅(刷新)

登录/注册

特别说明1:

模板里面的变量 {context} {query} 是固定的,源码里面写死的,一般是根据Advisor实现的before方法去找。

Spring AI 1.0.1 配合ollama + RGA外挂知识库实现_图示-3c65134b12064813b25e6836e158ddd1.png
Before方法调用了augment
Spring AI 1.0.1 配合ollama + RGA外挂知识库实现_图示-f844d6d370574c91bd43708a900f9709.png
augment方法

 

 

特别说明:

allowEmptyContext  这个项目不要配置true ,让他默认false,关键代码参考下图

Spring AI 1.0.1 配合ollama + RGA外挂知识库实现_图示-2c45f83551a0438cbe160a5550ca63b2.png

emptyContextPromptTemplate 这个查询为空的模板必须自己配置,默认是个英文会导致部分大模型使用英文回复。

Spring AI 1.0.1 配合ollama + RGA外挂知识库实现_图示-0deab70438c94aeb8ebb5c08998859d1.png

自己模板建议就是前面普通模板自己把参数设置进去就行。

 

 

 

 

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
概述实现外挂知识库基本就是给AI喂系统消息。或者以固定格式限制住AI的乱来。环境spring-ai-bom 1.0.1 spring ai基础库版本1.01sp
概述本文讲解Java编程中如何通过Spring AI框架 集成 Redis Stack 向量数据库和Ollama模型服务提供者实现RAG本地外挂知识库。前置条件
基于上一个项目Spring Boot 接入Ollama实现与Deepseek简单对话修改,增加嵌入库配置,修改模型拉取策略为alwaysapplication.
一 了解什么是 RAGRAG(Retrieval Augmented Generation)检索增强生成,是 2023 年最火热的 LLM 应用系统架构,它的作
Ollama 环境准备Ollama安装使用参考:Deepseek Windows安装和入门使用Spring Boot项目接入OllamaSpring Boot
Ollama 简介Ollama 是一个用于部署本地 AI 模型的工具,开发者可以在自己的机器上运行模型,并通过 API 接口调用。在本地搭建 Ollama 服务
问题ollama国内拉取模型慢,断点续传也蛮怎么办,当然是修改ollama镜像源 配置ollama模型国内镜像源
Ollama 模型动辄xxGB,默认位置可能不满足需求,特别是Windows,默认的C盘,所以一般都需要调整下Ollama 模型存放位置。ollama 默认的模
概述Ollama官方最新版0.5.7,默认是不支持AMD 780m(代号:gfx1103)集成显卡的,已知方法都是基于一个开源项目ollama-for-amd来
目标使用Redis Stack中间件作为向量数据库(Vector Database)实现文档数据的存储和查询功能。先决条件已安装好的 redis stack ,
GPUNvidiaOllama 支持计算能力为 5.0 及以上的 Nvidia GPU。检查你的计算兼容性,以确认你的显卡是否受支持: https://deve
使用 VectorStore.similaritySearchWithScore 获取带分数的结果过滤掉低分(低相关性)结果,只保留 score &gtl; thres
确认Ollama兼容您的GPUNvidiaOllama 支持计算能力 5.0 及以上的 Nvidia GPU。要检查您的显卡是否受支持,请查看您的计算兼容性:h
安装环境windows 11ollama工具下载ollama工具ollama官网 Download Ollama on Windows注:ollama同时支持L
环境Spring boot 3.5.5Spring webflux 腾讯云智能体应用 管理接口文档:腾讯云智能体开发平台 对话端接口文档(HTTP SSE)_腾