当前位置: 首页 > 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.dtcms.com/a/304863.html

相关文章:

  • Spring Boot 防重放攻击全面指南:原理、方案与最佳实践
  • AI产品经理手册(Ch3-5)AI Product Manager‘s Handbook学习笔记
  • 【Linux基础】find在linux中查找文件
  • Jenkins 详解
  • 准大一GIS专业新生,如何挑选电脑?
  • 【Kotlin】const 修饰的编译期常量
  • 医疗超声成像专用AFE模拟前端
  • 【CSS】盒子类型
  • Qwen3-Coder:介绍及使用 -- 超强AI编程助手
  • CSRF漏洞原理及利用
  • 镜像源加速下载
  • 编辑距离:理论基础、算法演进与跨领域应用
  • 百度前端面试题目整理
  • 通过Power Automate获取SharePoint的Share Link
  • 计算机视觉(CV方向)算法基础
  • Apache Ignite 的连续查询(Continuous Queries)功能的详细说明
  • Apache Ignite 关于 容错(Fault Tolerance)的核心机制
  • 零件边界线提取处理原理详解
  • 如何解决人工智能在社会治理中面临的技术和伦理挑战?
  • 【工具】图床完全指南:从选择到搭建的全方位解决方案
  • 赢在AI时代:从创造力到编程力的教育突围
  • 聊聊自动化测试用例维护成本高应对策略
  • IntelliJ IDEA 配置 Maven 阿里云镜像加速源全流程
  • AAA 与 FTP:网络认证授权及文件传输的原理与实践
  • AT8236-4A单通道直流有刷电机驱动芯片
  • Qt 移动应用性能优化策略
  • 编程技术杂谈3.0
  • [CSP-J 2022] 逻辑表达式
  • 仓颉编程语言类型特点
  • 如何用USRP捕获手机信号波形(下)协议分析