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

    文章

    30728

    浏览量

    268874
  • spring
    +关注

    关注

    0

    文章

    340

    浏览量

    14336
  • Redis
    +关注

    关注

    0

    文章

    374

    浏览量

    10871
收藏 人收藏

    评论

    相关推荐

    Redis缓存与Memcached的比较

    Redis和Memcached都是广泛使用的内存数据存储系统,它们主要用于提高应用程序的性能,通过减少对数据库的直接访问来加速数据检索。以下是对Redis和Memcached的比较,涵盖了它们的一些
    的头像 发表于 12-18 09:33 88次阅读

    RAG的概念及工作原理

    检索增强型生成(RAG)系统正在重塑我们处理AI驱动信息的方式。作为架构师,我们需要理解这些系统的基本原理,从而有效地发挥它们的潜力。 什么是RAG? 总体而言,RAG系统通过将大型语
    的头像 发表于 12-17 13:41 113次阅读
    <b class='flag-5'>RAG</b>的概念及工作原理

    Cloudera推出RAG Studio,助力企业快速部署聊天机器人

    近日,数据、分析和AI混合平台厂商Cloudera宣布了一项创新举措——推出RAG(Retrieval-Augmented Generation,检索增强生成)Studio。这一平台的问世,标志着
    的头像 发表于 12-12 11:06 285次阅读

    【书籍评测活动NO.52】基于大模型的RAG应用开发与优化

    Agenerated,检索增强生成)与Agent(AI智能体)。本篇小枣君首先尝试用通俗易懂的语言帮助大家认识RAG这一重要应用形式。 01 了解大模型的“幻觉” 在了解为什么出现RAG之前,我们
    发表于 12-04 10:50

    使用OpenVINO和LlamaIndex构建Agentic-RAG系统

    RAG 系统的全称是 Retrieval-augmented Generation,本质上是 Prompt Engineering,通过在 Prompt 中注入检索得到的外部数据,可以有效地
    的头像 发表于 10-12 09:59 252次阅读
    使用OpenVINO和LlamaIndex<b class='flag-5'>构建</b>Agentic-<b class='flag-5'>RAG</b>系统

    使用OpenVINO GenAI API在C++中构建AI应用程序

    许多桌面应用程序是使用 C++ 开发的,而将生成式AI(GenAI)功能集成到这些应用程序中可能会很具有挑战性,尤其是因为使用像 Hugging Face 这样的 Python 库的复杂性。C++
    的头像 发表于 10-12 09:36 365次阅读
    使用OpenVINO GenAI API在C++中<b class='flag-5'>构建</b><b class='flag-5'>AI</b><b class='flag-5'>应用程序</b>

    Spring Cloud Gateway网关框架

    SpringCloud Gateway功能特征如下: (1) 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 进行构建; (2) 动态路由:能够匹配任何请求属性;
    的头像 发表于 08-22 09:58 481次阅读
    <b class='flag-5'>Spring</b> Cloud Gateway网关框架

    英特尔软硬件构建模块如何帮助优化RAG应用

    软硬件构建模块如何帮助优化RAG应用,在简化部署和支持扩展的同时,增强其上下文感知能力和实时响应性能。 1 为您的应用量身定制GenAI ChatGPT的面世改变了AI的发展格局。企业争相利用这项新技术
    的头像 发表于 07-24 15:12 409次阅读
    英特尔软硬件<b class='flag-5'>构建</b>模块如何帮助优化<b class='flag-5'>RAG</b>应用

    什么是RAGRAG学习和实践经验

    高级的RAG能很大程度优化原始RAG的问题,在索引、检索和生成上都有更多精细的优化,主要的优化点会集中在索引、向量模型优化、检索后处理等模块进行优化
    的头像 发表于 04-24 09:17 873次阅读
    什么是<b class='flag-5'>RAG</b>,<b class='flag-5'>RAG</b>学习和实践经验

    Redis开源版与Redis企业版,怎么选用?

    点击“蓝字”关注我们数以千计的企业和数以百万计的开发人员Redis开源版来构建应用程序。但随着用户数量、数据量和地区性的增加,成本、可扩展性、运营和可用性等问题也随之而来。Redis
    的头像 发表于 04-04 08:04 1046次阅读
    <b class='flag-5'>Redis</b>开源版与<b class='flag-5'>Redis</b>企业版,怎么选用?

    使用ADS .NET Framework构建一个应用程序,.s (汇编文件)文件无法编译的原因?

    我正在尝试使用 ADS .NET Framework 构建一个应用程序。 我遇到了以下错误,因为 .s (汇编文件)文件无法编译。
    发表于 03-04 06:58

    u8g2应用程序无法在moduStoolBox中构建是为什么?

    我正在尝试按照 ModustoolBox API 文档中的英飞凌 SSD1306 OLED 说明进行操作。 当我按照它的指示运行演示程序时,它无法构建。 我能否得到一些关于如何正确完成此操作的帮助
    发表于 01-24 07:03

    Redis为LangChain定制AI代理——OpenGPTs

    OpenAI最近推出了OpenAIGPTs——一个构建定制化AI代理的无代码“应用商店”,随后LangChain开发了类似的开源工具OpenGPTs。OpenGPTs是一款低代码的开源框架,专用
    的头像 发表于 01-13 08:03 833次阅读
    用<b class='flag-5'>Redis</b>为LangChain定制<b class='flag-5'>AI</b>代理——OpenGPTs

    谷歌发布新的AI SDK,简化Gemini模型与Android应用程序的集成

    对于 Android 应用程序,Google 提供了 Google AI Client SDK for Android,它将 Gemini REST API 封装为惯用的 Kotlin API
    的头像 发表于 01-03 16:29 933次阅读

    如何构建linux开发环境和编译软件工程、应用程序

    前文介绍了如何使用官方提供的镜像文件启动开发板,本文将说明如何构建linux开发环境和编译软件工程、应用程序
    的头像 发表于 01-03 12:31 2036次阅读
    如何<b class='flag-5'>构建</b>linux开发环境和编译软件工程、<b class='flag-5'>应用程序</b>