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

    关注

    91

    文章

    41305

    浏览量

    302685
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    16060
  • Redis
    +关注

    关注

    0

    文章

    394

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    黑马-Java+AI新版V16零基础就业班百度云网盘下载+Java+AI全栈开发工程师

    传统开发升级,Java+AI 融合开发精讲——构建下一代企业级智能应用的技术栈重塑 在人工智能加速渗透至各行各业的当下,Java 开发者正面临一个关键转折点:要么被动旁观 AI 能力的边缘化集成
    发表于 05-01 11:29

    [完结15章]Java转 AI高薪领域必备-从0到1打通生产级AI Agent开发

    AI瞬间完成时,仅凭对Spring Boot框架的熟练度已无法构建职业护城河。Java工程师若想拒绝原地踏步,绝不是简单地学一学Python或调用几个API,而是必须将自身深厚的工程化底座与大模型的认知
    发表于 04-30 13:46

    Java转 AI高薪领域必备 从0到1打通生产级AI Agent开发 教程资料

    告别CRUD内卷的经济学:Java程序员转型AI Agent的商业重构 在当前的IT职场生态中,一个令人不寒而栗的现象正在上演:传统Java CRUD(增删改查)开发者的薪资溢价正在被系统性抹平
    发表于 04-29 17:08

    高质量RAG系统的五个核心设计要点

    检索增强生成(Retrieval-Augmented Generation, RAG)已成为构建大模型应用的标准架构。然而,大多数RAG系统在设计初期会因为忽略核心设计原则而在实际部署中暴露严重问题。本文从工程实践角度出发,梳理
    的头像 发表于 04-24 14:42 176次阅读

    构建示例应用程序MCSPTR2AK396的问题求解

    显示任何消息。 此外,如果我选择“更新代码”,则所有驱动程序都将从项目中删除。 关于我遗漏了什么有什么提示吗? 安装的软件堆栈与示例应用程序的发行说明中测试的软件堆栈几乎相同 Design
    发表于 04-20 13:11

    Redis应用监控指标大盘点

    Redis作为高性能内存数据库,广泛应用于缓存、会话存储、消息队列等场景。对Redis运行状况的有效监控,是保障业务稳定性的关键。本文的目的是帮助运维工程师建立完整的Redis监控知识体系,讲解需要监控哪些指标、如何采集这些指标
    的头像 发表于 04-09 10:07 178次阅读

    如何构建蓝牙应用程序

    应用程序使用蓝牙(blueZ)。 我已经安装了 gcc-riscv64-linux-gnu。 但是,没有安装 blueZ 标头和库。 如何构建我的蓝牙应用程序
    发表于 04-01 07:31

    RAG、MCP与智能体:大模型落地的三道关

    大模型能力越来越强,但落地没那么快。从单次对话到多步任务,中间隔着系统工程。这篇文章聊三个绕不开的技术方向:RAG、MCP和智能体。 一、RAG:让模型学会翻资料 大模型的知识截止于训练时刻,这是
    的头像 发表于 03-19 13:55 150次阅读

    请问如何构建和运行视频编解码器示例应用程序

    如何构建和运行视频编解码器示例应用程序
    发表于 03-10 06:27

    RAG(检索增强生成)原理与实践

    持续迭代 :基于用户反馈和评估结果不断改进 选择合适的工具栈 :根据实际需求选择Embedding模型、向量数据库和LLM RAG技术正在快速发展,掌握其原理与实践,将帮助你构建更智能、更可靠的AI应用。
    发表于 02-11 12:46

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

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

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

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

    【幸狐Omni3576边缘计算套件试用体验】Redis最新8.0.2版本源码安装及性能测试

    )的有三个可执行程序,分别为: redis-server Redis服务程序,用于提供服务; redis-benchmark
    发表于 06-03 01:28

    AI应用如何不被淘汰?深耕RAG与数据底座是关键

    词)包装层应用,这些应用通过设计提示词调用大模型基础能力,但没有构建更深层次业务价值。因为应用的价值主要靠大模型的原始能力,所以很容易被不断变强的大模型取代。 如何开发出不容易被大模型“抄家”的AI应用? 对此,英特尔技术专家认为
    的头像 发表于 05-23 16:26 584次阅读
    <b class='flag-5'>AI</b>应用如何不被淘汰?深耕<b class='flag-5'>RAG</b>与数据底座是关键