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
    +关注

    关注

    89

    文章

    38080

    浏览量

    296307
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    15770
  • Redis
    +关注

    关注

    0

    文章

    390

    浏览量

    12042
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用NVIDIA Nemotron RAG和Microsoft SQL Server 2025构建高性能AI应用

    搜索和调用外部 AI 模型的 SQL 原生 API。NVIDIA 与微软共同将 SQL Server 2025 与 NVIDIA Nemotron RAG 开放模型集合无缝连接,这使您能够在云端或本地环境中基于自己的数据构建高性
    的头像 发表于 12-01 09:31 319次阅读
    使用NVIDIA Nemotron <b class='flag-5'>RAG</b>和Microsoft SQL Server 2025<b class='flag-5'>构建</b>高性能<b class='flag-5'>AI</b>应用

    RAG实践:一文掌握大模型RAG过程

    RAG(Retrieval-Augmented Generation,检索增强生成), 一种AI框架,将传统的信息检索系统(例如数据库)的优势与生成式大语言模型(LLM)的功能结合在一起。不再
    的头像 发表于 10-27 18:23 1141次阅读
    <b class='flag-5'>RAG</b>实践:一文掌握大模型<b class='flag-5'>RAG</b>过程

    请问是否可以在通用Windows平台中构建OpenVINO™ GenAI C++ 应用程序

    无法在通用 Windows 平台中构建OpenVINO™ GenAI C++ 应用程序
    发表于 06-24 07:35

    如何在基于Arm Neoverse平台的Google Axion处理器上构建RAG应用

    你是否好奇如何防止人工智能 (AI) 聊天机器人给出过时或不准确的答案?检索增强生成 (Retrieval-Augmented Generation, RAG) 技术提供了一种强大的解决方案,能够显著提升答案的准确性和相关性。
    的头像 发表于 04-28 14:34 828次阅读
    如何在基于Arm Neoverse平台的Google Axion处理器上<b class='flag-5'>构建</b><b class='flag-5'>RAG</b>应用

    DevEco Studio AI辅助开发工具两大升级功能 鸿蒙应用开发效率再提升

    开发者的喜爱。 应广大开发者的需求建议,我们最近又对CodeGenie进行了一次升级,不仅针对DeepSeek-R1新增支持鸿蒙知识RAG能力,还上线了代码解释功能,持续拓展AI在辅助鸿蒙应用开发全流程
    发表于 04-18 14:43

    如何在 Raspberry Pi AI Camera 上构建为开发人员提供实时的智能应用程序

    。最近推出的RaspberryPiAICamera是一款功能强大的硬件,可让您在RaspberryPi上构建功能强大的AI应用程序。通过将人工智能推理卸载到IMX
    的头像 发表于 03-25 09:37 607次阅读
    如何在 Raspberry Pi <b class='flag-5'>AI</b> Camera 上<b class='flag-5'>构建</b>为开发人员提供实时的智能<b class='flag-5'>应用程序</b>!

    MCP:连接AI应用程序的开放标准!

    作者:算力魔方创始人/英特尔创新大使刘力 扩展AI大模型的方式有两种,第一种是通过训练增强AI大模型自身的能力;第二种是让AI大模型与其它现有的应用程序(例如:数据库、浏览器、Gmai
    的头像 发表于 03-21 18:21 1879次阅读
    MCP:连接<b class='flag-5'>AI</b>与<b class='flag-5'>应用程序</b>的开放标准!

    AI Agent 应用与项目实战》阅读心得3——RAG架构与部署本地知识库

    技术不仅解决了LLM的知识更新问题,更为构建专业领域的智能问答系统提供了完整的技术方案。通过与向量数据库的深度集成,RAG实现了知识的动态扩展和精准检索,这种架构设计为AI系统的持续进化提供了可能。在
    发表于 03-07 19:49

    利用OpenVINO和LlamaIndex工具构建多模态RAG应用

    文本内容构建 RAG 流水线已经相对成熟。然而为视频内容构建 RAG 流水线则困难得多。由于视频结合了图像,音频和文本元素,因此需要更多和更复杂的数据处理能力。本文将介绍如何利用 Op
    的头像 发表于 02-21 10:18 3094次阅读
    利用OpenVINO和LlamaIndex工具<b class='flag-5'>构建</b>多模态<b class='flag-5'>RAG</b>应用

    【「基于大模型的RAG应用开发与优化」阅读体验】RAG基本概念

    RAG应用架构具备清晰的分层设计。知识库构建层,着重于将各类非结构化数据进行有效处理,转化为计算机能够理解的形式,通过向量化编码技术为数据赋予数字特征,并建立动态索引以便快速查询更新。检索增强层,采用
    发表于 02-08 00:22

    【「基于大模型的RAG应用开发与优化」阅读体验】+第一章初体验

    机制。 《基于大模型的RAG应用开发与优化》第一章以清晰的逻辑框架,帮助读者建立对大模型与RAG的全局认知。通过剖析技术原理、优势与挑战,作者为后续章节的实践内容奠定了基础。对于开发者而言,掌握RAG技术不仅是提升模型性能的
    发表于 02-07 10:42

    【「基于大模型的RAG应用开发与优化」阅读体验】+Embedding技术解读

    今天学习大模型RAG 检索增强生成技术Embedding,即嵌入,是一种将离散数据(如文字、图像、音频等)转换为连续的密集向量表示的技术。这些向量能够反映原始数据之间的关系,使得计算机能够更好地处
    发表于 01-17 19:53

    Redis缓存与Memcached的比较

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

    RAG的概念及工作原理

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

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

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