基于火山引擎云搜索服务和豆包模型搭建 RAG 推理任务
大语言模型(LLM,Large language model)作为新一轮科技产业革命的战略性技术,其核心能力在于深层语境解析与知识融合。在生成式人工智能方向主要用于图像生成,书写文稿,信息搜索等。当下的 LLM 模型是基于大量数据训练的,目的是让它们掌握广泛的普遍知识,这些知识被储存在它们神经网络的权重(也就是参数记忆)里。但是,如果我们要求 LLM 生成的回答涉及到它训练数据之外的知识,比如最新的、专有的或某个特定领域的信息,这时就可能出现事实上的错误(我们称之为“幻觉”)。
RAG (Retrieval-Augmented Generation,检索增强生成)的核心思想是让语言模型在生成回答或文本时能够动态地从外部知识库中检索相关信息。这种方法能够提高模型生成内容的准确性、可靠性和透明度,同时减少“幻觉”。
本文将介绍如何基于火山引擎云搜索服务和方舟平台来构建专属的 RAG 智能问答系统。系统使用 OpenSearch 作为外部知识库,火山豆包作为大语言模型,全流程构建在火山引擎平台上。本次实践采用的语料为火山引擎云搜索服务知识库,将语料处理后存入 OpenSearch 索引中,同时通过部署在云搜索服务 ML 节点上的 Embedding 模型,将原始语料额外转化为向量字段存储在同一个 OpenSearch 索引中,方便后续做混合查询召回。
在查询流程中,用户通过对话框输入问题,RAG 应用会将用户输入的问题通过 Embedding 模型转化为向量,然后使用云搜索服务 OpenSearch 的混合查询功能查询问题向量和问题文本召回 Top n 的文档结果,再将文档结果发送给豆包大模型,最后按照要求根据文档内容回答用户的问题。
准备资源
创建云搜索 ML 服务
登陆火山引擎云搜索控制台,创建实例集群,版本选用 Opensearch 2.9.0。实例创建完成后可根据实际需求,开通实例和 Dashboards 的公网访问。
1.进入实例详情页->ML 服务,配置 CPU /内存比例后启用。
2.进入模型服务->公共模型,启动一个模型用于语义嵌入 Embedding,推荐使用 PEG,配置参数后启动。
开通大模型服务
1.进入火山引擎方舟控制台,在模型推理下创建推理接入点,接入模型建议选用 Doubao-pro-32k(或者Doubao-lite-32k),创建完成后可以获取到接入点 Endpoint。
2.进入 API Key 管理,创建 API Key 并记录。
# 填充如下内容,后续会用在rag模型中。
{"model32k": {"host": "https://ark.cn-beijing.volces.com/api/v3","endpoint": "ep-xxxx-xx","apikey": ""}
}
配置 NAT 网关
通过配置 NAT 网关使私有网络内部的实例允许通过 NAT 网关访问到公网,用于连接大模型服务。
首先进入火山引擎 NAT 网关控制台,创建公网 NAT 网关。这里需要注意私有网络和子网一定要和云搜索服务实例所在的网络保持一致,可选用自动配置或手动配置:
-
自动配置会开启私网下所有 ECS 的公网访问,需绑定 EIP(公网 IP);
-
选择手动配置后需要自行配置公网 IP 和访问规则。
搭建步骤
导入任务数据
1.这里演示为基于火山引擎云搜索服务文档语料搭建的推理任务,所以在创建任务时选择模板代码-云搜索文档任务,大家在具体使用中可以根据需求用其他语料库进行搭建。
2.增加 Config 参数,参考如下模板填入。
参数 | 说明 |
---|---|
task | "migrate" : 表示启动迁移任务 "init": 表示只创建索引 其他或不填: 表示从原始文档进行构建,如果需要运行此任务请提工单咨询 |
dim | 向量维度, 根据 embedding 模型的长度进行填充,例如 PEG 模型为 1024 |
opensearch | "username" : OpenSearch 的用户名 "password" : OpenSearch 的密码 "host" : 云搜索接入点域名 "port" : 云搜索接入点端口 "index" : 迁移的目标索引名称,将处理好的云搜索文档数据迁移到此索引 |
'{"task":"migrate","dim": 1024,"opensearch": {"username": "opensearch的用户名","password": "opensearch的密码","host": "云搜索接入点域名","port": 9200,"schema": "https","index": "迁移的索引名称"}}'
3.本文演示添加的依赖为云搜索文档任务配置依赖,如果需要额外依赖可以自行在配置中添加。
运行语义嵌入任务
1.选择 xc_import_embed 模板任务,Config 参数说明:
参数 | 说明 |
---|---|
opensearch | "username": "admin", "password": "k", "host": "opensearch-o-xxx.escloud.volces.com", "port": 9200, "schema": "https", "index": "cloud_serach", # 源索引 "target_index": "cloud_serach" #目标索引,源索引和目标索引名称相同,即使用同一个索引。 |
embedding | 模型调用信息复制过来 |
field_dict | 需要进行语义嵌入的字段这里必须填入以下值 { "full_title": "full_title_knn", "summary": "summary_knn", "content.summary": "content.summary_knn" } |
'{"opensearch": {"username": "xxx","password": "xxx","host": "opensearch-o-xxxx.escloud.ivolces.com","port": 9200,"schema": "https","index": "cloud_serach","target_index": "cloud_serach"},"embedding": {调用信息复制过来},"field_dict": {"full_title": "full_title_knn","summary": "summary_knn","content.summary": "content.summary_knn"}
}'
2.文中实践需要添加的依赖配置如下:
启动 RAG 推理服务
1.在 TOS Bucket 中上传 RAG 推理服务配置。
|-rag-demo
|--rag_config.json
|--config.json
config.json内容
{}
rag_config.json 的格式为:
参数 | 说明 |
opensearch | Index 为用来检索的索引名称,需要与文档、语义任务的索引名称相同,其他配置同上不再赘述 |
llm.model32k | Host:火山方舟的 api 地址,这里的例子是北京地区的地址 Endpoint: 火山方舟推理服务的 endpoint API Key: 火山方舟的 apikey |
embeddings | 调用信息复制过来 |
2.创建推理服务(打开私网访问)并启动
完成前面的所有配置操作后,已经可以在相同 VPC 环境的 ECS 中,通过 RAG 模型的调用信息验证云搜索服务文档推理任务了。可以直接在 ECS 命令行中运行调用信息,查看到持续输出 txt 文本内容。
RAG 推理服务演示
为了更加直观的演示云搜索服务文档的 RAG 推理服务,本文借助火山引擎 API 网关产品,为 RAG 推理服务配置一个固定的公网域名。通过直接在浏览器中的固定访问地址访问 RAG 推理服务,并在可视化页面咨询云搜索服务产品的各种问题。
配置公网访问
1.进入火山引擎 API 网关控制台创建实例,为保证网络畅通需要选择和云搜索实例相同的私有网络和子网。创建完成后进入实例继续创建服务。
2.接下来创建 Upstream,后端服务选用固定域名,域名和端口从刚刚启用的 RAG 调用信息内获取。
3.并在服务内创建路由,路径选用前缀匹配;Upstream 选用固定域名,使用刚刚创建的 Upstream。
推理问答
创建完成后进入服务列表就可以获取到公网访问域名,拼接 RAG 推理服务的完整访问地址,格式为 http://[url]/?model=[model_name],其中 url 替换为在 API 网关中获取到的服务公网访问域名,model_name 替换为 RAG 模型的名称后就可以在浏览器中通过刚才拼接好的固定域名访问 RAG 推理服务,并在可视化页面中咨询本文所用到的云搜素服务文档库的相关问题。
相关文章:

基于火山引擎云搜索服务和豆包模型搭建 RAG 推理任务
大语言模型(LLM,Large language model)作为新一轮科技产业革命的战略性技术,其核心能力在于深层语境解析与知识融合。在生成式人工智能方向主要用于图像生成,书写文稿,信息搜索等。当下的 LLM 模型是基于大…...

Python 实现 Excel 文件操作的技术性详解
目录 一、引言 二、Excel 文件格式及库的选择 2.1 Excel 文件格式 2.2 库的选择 三、安装必要的库 四、使用 openpyxl 读取 Excel 文件 4.1 基本步骤 4.2 实战案例 五、使用 pandas 读取 Excel 文件 5.1 基本步骤 5.2 实战案例 六、写入 Excel 文件 6.1 使用 …...
Spring WebFlux 实现 SSE 流式回复:类GPT逐字显示回复效果完整指南
本节将提供基于 Spring WebFlux 和 SSE 实现类ChatGPT流式回复效果的完整代码示例,并详细说明所需的依赖和配置。 1. 项目配置 构建工具: Maven 或 Gradle依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>sp…...

成功解决7版本的数据库导入 8版本数据库脚本报错问题
我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号:热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…...

如何让RStudio使用不同版本的R
下面内容摘录自: 专栏问答:管理和选择不同的R,如何做好R的笔记_rstudio如何在不同的r版本中进行切换-CSDN博客 欢迎订阅我们专栏 问题一:如何发现RStudio需要安装和使用不同版本的R。这是为什么呢? R允许用户在同一系统…...

汽车免拆诊断案例 | 2011 款进口现代新胜达车智能钥匙系统有时失效
故障现象 一辆2011款进口现代新胜达车,搭载G4KE发动机,累计行驶里程约为26.3万km。车主进厂反映,有时进入车内按下起动按钮,发动机无法起动,且组合仪表黑屏。 故障诊断 接车后试车,车辆使用一切正常。…...
Count clock
写了半天不对,才注意到是十六进制的 - - 另外安装了vivado 哈哈哈哈,可以看看写的到底对不对 之前好多程序在 hdlbits 可以正确运行 但是 vivado 编译不通过。 module clock(input clk,input reset,input ena,output reg pm,output reg[7:0] hh,output …...

【MySQL】1.MySQL基本操作
目录 一、MySQL数据库登陆 1、设置环境变量 2、cmd命令登陆数据库 二、基本操作语法 1、显示数据库——SHOW 2、使用/选择数据库——USE 3、删除——DROP 4、创建——CREATE 5、查看表结构——DESC 6、数据操作——增删改查 (1)增/插入&#…...

Qt .qm文件详解
Qt中的.qm文件是Qt翻译文件的一种,主要用于支持软件的多语言转换。在生成Qt应用程序时,qm文件会被包含进应用程序中,根据逻辑以显示对应语言的界面。 .qm文件的基本信息 格式:.qm文件是Qt应用程序中用于存储翻译文本的二进制文件…...

【计算机网络】UDP实战
其实经过这几天写的几种不同的UDP的简易客户端与服务端,还是很有套路的,起手式都是非常像的。 更多的难点对我来说反而是解耦,各种各样的function一用,回调函数一调,呕吼,就会懵一下。 对于这篇文章&#x…...

七、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制和JS颜色选择器改变灯珠颜色
本地代码集成离线iro.js库来添加一个颜色选择器控件,在无网络环境可以通过JavaScript将选中的颜色发送到服务器以改变LED颜色。以下是将iro.js集成到网页后的颜色图片。 Iro.js 地址API操作手册 color:change # 每当所选颜色发生变化时触发 - 无论是当用户与颜色选…...

Z 字形遍历二叉树
假设一个二叉树上各结点的权值互不相同。 我们就可以通过其后序遍历和中序遍历来确定唯一二叉树。 请你输出该二叉树的 ZZ 字形遍历序列----也就是说,从根结点开始,逐层遍历,第一层从右到左遍历,第二层从左到右遍历,…...

[Vue]Vue3从入门到精通-综合案例分析
一.Vue是什么: 概念:Vue是一个用于构建用户界面的渐进式的框架 以下的内容是自里向外的 声明式渲染(Vuejs核心包)组件系统(Vuejs核心包)客户端路由VueRouter大规模状态管理Vuex构建工具Webpack/Vite Vue的两种使用方式: Vue核心包开发-&…...

深度学习——神经网络(neural network)详解(二). 带手算步骤,步骤清晰0基础可看
深度学习——神经网络(neural network)详解(二). 手算步骤,步骤清晰0基础可看 前文如下:深度学习——神经网络(neural network)详解(一). 带手算步骤&#x…...

【扒网络架构】backbone、ccff
backbone CCFF 还不知道网络连接方式,只是知道了每一层 backbone backbone.backbone.conv1.weight torch.Size([64, 3, 7, 7])backbone.backbone.layer1.0.conv1.weight torch.Size([64, 64, 1, 1])backbone.backbone.layer1.0.conv2.weight torch.Size([64, 64,…...

linux进程
exit()函数正常结束进程 man ps aux 是在使用 ps 命令时常用的一个选项组合,用于显示系统中所有进程的详细信息。aux 不是 ps 命令的一个正式选项,而是三个选项的组合:a, u, 和 x。这三个选项分别代表不同的含义&#…...

PRVF-4037 : CRS is not installed on any of the nodes
描述:公司要求替换centos,重新安装ORACLE LINUX RAC的数据库做备库,到时候切换成主库,安装Linux7GRID 19C 11G Oracle,顺利安装grid 19c,安装11G数据库软件的时候检测报如题错误:**PRVF-4037 …...

整理 酷炫 Flutter 开源UI框架 FAB
flutter_villains 灵活且易于使用的页面转换。 项目地址:https://github.com/Norbert515/flutter_villains 项目Demo:https://download.csdn.net/download/qq_36040764/89631324...

Unity 编写自己的aar库,接收Android广播(broadcastReceiver)并传递到Unity
编写本文是因为找了很多文章,都比较片段,不容易理解,对于Android新手来说理解起来不友好。我这里写了一个针对比较小白的文章,希望有所帮助。 Android端 首先还是先来写Android端,我们新建一个Android空项目…...
Mysql cast函数、cast用法、字符串转数字、字符串转日期、数据类型转换
文章目录 一、语法二、示例2.1、复杂示例 三、cast与convert的区别 CAST 函数是 SQL 中的一种类型转换函数,它用于将一个数据类型转换为另一个数据类型,这篇文章主要介绍了Mysql中Cast()函数的用法,需要的朋友可以参考下。 Mysql提供了两种将值转换成指…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...