当前位置: 首页 > news >正文

【RAG搭建Agent应用实战】基于检索增强生成(RAG)搭建特定场景Agent应用

文章目录

  • 一、RAG简介
  • 二、RAG和模型微调的区别
  • 三、Cherry Studio实现本地知识库Agent应用
    • 所需工具
    • 创建知识库
    • 创建Agent助手
    • 尝试效果
  • 四、Spring AI Alibaba实现简单RAG
  • 五、创建阿里百炼大模型RAG应用实例并本地调用
    • 所需工具
    • 平台创建知识库
    • 创建应用实例
    • 代码端调用实例
  • 六、总结

一、RAG简介

参考内容

在这里插入图片描述
检索增强生成指:从文档中读取非结构化数据、对其进行转换、然后将其写入矢量数据库。从高层次上讲,这是一个 ETL(提取、转换和加载)管道。矢量数据库则用于 RAG 技术的检索部分。

在将非结构化数据加载到矢量数据库的过程中,最重要的转换之一是将原始文档拆分成较小的部分。将原始文档拆分成较小部分的过程有两个重要步骤:

  1. 将文档拆分成几部分,同时保留内容的语义边界。例如,对于包含段落和表格的文档,应避免在段落或表格中间拆分文档;对于代码,应避免在方法实现的中间拆分代码。
  2. 将文档的各部分进一步拆分成大小仅为 AI 模型令牌 token 限制的一小部分的部分。

二、RAG和模型微调的区别

在这里插入图片描述

  • RAG:通过实时检索外部知识库(如文档、数据库)获取最新信息,并将检索结果与用户查询结合后生成回答,不修改模型本身参数。
  • 模型微调:直接在特定领域数据上继续训练模型,调整模型内部参数,使其适配专业任务(如医疗术语理解)。

RAG是“临时查资料”的灵活方案,微调是“专业化改造”的长期方案,两者可结合使用(如用微调模型处理RAG检索的内容)

三、Cherry Studio实现本地知识库Agent应用

所需工具

  • Cherry Studio客户端
  • 本地或云端大模型
  • 一个知识库

Cherry Studio客户端调用大模型可参考:我的博客
知识库我就地取材,用软考教材作为知识库

创建知识库

在这里插入图片描述
在Cherry Studio中创建本地知识库

创建Agent助手

在这里插入图片描述

  • 设置提示词
你是一个专业的“软件设计师”考试答题助手,专注于解答软考(软件设计师级别)的真题和模拟题。你的回答需要简洁、准确,直接针对题目要求给出关键知识点和解题思路,并给出在知识库书本的哪一张哪一节回答实例:
以下哪些排序算法是稳定的()
A 快速排序
B 冒泡排序
C 归并排序
D 基数排序答案:BCD 
考点:排序算法稳定性,书中第3章3.5节
解析:
快速排序(A):分区交换可能导致相等元素位置变化。
冒泡排序(B):相邻元素比较交换,不会改变相等元素的顺序。
归并排序(C):合并时优先取左侧子数组元素,保持稳定性。
基数排序(D):按位排序时依赖稳定的子排序算法(通常为计数排序)。不需要给出额外的内容,你需要确保答案的正确性和你给出书中考点位置的准确性,如果知识库内容没有,切不可胡编乱造
  • 设置知识库
    在这里插入图片描述

选择刚刚创建的知识库

这样,一个“软考助手”Agent就简易的搭建完成了。

尝试效果

在这里插入图片描述
在这里插入图片描述

效果还是非常不错的,能够按照我的要求给出题目解析!

四、Spring AI Alibaba实现简单RAG

  • RagConfig类
@Configuration
public class RagConfig {@BeanChatClient chatClient(ChatClient.Builder builder) {return builder.defaultSystem("你将作为一名机器人产品的专家,对于用户的使用需求作出解答").build();}@BeanVectorStore vectorStore(EmbeddingModel embeddingModel) {SimpleVectorStore simpleVectorStore = SimpleVectorStore.builder(embeddingModel).build();// 生成一个机器人产品说明书的文档List<Document> documents = List.of(new Document("产品说明书:产品名称:智能机器人\n" +"产品描述:智能机器人是一个智能设备,能够自动完成各种任务。\n" +"功能:\n" +"1. 自动导航:机器人能够自动导航到指定位置。\n" +"2. 自动抓取:机器人能够自动抓取物品。\n" +"3. 自动放置:机器人能够自动放置物品。\n"));simpleVectorStore.add(documents);return simpleVectorStore;}}

简单给出了一个机器人产品说明书的文档用于测试,并创建client,用embedding模型对文档进行切片

  • Controller类
@RestController
@RequestMapping("/ai")
public class RagController {@Autowiredprivate ChatClient chatClient;@Autowiredprivate VectorStore vectorStore;@GetMapping(value = "/chat", produces = "text/plain; charset=UTF-8")public String generation(String userInput) {// 发起聊天请求并处理响应return chatClient.prompt().user(userInput).advisors(new QuestionAnswerAdvisor(vectorStore)).call().content();}
}
  • 启动应用接口调用
    在这里插入图片描述
    可见,成功根据知识库内容给出正确答案!

五、创建阿里百炼大模型RAG应用实例并本地调用

所需工具

  • Spring AI Alibaba
  • 阿里百炼大模型应用实例
  • 自备一个知识库

平台创建知识库

阿里百炼大模型平台地址:阿里百炼

在这里插入图片描述
首先要上传文件,然后创建知识库。其中的一些参数可自行调整,默认也可以。

创建应用实例

在这里插入图片描述
创建一个应用,同样的,设置提示词,增加知识库,右边的对话框可以进行测试,如果效果不满意可以调整提示词。
最后没有问题之后点击发布,可以得到一个应用实例。

在这里插入图片描述
可以看到一个已发布的应用实例,有一个应用ID,就是代码段发起流程时需要用到的变量。

代码端调用实例

  • 代码配置
spring:application:name: bailian-agentai:dashscope:agent:app-id: xxxapi-key: xxx#workspace-id: xxx

必须要配置的有
app-id,就是应用实例的id
api-key,这是百炼大模型的key
而workspace-id不一定需要配,只有创建了业务空间的时候需要填

  • 调用内容代码
@RestController
public class BailianAgentRagController {private DashScopeAgent agent;@Value("${spring.ai.dashscope.agent.app-id}")private String appId;public BailianAgentRagController(DashScopeAgentApi dashscopeAgentApi) {this.agent = new DashScopeAgent(dashscopeAgentApi);}@GetMapping("/bailian/agent/call")public String call(@RequestParam(value = "message") String message) {ChatResponse response = agent.call(new Prompt(message, DashScopeAgentOptions.builder().withAppId(appId).build()));AssistantMessage app_output = response.getResult().getOutput();return app_output.getText();}
}
  • 启动应用调用接口
    在这里插入图片描述
    可以看到,成功调用到线上的应用实例

六、总结

本文介绍了RAG(检索增强生成)技术及其应用实现。首先概述了RAG的工作原理,包括将非结构化数据转换为矢量数据库的过程。其次对比了RAG与模型微调的区别,指出前者是临时检索外部知识库的灵活方案,后者是直接调整模型参数的长期方案。然后通过Cherry Studio和Spring AI Alibaba分别演示了本地知识库Agent应用和简单RAG的实现方法,包括知识库创建、Agent设置和效果测试。最后详细说明了如何在阿里百炼平台创建RAG应用实例并进行本地调用,提供了完整的代码实现方案。

http://www.lryc.cn/news/604019.html

相关文章:

  • 验证pyspark提交参数指定环境变量生效
  • HbuilderX开发小程序
  • Java面试宝典:MySQL8新特性底层原理
  • 【nerf处理视频数据】Instant-NGP项目NeRF模型训练数据集准备指南
  • React--》规划React组件库编码规范与标准 — Button篇
  • 解决Spring MVC中@PathVariable参数为null导致的404问题:全面解析与最佳实践
  • 树形结构递归查询与嵌套结构转换:Flask + PostgreSQL 完整实现
  • EnergyMath芯祥代理 EMS4100可替代 ASW3410
  • 【牛客网C语言刷题合集】(五)——主要二进制、操作符部分
  • 深入解析mediasoup:构建实时音视频通信的高性能SFU解决方案
  • 用LangGraph实现聊天机器人记忆功能的深度解析
  • 深度学习篇---PaddleDetection模型选择
  • 循环神经网络——动手学深度学习7
  • electron-vite 动态加载脚本 实现动态插件
  • 使用jQuery时的注意事项
  • 爬虫逆向之瑞数五案例:某某医学院(补环境,联调)
  • 直播间里的酒旅新故事:内容正在重构消费链路
  • logtrick 按位或最大的最小子数组长度
  • 计算器4.0:新增页签功能梳理页面,通过IO流实现在用户本地存储数据
  • Java注解全面解析与应用实战
  • 三维扫描相机:工业自动化的智慧之眼——迁移科技赋能智能制造新纪元
  • 前端优化之虚拟列表实现指南:从库集成到手动开发
  • MongoDB系列教程-第一章:MongoDB简介、安装 、概念解析、用户管理、连接、实际应用示例
  • Java抽Oracle数据时编码问题
  • Spring Boot with RabbitMQ:四大核心模式指南
  • TDengine 中 TDgpt 异常检测的数据密度算法
  • TDengine 中 TDgpt 异常检测的机器学习算法
  • 中科米堆CASAIM金属件自动3d测量外观尺寸三维检测解决方案
  • 【数据结构初阶】--二叉树(四)
  • C# _列表(List<T>)_ 字典(Dictionary<TKey, TValue>)