基于火山引擎云搜索服务和豆包模型搭建 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提供了两种将值转换成指…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...