面向金融场景的大模型 RAG 检索增强解决方案
概述
在现代信息检索领域,检索增强生成(Retrieval-Augmented Generation, RAG)模型结合了信息检索与生成式人工智能的优点,从而在特定场景下提供更为精准和相关的答案。在特定场景下,例如金融等领域,用户通常需要精确且相关的信息来支持决策。传统生成模型虽然在自然语言理解和生成方面表现良好,但在专业知识的准确性上可能有所不足。RAG 模型通过将检索与生成相结合,能有效提升回答的准确性和上下文相关性。本方案为您介绍,如何使用人工智能平台 PAI 构建面向金融场景的大模型 RAG 检索增强解决方案。
1.使用 PAI-Designer 构建知识库
您可以参照数据格式要求准备,使用 PAI-Designer 构建相应的检索知识库。
2.使用 PAI-LangStudio 进行模版构建
您在 LangStudio 中使用预置的 RAG 模版进行定制化,创建适合具体应用的模板。
3.使用 PAI-Langstudio 构建在线应用
LangStudio 提供了用户友好的界面,使用户能够轻松提交查询并获取答案。您可以使用创建好的模板构建符合业务需求的在线应用。
前置准备
在开始执行操作前,请确认您已完成以下准备工作:
-
已开通 PAI 后付费,并创建默认工作空间,详情请参见开通PAI并创建默认工作空间。
-
已创建 OSS 存储空间(Bucket),用于存储训练数据。关于如何创建存储空间,详情请参见控制台创建存储空间。
-
已开通 Milvus 数据库,用于构建指数库的向量存储,详情请参见快速创建milvus实例
1.准备数据集
在使用 PAI-Designer 构建知识库的过程中,您首先需要根据金融领域的需求,准备并整理好适合的数据集。这些数据往往涉及到该领域的专业内容,需确保数据的准确性和完整性。PAI-Designer 提供了一套便捷的工具和接口,帮助用户轻松导入和管理这些数据。在本解决方案中,我们以金融为例,展示使用 PDF 作为原始数据,使用 PAI-Designer 构建知识库的的步骤。
您需要确保数据格式符合 PAI-Designer 的要求,例如 PDF 格式。可以通过对领域文档进行预处理和格式化,提取其中的关键信息。
数据示例
以下给出金融领域的数据的示例,格式为 pdf,主要内容为公开新闻网站上的新闻报道,用户可以根据需要准备自己的数据:
该示例数据集已经放置于公开的 oss bucket 中,可以使用 wget 下载,下载后请用户将数据上传到自己的 oss bucket 中,以供下一步使用:
wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/solutions/rag/data/%E9%87%91%E8%9E%8D%E6%96%B0%E9%97%BBpdf.zip
2.部署 LLM 和 Embedding 模型
-
前往快速开始 > ModelGallery,分别按场景选择大语言模型及Embedding分类,并部署指定的模型。本文以通义千问2.5-7B-Instruct和bge-large-zh-v1.5 通用向量模型为例进行部署。请务必选择使用指令微调的大语言模型(名称中包含“Chat”或是“Instruct”的模型),Base 模型无法正确遵循用户指令回答问题。
2. 前往任务管理,单击已部署的服务名称,在服务详情页签下单击查看调用信息,分别获取前面部署的 LLM 和 Embedding 模型服务的 VPC 访问地址和 Token,供后续创建连接时使用。
3.创建 LLM 链接
-
进入LangStudio,选择工作空间后,在连接管理页签下单击新建连接,进入应用流创建页面。
-
创建通用 LLM 模型服务连接。其中 base_url 和 api_key 分别对应【1. 部署LLM和Embedding模型中】 LLM 的 VPC 访问地址和 Token。
4.创建 Embedding 模型服务连接
同【3. 创建 LLM 链接】,创建通用 Embedding 模型服务连接。其中base_url和api_key分别对应【2. 部署 LLM 和 Embedding 模型】中 Embedding 模型的 VPC 访问地址和 Token。
5.创建向量数据库连接
同【3. 创建 LLM 链接】,创建 Milvus 数据库连接。
关键参数说明:
-
uri:Milvus 实例的访问地址,即
<font style="color:rgb(24, 24, 24);">http://<Milvus内网访问地址></font>
,Milvus 内网访问地址如下:
则 uri 为http://c-b1c5222fba****-internal.milvus.aliyuncs.com
。
-
token:登录 Milvus 实例的用户名和密码,即
<yourUsername>:<yourPassword>
。 -
database:数据库名称,本文使用默认数据库
default
。
使用 PAI-Designer 构建知识库
使用 PAI-Designer 构建知识库索引工作流主要包含以下几个步骤:
-
使用数据源读取组件,读取 OSS 中的数据。
-
使用文本解析分块组件,对文本进行分块。
-
使用向量生成组件,对分块后的文本进行向量化。
-
使用索引存储组件,将向量化后的文本存储到向量数据库。
PAI-Designer 工作流串联示例
您可以打开 PAI-Designer,选择 LLM 大语言模型中的检索增强生成构建自己的知识库。
进入工作流后,您会看到下面的工作流,接下来依次介绍各个模块的作用以及需要填写的参数。
RAG 读取 OSS 数据
选择存储数据的 OSS Bucket,确保 Bucket 中已经保存好相关的文档数据(可以为 pdf/csv 格式)。
RAG 文本解析分块
对输入的文件进行分块处理,填入块大小和块重叠大小的参数,并选择 OSS Bucket 保存分块完成的数据。
RAG 文本向量生成
使用 embedding 模型,对分块完成的数据进行向量化并存储,便于后续的检索操作。
RAG 索引构建
使用先前创建的 milvus 数据库,存储已经生成的文档向量。其中向量数据库选择自己创建的数据库,为存储的文档向量取一个名称,填入集合/表名称中;相似度度量可以选择点积、余弦、欧几里得的方式;并选择一个 OSS Bucket 保存 RAG 的索引。
使用 PAI-LangStudio 进行模版构建
PAI-LangStudio 是一个人工智能应用的开发平台,采用直观的交互式环境,简化了企业级大模型应用的开发流程。在开发和设计大模型应用时,可以使用 PAI-LangStudio 进行模版构建。此外,PAI-LangStudio 配合一键部署EAS,使得高质量应用得以迅速、无缝地部署至生产环境。以下介绍使用 PAI-LangStudio 进行模版构建的过程
新建应用流
-
进入LangStudio,选择工作空间后,在应用流页签下单击新建应用流,进入应用流创建页面。
-
选择从模板新建,并在选择 RAG 模板后填入应用流名称,在 OSS Bucket 中选择存储应用流的路径。
-
配置应用流
创建应用流后会进入应用流详情界面,左图中有四个节点,分别对应了不同的功能。
-
rewrite_question 节点通过对用户问题的重写以提升问题质量,其中需要用户在基础配置中选择 connection 为【前置准备3. 创建 LLM 连接】中创建好的连接。
2. retrieve 节点通过向量数据库召回和问题相关的文档内容,Vector Store 需要用户选择【前置准备5. 创建向量数据库】中创建好的数据库以及在 index_name 中填入使用 【PAI-Designer 构建知识库-RAG 索引构建】中填入的集合/表名;Embedding Model 中需要用户选择【前置准备4. 创建Embedding模型服务连接】中创建的连接。
3. threshold_filter 节点对 retrieve 节点召回的文档进行过滤,填入的 threshold 值是对召回文档和查询问题相似度过滤的条件,threshold 越大,则过滤掉越多召回的相似度低的文档。
4. generate_answer 节点根据召回和过滤后的文档,回答问题。用户需要在基础配置中选择【前置准备3. 创建LLM连接】中创建好的 LLM 连接。
使用 PAI-Langstudio 构建在线应用
-
配置完上述流程后,点击启动运行时,并选择机型,配置专有网络链接,部署 RAG 应用。
2. 运行时启动后,点击对话按钮,在左侧对话框中输入想问的问题,与大语言模型开始交流对话。
案例对比
以下给出金融和医疗两个领域,使用和不使用 RAG 解决特定任务的案例对比。红色部分表示大模型回答有事实性错误,或者不够具体精确,绿色部分表示使用 RAG 得到的对应正确回复。
任务一:投资风险分析
问题:请根据最新的新闻报道,分析美国科技行业目前投资风险性如何,是否存在泡沫,给出是或否的具体回答。
任务二:行业趋势分析
问题:请根据最新的新闻报道,给出房地产相关行业是否乐观的判断。
任务三:贸易情况分析
问题:我国近10个月来货物贸易进出口情况如何?
相关文章:

面向金融场景的大模型 RAG 检索增强解决方案
概述 在现代信息检索领域,检索增强生成(Retrieval-Augmented Generation, RAG)模型结合了信息检索与生成式人工智能的优点,从而在特定场景下提供更为精准和相关的答案。在特定场景下,例如金融等领域,用户通…...

经典蓝牙(BT/EDR)蓝牙配对与连接
经典蓝牙的连接过程包括跳频,扫描,配置交换等过程。对ACL链路以及sco的连接过程也做详细的分析。 1. 为什么不配对便无法建立连接? 任何无线通信技术都存在被监听和破解的可能,蓝牙SIG为了保证蓝牙通信的安全性,采用…...

Flask: flask框架是如何实现非阻塞并发的
写在前面:Flask框架是通过多线程/多进程+阻塞的socket实现非阻塞,其本质是基于python的源库socketserver实现的 前言 认识WSGI协议 认识Werkzeug flask是如何实现非阻塞的 本文使用的flask框架为最新的1.1.1版本,所有代码基于python3运行 一:前言 使用过flask或者其他web框…...

JAVA |日常开发中连接Oracle数据库详解
JAVA |日常开发中连接Oracle数据库详解 前言一、Oracle 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 Oracle 数据库的准备工作2.1 添加 Oracle JDBC 驱动依赖2.2 了解连接信息 三、建立数据库连接3.1 代码示例(使用服务名)3.2 步骤解…...

头歌 进程管理之二(wait、exec、system的使用)
第1关:进程等待 任务描述 通过上一个实训的学习,我们学会了使用fork创建子进程,在使用fork创建子进程的时候,子进程和父进程的执行顺序是无法预知的。本关我们将介绍如何使得fork创建出来的子进程先执行,随后父进程再…...

详解日志格式配置:XML 与 Spring Boot 配置文件格式
详解日志格式配置:XML 与 Spring Boot 配置文件格式 日志是现代应用程序中不可或缺的一部分,通过定制化日志格式和颜色,开发人员可以更方便地调试和监控应用。本文将深入讲解如何在 XML 配置文件 和 Spring Boot 配置文件 中设置日志格式&am…...

JDK21新特性
目录 虚拟线程(JEP 444): 顺序集合(JEP 431): 字符串模板(JEP 430): 模式匹配的增强(JEP 440、441以及443): 结构化并发和作用域值…...

SqlDataAdapter
SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一个数据适配器类,属于 System.Data.SqlClient 命名空间(或在 .NET 6 中属于 Microsoft.Data.SqlClient 命名空间)。它的作用是充当数据源(如 SQL Server 数据库ÿ…...

AI赋能:构建安全可信的智能电子档案库
在档案的政策与法规上,《中华人民共和国档案法》2020年修订新增,对电子档案的合法要件、地位和作用、安全管理要求和信息化系统建设等方面作出了明确规定,保障数字资源的安全保存和有效利用。 日前,国家档案局令第22号公布《电子…...

分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测
分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测 目录 分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-PNN粒子群优化概率神经网络多特征分类预测,运行环境Matlab2018b及以…...

AcWing 3416. 时间显示
文章目录 前言代码思路 前言 这种我最担心的就是一些语法格式忘掉了。还有 int ,long long 的数据范围我记得不是很清楚,印象中 int 是 20 亿左右,long long 不行就得用数组来存这个数字了。int,long long数据类型及数值范围。好像没记错,记…...

【软考速通笔记】系统架构设计师⑲——专业英语
文章目录 一、前言二、常用名词三、架构风格四、非功能需求五、应用架构六、软件架构重用 一、前言 笔记目录大纲请查阅:【软考速通笔记】系统架构设计师——导读 二、常用名词 名词翻译architecture架构system系统design设计requirements需求components组件constr…...

java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示
目录 1、什么是注解的解析? 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类,使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…...

C# 命名空间(Namespace)
文章目录 前言一、命名空间的定义与使用基础(一)定义语法与规则(二)调用命名空间内元素 二、using 关键字三、嵌套命名空间 前言 命名空间(Namespace)在于提供一种清晰、高效的方式,将一组名称与…...

几个Linux系统安装体验: centos7系统服务版
本文介绍CentOS7服务版本的安装。 前言 当前国产操作系统版本众多,但根据笔者多年的实践经验得到的认知,最好能抓住底层逻辑,上下打通打透,拉齐表现和本质,就能在纷扰版本中看得清清楚楚,明明白白…...

ViT学习笔记(一) 基本的原理和框架结构
原论文地址:https://arxiv.org/pdf/2010.11929 首先大致通读一下原论文,这是很有必要的,但不必完全读懂,因为会有高手给我们解读,比如: 【Transformer系列】深入浅出理解ViT(Vision Transformer)模型-CSD…...

fedora下Jetbrains系列IDE窗口中文乱码解决方法
可以看到窗口右部分的中文内容为小方块。 进入 Settings - Appearance & Behavior - Appearance - Use custom font : Note Sans Mono CJK SC ,设置后如下图:...

nginx根据报文里字段转发至不同地址
nginx接收到post请求.请求报文里是一个json字符串,字符串里有个字段id。 根据id不同,转发到不同地址。 如果idaaa,转发到www.aaa.com.test 如果idbbb,转发到www.bbb.com.test 如何配置,请提供一个nginx.conf 要在 Nginx 中根据 POST 请求的 JSON 负载中的…...

使用 html/css 实现 educoder 顶部导航栏的步骤和方法
要使用HTML和CSS实现一个类似于Educoder网站的顶部导航栏,我们可以设计一个响应式、简洁且功能齐全的导航栏。Educoder的顶部导航栏通常包括网站的logo、主要导航项(如首页、课程、讨论等)、以及用户操作按钮(如登录、注册等&…...

EasyExcel导出列表
通过easyexcel导出列表数据 根据列表内容自适应宽高。 文件名冲突,修改文件名递增设置。 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version&…...

【unity小技巧】分享vscode如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)
文章目录 前言一、前置条件1、已安装Visual Studio Code,并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号],2、在Visual Studio Code扩展中搜索Unity,并安装3、同时注意这个插件下面的描述,需要根…...

【JavaScript】Object.keys() 和 Object.values() 的使用示例和相关的简单应用
值是数字的情况: let n 124; Object.keys(n) // [] Object.values(n) // []值是字符串的情况: let s "abc"; Object.keys(s) // [0, 1, 2] Object.values(s) // [a, b, c]值是数组的情况:(常用) let ar…...

SwiftUI 列表(或 Form)子项中的 Picker 引起导航无法跳转的原因及解决
概述 在 SwiftUI 的界面布局中,列表(List)和 Form 是我们秃头码农们司空见惯的选择。不过大家是否知道:如果将 Picker 之类的视图嵌入到列表或 Form 的子项中会导致导航操作无法被触发。 从上图可以看到:当在 List 的…...

基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯
基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯 1. 实验要求2. 功能分析3. 模块设计4. 波形图5.代码编写6. 代码仿真7. 添加约束文件并分析综合 上期内容,我们学习了按键控制蜂鸣器,这一期我们开始学习呼吸灯 1. 实验要求 控制领航者核心板上的led&#x…...

探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题
探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题 背景Python 版本升级 问题描述原因分析与解决方案 Python 应用的分层依赖:安装与部署的视角libvirt-python的分层依赖尝试的解决方案 使用编译好的 .whl 文件"嫁接"整个…...

OpenCV-平滑图像
二维卷积(图像滤波) 与一维信号一样,图像也可以通过各种低通滤波器(LPF)、高通滤波器(HPF)等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…...

解决跨域问题方案
跨域问题在前后端分离架构下尤为常见,是每个 Web 开发者都会遇到的核心问题。本文将通过原理解析、场景剖析、解决方案详解以及最佳实践等多个维度,帮助开发者全面理解并有效应对跨域问题。 目录 **一、跨域的本质****1. 同源策略****2. 同源策略的限制范…...

云计算介绍_3(计算虚拟化——cpu虚拟化、内存虚拟化、io虚拟化、常见集群策略、华为FC)
计算虚拟化 1.计算虚拟化介绍1.1 计算虚拟化 分类(cpu虚拟化、内存虚拟化、IO虚拟化)1.2 cpu虚拟化1.3 内存虚拟化1.4 IO虚拟化1.5 常见的集群的策略1.6 华为FC 1.计算虚拟化介绍 1.1 计算虚拟化 分类(cpu虚拟化、内存虚拟化、IO虚拟化&#…...

软件工程复习记录
基本概念 软件工程三要素:方法、工具、过程 软件开发方法:软件开发所遵循的办法和步骤,以保证所得到的运行系统和支持的文档满足质量要求。 软件开发过程管理 软件生命周期:可行性研究、需求分析、概要设计、详细设计、编码、测…...

俩Nim游戏
1.给定n堆石子,每堆石子有xi快,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。 问如果两人都采用最优策略ÿ…...