Stories

Detail Return Return

JeecgBoot 低代碼平台快速集成 Spring AI - Stories Detail

JeecgBoot 是一款基於代碼生成器的低代碼開發平台!前後端分離架構 SpringBoot2.x 和 3.x,SpringCloud,Ant Design Vue3,Mybatis-plus,Shiro,JWT,支持微服務。強大的代碼生成器讓前後端代碼一鍵生成,實現低代碼開發!JeecgBoot 引領新的低代碼開發模式 (OnlineCoding-> 代碼生成器 -> 手工 MERGE), 幫助解決 Java 項目 70% 的重複工作,讓開發更多關注業務。既能快速提高效率,節省研發成本,同時又不失靈活性!

JeecgBoot 如何集成 Spring AI

圖片

Spring 通過 Spring AI 項目正式啓用了 AI(人工智能)生成提示功能。本文將帶你瞭解如何在 Jeecg Boot 應用中集成生成式 AI,以及 Spring AI 如何與模型互動,包含 RAG 功能。

(Retrieval Augmented Generation)檢索增強生成(RAG)是一種用於將個人未經訓練數據與人工智能模型集成的技術。在 RAG 工作流程中,第一步將文檔數據加載到矢量數據庫(例如 Redis)中。當收到用户查詢時,矢量數據庫會檢索一組與該查詢相似的文檔。然後,這些文檔數據充當用户問題的上下文,並與用户的查詢結合使用生成響應(通常通過 LLM 模型)。

先來看一下最終效果,效果分別是 AI 互動以及 RAG 互動。 
圖片
圖片

集成 Spring AI 在 Jeecg-module-demo 模塊的 pom.xml 中,添加如下配置

<dependency>
    <groupid>org.springframework.ai</groupid>
    <artifactid>spring-ai-openai-spring-boot-starter</artifactid>
    <version>1.0.0-M1</version>
</dependency>
<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>

添加配置 Spring AI 提供的 starter 自動配置完成了大部分工作,引入依賴後,只需要再進入如下配置即可

spring:
  ai:
    openai:
      api-key: open-ai-api-key
      base-url: 如非使用代理點,則無需更改

進行以上配置之後,官方默認沒有提供 ChatClient 的 bean 註冊,所以我們還需要最後一步,註冊 ChatClient Bean。

@Bean
public ChatClient chatClient(ChatClient.Builder builder, VectorStore vectorStore) {
    return builder.build();
}

到這裏,我們已經可以正常使用 ChatClient、ImageModel 等 API 與 OpenAI 進行互動訪問了,如下:
文生文:

chatClient.prompt().user(message).call().content();

文生圖:

imageModel.call(new ImagePrompt(description,
                        OpenAiImageOptions.builder().build()));

RAG:

// 向量庫查詢
List<document> documents = vectorStore.similaritySearch(query);
String info = "";
if (documents.size() &gt; 0) {
   info = documents.get(0).getContent();
}

// 構造系統prompt
String systemPrompt = "你的名字叫Jeecg AI助手,你的官網在http://jeecg.com,以友好的方式迴應,樂於助人、快樂的態度";

// 構造用户prompt
String userPrompt = """
                給你提供一些數據參考: {info},請回答我的問題:{query}
                請你跟進數據參考與工具返回結果回覆用户的請求。
                """;

// 構造提示詞
Message systemMessage = new SystemMessage(systemPrompt);
PromptTemplate promptTemplate = new PromptTemplate(userPrompt);
Message userMessage = promptTemplate.createMessage(Map.of("info", info, "query", query));
Prompt prompt = new Prompt(List.of(userMessage, systemMessage));

client.prompt(prompt).stream().content();

與 JeecgBoot 集成

經過以上兩段配置,已經可以正常與 Spring AI 支持的各個大模型進行 API 調用了,不過也僅僅是停留在代碼層面,使用門檻也限制在開發員人層面。

JeecgBoot 在 3.7 版本提供了 AI 對話的頁面,不過現在版本的默認實現並不是通過 Spring AI 進行集成的,但是卻已經完成了前後端對話通信的框架,接下來只需要使用 Spring AI 替換掉原有的大模型交互即可。

org.jeecg.modules.demo.gpt.service.impl.ChatServiceImpl 這個類的 sendMessage 方法中,將如下代碼進行註釋,替換上 Spring AI 的 API 調用代碼即可。如下 

圖片

替換成

Flux<string> contents = client.prompt()
                        .user(message)
                        .stream().content().then(“DONE”);

final String id = topicId;
        contents.subscribe(p -&gt; {
            Map<string, string> result = new HashMap&lt;&gt;();
            result.put("content", p);
            try {
                if ("DONE".equals("p")) {
                    sseEmitter.send(SseEmitter.event().id("DONE").data(p), MediaType.TEXT_EVENT_STREAM);
                } else {
                    sseEmitter.send(SseEmitter.event()
                            .id(id)
                            .data(result)
                            .reconnectTime(3000));
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });

最終效果如開頭所示,如果需要將對話替換成 RAG 對話,只需要將 chatClient 調用更換即可。

user avatar candy_68fb0dfb0afd0 Avatar junyidedalianmao Avatar changqingdezi Avatar daimajiangxin Avatar imhaoli Avatar tizuqiudexiangpica Avatar zread_ai Avatar fannaodeshafa Avatar god23bin Avatar youyudeshangpu_cny857 Avatar qqcode168 Avatar
Favorites 11 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.