在云搜索服务的 ML 服务中,支持创建 RAG 深度学习模型,能把 OpenSearch 的混合检索与大模型生成结果相结合,得到更具语义连贯性和信息准确性的结果。本文介绍基于云搜索服务 RAG 模型和火山方舟平台提供的豆包模型,快速搭建一个云搜索服务官方文档的 RAG 推理服务(智能问答系统),可以咨询云搜索服务产品的各种问题。
背景信息
大语言模型(LLM,Large language model)作为新一轮科技产业革命的战略性技术,其核心能力在于深层语境解析与知识融合。在生成式人工智能方向主要用于图像生成、书写文稿、信息搜索等。当下的 LLM 模型是基于大量数据训练的,目的是让它们掌握广泛的普遍知识,这些知识被储存在它们神经网络的权重(也就是参数记忆)里。但是,如果我们要求 LLM 生成的回答涉及到它训练数据之外的知识,比如最新的、专有的或某个特定领域的信息,这时就可能出现事实上的错误(我们称之为“幻觉”)。
RAG (Retrieval-Augmented Generation,检索增强生成)的核心思想是让语言模型在生成回答或文本时能够动态地从外部知识库中检索相关信息。这种方法能够提高模型生成内容的准确性、可靠性和透明度,同时减少“幻觉”。
本文介绍基于云搜索服务 RAG 模型和火山方舟平台提供的豆包模型,快速搭建一个云搜索服务官方文档的 RAG 推理服务(智能问答系统)。系统使用 OpenSearch 作为外部知识库,火山豆包作为大语言模型,全流程构建在火山引擎平台上。本次实践采用的语料为火山引擎云搜索服务官网文档知识库,将语料处理后存入 OpenSearch 索引中,同时通过部署在云搜索服务 ML 节点上的 Embedding 模型,将原始语料额外转化为向量字段存储在同一个 OpenSearch 索引中,方便后续做混合查询召回。
在查询流程中,用户通过对话框输入问题,RAG 应用会将用户输入的问题通过 Embedding 模型转化为向量,然后使用云搜索服务 OpenSearch 的混合查询功能查询问题向量和问题文本召回 Top n 的文档结果,再将文档结果发送给豆包大模型,最后按照要求根据文档内容回答用户的问题。
注意事项
目前仅 OpenSearch 2.9.0 版本实例支持 ML 服务。
前提条件
- 保证网络畅通,需要确保各云资源处于相同地域、相同私有网络环境。如何创建私有网络和子网,请参见创建私有网络和创建子网。
- 目前仅 OpenSearch 2.9.0 版本实例支持 ML 服务,请提前创建 OpenSearch 实例。具体操作,请参见创建实例。
搭建 RAG 推理服务(智能问答系统)
步骤一、配置方舟模型
- 登录火山方舟控制台。
- 在顶部导航栏,选择目标项目和地域。
- 选择模型,创建推理接入点。
- 在左侧导航栏选择模型推理 > 在线推理,然后单击创建推理接入点。
- 设置接入点名称,建议选择的接入模型为
Doubao-pro-32k/240615
,然后单击接入模型。
您也可以选择使用Doubao-lite-32k
模型。如需了解各参数含义,请参见创建推理接入点。
- 查看豆包模型的推理接入点信息。
- 在模型推理页面,单击新建的模型接入点名称。
- 在API调用页签下,选择API Key授权方式,然后在 SDK 调用示例中获取并保存
base url
和model
信息。
- 创建调用豆包模型的 API Key。
- 在方舟控制台的左侧导航栏选择 API Key 管理,然后单击创建 API Key。
- 自定义设置 API Key 的名称,然后单击创建。
- 创建完成后,查看并保存 API Key。
步骤二、创建 ML 服务
OpenSearch 实例创建后,您可以在实例中创建 ML 服务,用于后续的模型创建和部署。
如何创建 ML 服务,请参见创建 ML 服务。
说明
- 目前支持 CPU 和 GPU 两种资源类型,本文选择使用 CPU 类型资源。如需了解各参数含义,请参见创建 ML 服务。
- 使用 CPU 资源类型时,建议选择
1:4
资源比例,能够保障后续搭建的 RAG 推理服务性能更佳。 - 需要为 ML 开通公网访问,允许公网设备请求 ML 服务。开通公网访问后,系统将为 RAG 模型提供一个效果测试地址,可以在 Web 页面进行智能问答测试。
步骤三、部署 Text Embedding 模型。
您可以创建一个推理服务,关联一个 Text Embedding 模型,并根据业务需求配置网络、资源和自定义参数等信息。本文推荐使用TownsWu/PEG
公共模型。
进入新建的 ML 服务中。
在左侧导航栏选择推理服务,然后单击创建推理服务。
在创建推理服务面板,关联TownsWu/PEG
模型,配置推理服务相关参数,然后单击确定。
配置 | 说明 |
---|
服务名称 | 自定义设置推理服务的名称,比如“TownsWu/PEG”和模型同名。 - 首字符仅支持字母或下划线(_)。
- 可包含字母、数字、特殊字符仅支持英文句号(.)、下划线(_)、短横线(-)、反斜杠(/),长度为 1~128 个字符。
- 最多只能包含一个反斜杠(/)字符。
|
选择模型 | 从拉列表框选择 TownsWu/PEG 模型。 |
可用区 | 选择需要部署推理服务的可用区。 - 如果 OpenSearch 实例是单可用区,那么您的推理服务也只有一个可用区。
- 如果需要多可用区部署推理服务,则需要确保 OpenSearch 实例有多个可用区。如何为实例添加可用区,请参见添加可用区。
|
是否开启高可用区 | 单可用区部署推理服务时,支持为推理服务开启高可用。
开启高可用的推理服务,节点数量至少为 2。 |
资源类型 | 从下拉列表中选择推理服务使用的资源类型,您可以选择 CPU 类型和 GPU 两种资源类型。
如果需要使用的资源类型还未启用,或资源规格太低,您可以选择先变配 ML 服务。具体操作,请参见变配 ML 服务。 |
规格 | 从下拉列表中选择资源规格。 |
节点数量 | 设置推理服务的节点数量。 - 单可用区部署,未开启高可用:节点数量可设范围为 1~512。
- 单可用区部署,开启高可用:节点数量为 2 的整数倍,最大值为 512。
- 多可用区部署:节点数量为可用区个数的整数倍,最大值为 512。比如可用区个数为 2,节点数量就为 2 的整数倍。
|
网络配置 | 是否开通私网访问。
开通后,系统将为推理服务关联的模型分配一个私网访问地址,允许与 ML 服务在相同 VPC 环境内的客户端访问关联的模型。 |
描述 | 自定义设置推理服务的描述信息。 |
高级选项 | 关联 Text Embedding 类型模型时,无需配置高级参数。 |
启动推理服务。
- 推理服务创建后,单击操作列中的启动。
- 在弹出的对话框,单击确定。
获取模型调用信息。
推理服务启动后,在推理服务详情页面单击查看调用信息,然后获取模型的调用信息。
步骤四、创建文档 AI 任务
进入 ML 服务中。
在左侧导航栏选择 AI任务,然后单击创建任务。
在创建任务对话框,选择模板代码方式和云搜索文档任务模板,然后配置其他参数,配置完成后单击确定。
此处仅介绍云搜索文档任务的 config 参数,如需了解其他参数,请参见创建任务。
配置config参数 | 说明 |
---|
{
"task":"migrate",
"dim": 1024,
"opensearch": {
"username": "admin",
"password": "admin用户密码",
"host": "实例私网接入点域名",
"port": 9200,
"schema": "传输协议,小写的https或http",
"index": "迁移的索引名称"
}
}
| 配置 task 参数: - "migrate" : 表示启动迁移任务。
- "init": 表示只创建索引。
- 其他或不填: 表示从原始文档进行构建,如果需要运行此类任务请提工单咨询。
|
配置 dim 参数:
向量维度,根据 embedding 模型的长度进行填充。本文使用TownsWu/PEG 模型,该模型的向量维度为 1024。 |
配置 opensearch 实例连接信息:
包括实例访问用户和密码,访问接入点等信息,以及配置一个索引名称(如cloudsearch-doc ),该索引将被创建用于存储向量。 |
启动云搜索文档任务。
- 在任务列表选择云搜索文档任务,单击操作列中的启动。
- 等待任务运行。
任务运行完成后,状态显示为成功。
步骤五、创建语义嵌入 AI 任务
进入 ML 服务中。
在左侧导航栏选择 AI任务,然后单击创建任务。
在创建任务对话框,选择模板代码方式和 xc_import_embed 模板,然后配置其他参数,配置完成后单击确定。
此处仅介绍 xc_import_embed 任务的 config 参数和依赖配置,如需了解其他参数,请参见创建任务。
配置config 参数 | 说明 |
---|
{
"opensearch": {
"username": "admin",
"password": "admin用户密码",
"host": "实例私网接入点域名",
"port": 9200,
"schema": "传输协议,小写的https或http",
"index": "源索引",
"target_index": "目标索引"
},
"embedding": {
"remote_config": {
"method": "POST",
"url": "http://d-18***ml2:8000/v1/embeddings",
"params": {},
"headers": {
"Content-Type": "application/json"
},
"advance_request_body": {
"model": "TownsWu/PEG"
}
}
},
"field_dict": {
"full_title": "full_title_knn",
"summary": "summary_knn",
"content.summary": "content.summary_knn"
}
}
| 配置 opensearch 实例连接信息:
包括实例访问用户和密码,访问接入点等信息,以及配置源索引和目标索引。 说明 源索引和目标索引需要和用于存储文档向量的索引名称保持一致,比如cloudsearch-doc 。 |
配置 embedding 参数:
获取TownsWu/PEG 模型的调用信息,配置到此处的 embedding 参数。 |
配置 field_dict 参数:
需要进行语义嵌入的字段,请直接使用默认配置。 |
启动语义嵌入任务。
- 在任务列表选择语义嵌入任务,单击操作列中的启动。
- 等待任务运行。
任务运行成功后,状态显示为运行中。
步骤六、创建并部署 RAG 模型
创建 RAG 模型。
- 进入 ML 服务中。
- 在左侧导航栏选择模型管理,然后选择我的模型页签,再单击创建模型。
- 在创建模型对话框,创建 RAG 模型,然后选择 TOS 存储桶和一个空文件夹,配置完成后单击确定。
RAG 模型目前只能手动创建,请提前创建 TOS 存储桶和空文件夹,具体操作,请参见创建存储桶。
创建并启动推理服务。
您可以创建一个推理服务,关联新建的 RAG 模型,并根据业务需求配置网络、资源规格和自定义参数等信息。
在左侧导航栏选择推理服务,然后单击创建推理服务。
在创建推理服务面板,关联新建的 RAG 模型,配置推理服务相关参数,然后单击确定。
配置 | 说明 |
---|
服务名称 | 自定义设置推理服务的名称,比如“RAG”。 - 首字符仅支持字母或下划线(_)。
- 可包含字母、数字、特殊字符仅支持英文句号(.)、下划线(_)、短横线(-)、反斜杠(/),长度为 1~128 个字符。
- 最多只能包含一个反斜杠(/)字符。
|
选择模型 | 从拉列表框选择新建的 RAG 模型。 |
可用区 | 选择需要部署推理服务的可用区。 - 如果 OpenSearch 实例是单可用区,那么您的推理服务也只有一个可用区。
- 如果需要多可用区部署推理服务,则需要确保 OpenSearch 实例有多个可用区。如何为实例添加可用区,请参见添加可用区。
|
是否开启高可用区 | 单可用区部署推理服务时,支持为推理服务开启高可用。
开启高可用的推理服务,节点数量至少为 2。 |
资源类型 | 从下拉列表中选择推理服务使用的资源类型,您可以选择 CPU 类型和 GPU 两种资源类型。
如果需要使用的资源类型还未启用,或资源规格太低,您可以选择先变配 ML 服务。具体操作,请参见变配 ML 服务。 |
规格 | 从下拉列表中选择规格。 说明 配置 RAG 模型的启用资源规格时,配置为1vCPU 4GiB 。
如果后续需要为 RAG 推理服务配置浏览器可视化页面,则必须使用1vCPU 4GiB 规则。由于 gradio 是有状态的,RAG 推理服务为了保证性能没有配置 sticky session,配置多 CPU 会导致 session 错乱。 |
节点数量 | 设置推理服务的节点数量。 - 单可用区部署,未开启高可用:节点数量可设范围为 1~512。
- 单可用区部署,开启高可用:节点数量为 2 的整数倍,最大值为 512。
- 多可用区部署:节点数量为可用区个数的整数倍,最大值为 512。比如可用区个数为 2,节点数量就为 2 的整数倍。
|
网络配置 | 是否开通私网访问。
开通后,系统将为推理服务关联的模型分配一个私网访问地址,允许与 ML 服务在相同 VPC 环境内的客户端访问关联的模型。 |
描述 | 自定义设置推理服务的描述信息。 |
高级选项 | 为推理服务配置自定义参数,默认提供UserConfig 、MaxReplicasPerNode 两个参数。
此处关联 RAG 模型,需要在UserConfig 参数中填入以下信息,请正确填写各参数的取值信息。 {
"type": "cloud_search_bot",
"opensearch": {
"username": "admin",
"password": "admin用户密码",
"host": "实例私网接入点域名",
"port": 9200,
"schema": "传输协议,小写的https或http",
"index": "用于检索的索引名称"
},
"llm": {
"model32k": {
"host": "豆包模型的base url信息",
"endpoint": "豆包模型的model信息",
"apikey": "调用豆包模型的 API Key"
}
},
"embedding": {
"remote_config" : {
"method" : "POST",
"url" : "http://d-181131787967***-serve-svc.r-***4y7zoml2:8000/v1/embeddings",
"params" : {},
"headers" : {
"Content-Type" : "application/json"
},
"advance_request_body" : {
"model" : "TownsWu/PEG"
}
}
},
"generate":true
}
- opensearch:配置 OpenSearch 实例的连接信息,包括实例访问用户和密码,访问接入点等信息。其中的 index,表示用于检索的索引名称。与前面的索引名称相同,比如
cloudsearch-doc 。 - llm:配置豆包模型的调用信息,包括 base url、model 和 API Key 信息。
- embedding:配置已启用的
TownsWu/PEG 模型的调用信息。
|
启动推理服务。
- 推理服务创建后,单击操作列中的启动。
- 在弹出的对话框,单击确定。
结果验证:访问 RAG 推理服务(智能问答)
完成前面所有配置操作后,您已经可以在相同 VPC 环境的 ECS 中,通过 RAG 模型的调用信息验证官方文档推理任务了。直接在 ECS 命令行中运行调用信息,您将会查看到持续输出 txt 文本内容。
为了更加直观的演示智能问答,您可以为 ML 服务开通公网访问,系统将为 RAG 模型提供一个效果测试地址,可以在 Web 页面进行智能问答测试。在本文的 Demo中,您可以在可视化页面咨询云搜索服务产品的各种问题。
操作步骤
- 进入 ML 服务中,在左侧导航栏选择推理服务。
- 查找目标 RAG 推理服务,单击进行服务详情,然后在页面底部单击关联 RAG 模型后方的效果测试。
如何为 ML 服务没有开启公网访问,请参见配置 ML 服务公网访问。
- 在弹出的页面中填写 API Key,然后单击 Submit。
如何创建并获取调用 RAG 模型的 API Key,请参见创建 API Key。
- 在 RAG 推理服务页面,输入需要咨询的云搜索服务问题,然后回车确定输入,将会返回最为准确的答案。