<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用Redis和Spring?Ai構建rag應用程序

虹科網絡可視化技術 ? 2024-04-29 08:04 ? 次閱讀

隨著AI技術的不斷進步,開發者面臨著如何有效利用現有工具和技術來加速開發過程的挑戰。Redis與Spring AI的結合為Java開發者提供了一個強大的平臺,以便快速構建并部署響應式AI應用。探索這一整合如何通過簡化的開發流程,讓開發者能夠更專注于創新而非底層實現。

一、Spring AI 簡介

由大型語言模型(LLM)驅動的應用程序中,向量數據庫常作為人工智能應用程序的核心存儲技術。此類數據庫需要支持語義搜索,并為LLM提供相關的上下文環境。

在此之前,通過Spring和Redis來構建人工智能應用程序的選項還相對有限。而最近,Redis作為一種高性能的向量數據庫方案,現已引起廣泛關注。Spring社區推出了一個名為Spring?AI的新項目,旨在簡化人工智能應用程序特別是那些涉及向量數據庫的應用的開發流程。

下面將介紹如何使用Redis作為向量數據庫構建一個Spring AI應用程序,實現檢索增強生成(RAG)工作流。

二、檢索增強生成

檢索增強生成(RAG)是一種結合數據與人工智能模型的技術方法。在RAG工作流中,首先需要將數據加載入向量數據庫(例如Redis)。接收到用戶查詢后,向量數據庫會檢索出一組與查詢相似的文檔。這些文檔將作為解答用戶問題的上下文,并結合用戶的查詢,通常通過人工智能模型來生成響應。

本例中,我們將利用一個包含各類啤酒信息的數據集進行演示,數據集中包含啤酒的名稱、酒精含量(ABV)、國際苦味單位(IBU)和描述等屬性。該數據集將被加載到Redis中,以展示RAG工作流的實際應用。

三、代碼和依賴關系

可以在GitHub上找到Spring?AI和Redis演示的全部代碼。

本項目使用了Spring Boot作為Web應用程序的啟動依賴項,并結合了Azure OpenAI和Spring?AI?Redis。

四、數據加載

我們的應用程序將采用提供啤酒信息的JSON文檔作為數據來源。每個文檔的結構如下:

{ "id": "00gkb9", "name": "Smoked Porter Ale", "description": "The Porter Pounder Smoked Porter is a dark rich flavored ale that is made with 5 malts that include smoked and chocolate roasted malts. It has coffee and mocha notes that create a long finish that ends clean with the use of just a bit of dry hopping", "abv": 8, "ibu": 36}

為了將啤酒數據集加載到 Redis 中,我們將使用 RagDataLoader 類。該類包含一個方法,在應用程序啟動時執行。在該方法中,我們使用一個 JsonReader 來解析數據集,然后使用自動連接的?VectorStore 將文檔插入 Redis。

// Create a JSON reader with fields relevant to our use caseJsonReader loader = new JsonReader(file, "name", "abv", "ibu", "description");// Use the autowired VectorStore to insert the documents into RedisvectorStore.add(loader.get());

至此,我們得到了一個包含約 22,000種啤酒及其相應嵌入的數據集。

五、RAGService

RagService 類實現了 RAG 工作流程。當收到用戶提示時,會調用 retrieve 方法,執行以下步驟:

計算用戶提示的向量

查詢Redis數據庫,檢索最相關的文檔

使用檢索到的文檔和用戶提示構建一個提示信息

使用提示調用聊天客戶端以生成響應

public Generation retrieve(String message) { SearchRequest request = SearchRequest.query(message).withTopK(topK); // Query Redis for the top K documents most relevant to the input message List docs = store.similaritySearch(request); Message systemMessage = getSystemMessage(docs); UserMessage userMessage = new UserMessage(message); // Assemble the complete prompt using a template Prompt prompt = new Prompt(List.of(systemMessage, userMessage)); // Call the autowired chat client with the prompt ChatResponse response = client.call(prompt); return response.getResult();}

六、Controller

現在我們已經實現了 RAG 服務,可以將其封裝在 HTTP 端點中。

RagController 類將服務作為 POST 端點公開:

@PostMapping("/chat/{chatId}")@ResponseBodypublic Message chatMessage(@PathVariable("chatId") String chatId, @RequestBody Prompt prompt) { // Extract the user prompt from the body and pass it to the autowired RagService Generation generation = ragService.retrieve(prompt.getPrompt()); // Reply with the generated message return Message.of(generation.getOutput().getContent());}

七、用戶界面

在用戶界面方面,創建一個簡單的 React 前端,允許用戶提出有關啤酒的問題。前端通過向/chat/{chatId}端點發送 HTTP 請求并顯示響應來與 Spring 后端交互。

036c3cec-05bc-11ef-9118-92fbcf53809c.png

僅通過簡單的幾個類,我們就用 Spring AI 和 Redis 實現了一個 RAG 應用程序。

若要更進一步,我們建議您查看?Github?上的示例代碼。將 Redis 的高效和易用性與 Spring AI 提供的便捷抽象相結合,Java 開發人員使用 Spring 構建響應式 AI 應用程序將變得更加容易。

有關向量數據庫的更多信息,歡迎與我們溝通交流~

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • AI
    AI
    +關注

    關注

    87

    文章

    26464

    瀏覽量

    264090
  • spring
    +關注

    關注

    0

    文章

    333

    瀏覽量

    14161
  • Redis
    +關注

    關注

    0

    文章

    363

    瀏覽量

    10496
收藏 人收藏

    評論

    相關推薦

    什么是RAG,RAG學習和實踐經驗

    高級的RAG能很大程度優化原始RAG的問題,在索引、檢索和生成上都有更多精細的優化,主要的優化點會集中在索引、向量模型優化、檢索后處理等模塊進行優化
    的頭像 發表于 04-24 09:17 ?96次閱讀
    什么是<b class='flag-5'>RAG</b>,<b class='flag-5'>RAG</b>學習和實踐經驗

    Redis開源版與Redis企業版,怎么選用?

    點擊“藍字”關注我們數以千計的企業和數以百萬計的開發人員Redis開源版來構建應用程序。但隨著用戶數量、數據量和地區性的增加,成本、可擴展性、運營和可用性等問題也隨之而來。Redis
    的頭像 發表于 04-04 08:04 ?119次閱讀
    <b class='flag-5'>Redis</b>開源版與<b class='flag-5'>Redis</b>企業版,怎么選用?

    Redis為LangChain定制AI代理——OpenGPTs

    OpenAI最近推出了OpenAIGPTs——一個構建定制化AI代理的無代碼“應用商店”,隨后LangChain開發了類似的開源工具OpenGPTs。OpenGPTs是一款低代碼的開源框架,專用
    的頭像 發表于 01-13 08:03 ?560次閱讀
    用<b class='flag-5'>Redis</b>為LangChain定制<b class='flag-5'>AI</b>代理——OpenGPTs

    redis的哨兵和集群有什么區別

    Redis是一個開源的內存數據庫,被廣泛用于構建高性能和可擴展的應用程序。在使用Redis時,有兩種常見的架構模式:哨兵和集群。雖然這兩種模式都有助于提高可用性和性能,但它們在設計和實
    的頭像 發表于 12-04 14:53 ?1436次閱讀

    redis和rabbitMQ的區別

    Redis和RabbitMQ是兩個流行的開源消息傳遞技術,用于構建高可靠、可擴展和可擴展的應用程序。雖然它們都用于實現消息傳遞機制,但它們在設計和運作方式上存在一些不同之處。在本文中,我們將詳細討論
    的頭像 發表于 12-04 14:48 ?348次閱讀

    如何在Spring Boot應用程序中整合ZXing庫

    在數字化時代,二維碼已經成為了信息交流的一種常見方式。它們被廣泛用于各種應用,從產品標簽到活動傳單,以及電子支付。本文將向您展示如何在Spring Boot應用程序中整合ZXing庫,以創建和解析QR碼。
    的頭像 發表于 12-03 17:39 ?726次閱讀

    Spring依賴注入的方式

    Spring 是一個開源的輕量級框架,可以用于構建企業級應用程序。其最重要的特性之一是依賴注入(Dependency Injection,DI),這是一種設計模式,它可以幫助我們解耦代碼、提高
    的頭像 發表于 11-22 15:12 ?261次閱讀

    spring分布式框架有哪些

    Spring分布式框架是一套基于Spring框架的解決方案,用于構建分布式系統。它提供了一系列的組件和模塊,可以幫助開發人員輕松地構建可擴展、高可用、高性能的分布式
    的頭像 發表于 11-16 10:58 ?365次閱讀

    Spring布能用來搭建基礎架構嗎

    Spring Boot 是一個用于簡化 Spring 應用程序開發的框架,它利用 Spring 框架的強大功能,使得基礎架構的搭建變得更加簡單、輕量級、易于維護。在本文中,我們將詳細討
    的頭像 發表于 11-16 10:56 ?212次閱讀

    Spring Boot 的設計目標

    Spring 框架復雜的XML配置。使用 Spring Boot 可以很容易創建一個獨立運行的、基于 Spring 的生產級應用程序,而且Spri
    的頭像 發表于 10-13 14:56 ?313次閱讀
    <b class='flag-5'>Spring</b> Boot 的設計目標

    Spring Boot Actuator快速入門

    使用的框架基本上都要升級到 2.x了吧。 什么是 Actuator ? 從本質上講, Spring Boot Actuator 為我們的應用程序帶來了生產就緒的功能。監控我們的應用程序,收集指標,了解流量,或者是
    的頭像 發表于 10-09 17:11 ?344次閱讀

    Gradle構建的多模塊Spring Boot項目

    0. 前言 相比起 Maven 的 XML 配置方式,Gradle 提供了一套簡明的 DSL 用于構建Java 項目,使我們就像編寫程序一樣編寫項目構建腳本。 本文將從無到有創建一個用 Gradle
    的頭像 發表于 09-25 14:46 ?1201次閱讀
    Gradle<b class='flag-5'>構建</b>的多模塊<b class='flag-5'>Spring</b> Boot項目

    創建端到端零售愿景AI應用程序

    使用 NVIDIA DeepStream 和 NVIDIA TAO 工具包構建端到端零售分析應用程序
    的頭像 發表于 07-05 16:30 ?258次閱讀
    創建端到端零售愿景<b class='flag-5'>AI</b><b class='flag-5'>應用程序</b>

    構建一個移動應用程序

    電子發燒友網站提供《構建一個移動應用程序.zip》資料免費下載
    發表于 07-04 14:33 ?0次下載
    <b class='flag-5'>構建</b>一個移動<b class='flag-5'>應用程序</b>

    如何使用Spring Boot 2.x和Redis執行異步任務?

    Spring 是最流行 Java 應用程序開發框架。因此,Spring 社區也是最大的開源社區之一。除
    的頭像 發表于 06-06 15:57 ?606次閱讀
    如何使用<b class='flag-5'>Spring</b> Boot 2.x和<b class='flag-5'>Redis</b>執行異步任務?
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>