文档

基于EAS&Elasticsearch搭建RAG检索增强对话系统

更新时间:

您可以在大模型RAG服务中集成Elasticsearch信息检索组件,来增强模型生成答案的准确性和信息丰富度。Elasticsearch不仅具有高效检索能力,还提供了词表配置、索引管理等特色功能,使RAG对话系统能够更准确地理解查询意图,提供更为贴切和有价值的反馈。本文为您介绍如何在部署RAG服务时关联Elasticsearch,以及对RAG对话系统的基础功能和Elasticsearch的特色功能进行说明。

背景信息

EAS简介

EAS(Elastic Algorithm Service)是PAI的模型在线服务平台,支持将模型部署为在线推理服务和AI-Web应用。EAS提供了弹性扩缩容和蓝绿部署等功能,可以支撑您以较低的资源成本获取高并发且稳定的在线算法模型服务。此外,EAS具备资源组管理和版本控制等功能,并且有完整运维监控体系等能力。更详细的内容介绍,请参见EAS模型服务概述

RAG简介

随着AI技术的飞速发展,生成式人工智能在文本生成、图像⽣成等领域展现出了令人瞩目的成就。然而,在广泛应用大语⾔模型(LLM)的过程中,⼀些固有局限性逐渐显现:

  • 领域知识局限:大语言模型通常基于大规模通用数据集训练而成,难以针对专业垂直领域提供深入和针对性处理。

  • 信息更新滞后:由于模型训练所依赖的数据集具有静态特性,大模型无法实时获取和学习最新的信息与知识进展。

  • 模型误导性输出:受制于数据偏差、模型内在缺陷等因素,大语言模型可能会出现看似合理实则错误的输出,即所谓的“大模型幻觉”。

为克服这些挑战,并进一步强化大模型的功能性和准确性,检索增强生成技术RAG(Retrieval-Augmented Generation)应运而生。这一技术通过整合外部知识库,能够显著减少大模型虚构的问题,并提升其获取及应用最新知识的能力,从而实现更个性化和精准化的LLM定制。

Elasticsearch简介

阿里云Elasticsearch是基于开源Elasticsearch构建的全托管Elasticsearch云服务,在100%兼容开源功能的同时,支持开箱即用、按需付费。不仅提供云上开箱即用的Elasticsearch、Logstash、Kibana、Beats在内的Elastic Stack生态组件,还与Elastic官方合作提供免费X-Pack(白金版高级特性)商业插件,集成了安全、SQL、机器学习、告警、监控等高级特性,被广泛应用于实时日志分析处理、信息检索、以及数据的多维查询和统计分析等场景。更多关于阿里云Elasticsearch的详细介绍,请参见什么是阿里云Elasticsearch

使用流程

EAS自建了RAG系统化解决方案,提供了灵活可调的参数配置,您可以通过WebUI或者API调用RAG服务,定制自己专属的对话系统。RAG技术架构的核心为检索和生成:

  • 在检索方面,EAS支持多种向量数据库,包括开源的Faiss和阿里云的产品Milvus、Elasticsearch、Hologres、AnalyticDB for PostgreSQL。

  • 在生成方面,EAS支持丰富的开源模型,如通义千问、Llama、Mistral、百川等,同时支持ChatGPT调用。

本方案以Elasticsearch为例,为您介绍如何使用EAS与Elasticsearch构建一个大模型RAG对话系统。具体流程如下:

  1. 准备向量检索库Elasticsearch

    首先创建Elasticsearch实例,并准备部署RAG服务关联Elasticsearch实例时依赖的配置项。

  2. 部署RAG服务并关联Elasticsearch

    在EAS模型在线服务平台部署RAG服务,并关联Elasticsearch实例。

  3. 使用RAG对话系统

    您可以在RAG对话系统中连接Elasticsearch,上传业务数据文件,并进行知识问答。同时,Elasticsearch还支持词表配置、索引管理等特色功能,提升了搜索质量。

前提条件

已创建专有网络VPC、交换机和安全组。具体操作,请参见搭建IPv4专有网络创建安全组

使用限制

向量检索库和EAS必须在相同地域下。

注意事项

本实践受制于LLM服务的最大Token数量限制,旨在帮助您体验RAG对话系统的基本检索功能:

  • 该对话系统受制于LLM服务的服务器资源大小以及默认Token数量限制,能支持的对话长度有限。

  • 如果无需进行多轮对话,建议您关闭RAG服务的with chat history功能,这样能有效减少达到限制的可能性。详情请参见如何关闭RAG服务的with chat history功能

准备向量检索库Elasticsearch

步骤一:创建阿里云Elasticsearch实例

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch实例
  3. Elasticsearch实例页面左上角,单击创建,并配置以下关键参数,其他参数配置说明,请参见创建阿里云Elasticsearch实例

    参数

    描述

    地域和可用区

    选择与EAS服务相同的地域。

    实例类型

    选择通用商业版

    场景初始化配置

    选择通用场景

    登录密码

    配置登录密码,并保存到本地。

  4. 单击立即购买,进入确认订单页面,确认实例配置无误后,选中服务协议,单击立即开通

步骤二:准备配置项

  1. 准备Elasticsearch URL。

    1. Elasticsearch实例页面的顶部菜单栏,选择创建实例的地域,在实例列表中单击已创建的ES实例ID。

    2. 基本信息区域,获取私网地址和相应端口号,并拼接成Elasticsearch URL。image

      格式为http://<私网地址>:<私网端口>

      重要

      当使用私网地址时,需确保ES实例和PAI-RAG服务位于同一VPC内,否则连接失败。

  2. 准备索引名称

    1. Elasticsearch实例页面的顶部菜单栏,选择创建实例的地域,在实例列表中单击已创建的ES实例ID。

    2. 在左侧导航栏选择配置与管理 > ES集群配置

    3. YML文件配置区域右侧,单击修改配置

    4. YML文件配置面板中,修改自动创建索引允许自动创建索引,并在其他Configure配置区域选中复选框,然后单击确定image

    完成配置后,您在部署PAI-RAG服务时即可自定义索引名称,例如es-test。

  3. 准备ES User和password。

    ES User默认为elastic,ES password是您在创建ES实例时设置的登录密码。如果您忘记了登录密码,可以按照以下操作步骤重置密码:

    1. Elasticsearch实例页面的顶部菜单栏,选择创建实例的地域,在实例列表中单击已创建的ES实例ID。

    2. 在左侧导航栏选择配置与管理 > 安全配置

    3. 集群访问设置区域,单击ES实例访问密码后的重置密码

    4. 重置密码配置面板中,设置密码后,单击确定

部署RAG服务并关联Elasticsearch

  1. 进入模型在线服务(EAS)页面。

    1. 登录PAI控制台

    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应的工作空间。

    3. 在工作空间页面的左侧导航栏选择模型部署 > 模型在线服务(EAS),进入模型在线服务(EAS)页面。

  2. 模型在线服务页面,单击部署服务,在场景化模型部署区域,单击大模型RAG对话系统部署6eea7736f88e6ec8b3b900e4d028bb48

  3. 部署大模型RAG对话系统页面,配置以下关键参数,其他参数配置说明,请参见步骤二:部署RAG服务

    参数

    描述

    向量检索库设置

    版本类型

    选择Elasticsearch。

    私网地址/端口

    配置为步骤二中已获取的Elasticsearch URL。

    索引名称

    输入新的索引名称或已存在的索引名称。对于已存在的索引名称,索引结构应符合PAI-RAG要求,例如可以填写之前通过EAS部署RAG服务时自动创建的索引。

    账号

    配置为elastic。

    密码

    配置为步骤二中已设置的登录密码。

    专有网络配置

    VPC

    请确保所配置的专有网络与Elasticsearch实例保持一致。

    交换机

    安全组名称

  4. 参数配置完成后,单击部署

使用RAG对话系统

RAG对话系统基础功能支持

RAG对话系统的基本使用方法如下,更多详细介绍,请参见大模型RAG对话系统

配置RAG对话系统

  1. RAG服务部署成功后,单击服务方式列下的查看Web应用,启动WebUI页面。

  2. 配置机器学习模型。

    • Embedding Model Name:系统内置了四种Embedding模型供您选择,能够将本文内容转化为Embedding向量形式。您可以根据场景需要选择更适合业务的Embedding模型。

    • Embedding Dimension:选择Embedding Model Name后,系统将自动进行配置,无需您手动操作。

  3. 测试向量检索库Elasticsearch连接是否正常。

    系统已自动识别并应用了部署服务时配置的向量检索库设置,您可以单击Connect ElasticSearch,来验证Elasticsearch实例是否连接正常。如果连接失败,请参考步骤二:准备配置项,检查向量检索库配置是否正确,修改对应配置项为正确配置,然后单击Connect ElasticSearch,重新连接Elasticsearch实例。

上传指定的业务数据文件

Upload页签中,上传指定的业务数据文件,类型为.txt、.pdf、Excel(.xlsx或.xls)、.csv、Word(.docx或.doc)、Markdown或.html。

image

  1. 设置语义切块参数。

    示例

    说明

    rag_chatbot_test_doc.txt

    通过配置以下参数来控制文档切块粒度的大小和进行QA信息提取:

    • Chunk Size:指定每个分块的大小,单位为字节,默认为500。

    • Chunk Overlap:表示相邻分块之间的重叠量,默认为10。

    • Process with QA Extraction Model:通过选中Yes复选框启动QA信息提取功能,系统将在您上传业务数据文件后自动抽取出QA对,以获得更好的检索和回答效果。

  2. FilesDirectory页签下上传业务数据文件(支持多文件上传)或对应目录。

  3. 单击Upload,系统会先对上传的文件进行数据清洗(文本提取、超链接替换等)和语义切块,然后进行上传。

配置问答策略

Chat页签,支持以下三种向量检索方式,您可以根据场景需要进行选择:

  • Embedding Only:向量数据库线索召回。

  • Keyword Only:关键词检索召回。

  • Hybrid:向量数据库和关键词检索多路召回融合。

image

进行知识问答

将检索返回的结果与用户的问题输入至已选择的Prompt模板中,送入EAS-LLM服务,从中获取问答结果。

image

Elasticsearch特色功能支持

分词/停用词表个性化设置

阿里云Elasticsearch内置了IK分词插件(analysis-ik)。IK分词器就像是一个词典,收纳了各类常用词,能够将语句按照词语进行拆分,而不是拆分为独立的汉字。IK自带了主分词词库和停用词词库,主分词词库能够处理复杂的中文文本分词,而停用词词库能够去除无意义的高频词(如“的”、“是”、“在”等),二者都能提高检索的效率和准确性。尽管IK分词插件自带的词库比较强大,但是在特定领域(如法律、医学等)往往存在大量专业术语,或者知识库还可能存在一些产品名称、公司名称和品牌名称等,这些词汇可能不在默认的词库中,您可以根据具体业务需求来设置自定义词表,以获得更准确的检索效果。更多关于Elasticsearch的IK分词插件的介绍,请参见使用IK分词插件(analysis-ik)

1.准备分词/停用词表

在本地准备一份自定义的分词表或停用词表:

  • 词表格式:.dic类型的文件,例如new_word.dic。

  • 内容要求:在词表文件中,按行添加新词或停用词。以分词表为例,使用内置分词表,会把“云服务器”分为“云”和“服务器”两个词,按照业务需求希望将其作为一个词,您可以将“云服务器”加入新词表中,new_word.dic文件内容示例如下:

    云服务器
    自定义分词
2.上传词表文件

准备好词表文件后,您需要将词表文件上传到指定位置。具体操作步骤如下:

  1. 进入Elasticsearch实例页面

    1. 登录阿里云Elasticsearch控制台
    2. 在左侧导航栏,单击Elasticsearch实例
    3. Elasticsearch实例页面的顶部菜单栏,选择创建实例的地域。

    4. 在实例列表中,单击目标Elasticsearch实例ID。

  2. 在左侧导航栏,选择配置与管理 > 插件配置

  3. 更新Elasticsearch实例的词典。

    支持热更新和冷更新两种方式,以热更新为例,具体操作步骤如下:

    说明
    • Elasticsearch 7.16及以上版本的实例和部分地域的基于云原生管控的实例不支持IK词典冷更新。

    • IK热更新不支持修改系统自带的主词典,如果您需要修改系统主词典请使用IK冷更新的方式。

    • 热更新生效方式:

      第一次上传词典文件时,会对整个集群的词典进行更新,需要重启集群才能生效;二次上传同名文件不会触发集群重启,在运行过程中直接加载词库。

    1. 系统默认插件列表页签的搜索文本框中,输入analysis-ik并按回车键。

    2. 单击analysis-ik插件操作列下的热更新,然后在热更新配置面板中,单击配置

    3. 热更新配置面板中,选择词典的更新方式,并按照以下说明上传词典文件。

      更新方式

      说明

      上传DIC文件

      在下拉列表中,选择上传DIC文件。然后单击上传DIC文件,并按照控制台操作指引,上传已准备好的分词词表和停用词词表。image

      添加OSS文件

      在下拉列表中,选择添加OSS文件。然后输入OSS存储空间(Bucket)名称词表文件名称后,单击添加image

      说明
      • 请确保Bucket与当前Elasticsearch实例在同一地域下,且文件为DIC格式的文件。

      • 当源端(OSS)的文件内容发生变化后,您需要重新手动配置上传才能生效,不支持自动同步更新。

      • 如果出现“受OSS Bucket授权策略限制,暂无法访问您的OSS Bucket”的错误提示,请单击进行授权,并按控制台操作指引完成授权操作。

    4. 上传词表文件后,选中“该操作会重启实例,请确认后操作。”复选框,并单击保存

      保存后,Elasticsearch实例会进行滚动重启,等待滚动重启结束后,词典会自动生效。

  4. (可选)更新已上传的词表文件。

    当词表使用一段时间后,如果您需要扩充或减少词典中的内容,可以按照以下操作步骤修改上传的词表文件。

    1. 热更新配置面板中,先删除之前上传的同名词表文件,再按照上述操作步骤重新上传修改过的同名词表文件。

    2. 单击保存

      说明

      因修改的是已存在的同名词表文件的内容,所以本次上传修改过的同名词表文件不需要滚动重启整个集群。

  5. 更新词表文件后,在RAG服务的WebUI页面重连Elasticsearch。具体操作,请参见配置RAG对话系统

    重连Elasticsearch后,在WebUI页面进行知识问答。当向量检索方式选择Keyword Only(关键词检索)或Hybrid(向量检索+关键词检索)时,则可以使用更新词表后的Elasticsearch进行全文检索。

索引管理

Elasticsearch提供了索引管理功能,管理好索引是确保RAG对话系统能够高效、准确地从大量信息中检索出有价值内容,并生成高质量回答的基础。具体操作步骤如下:

  1. 进入Elasticsearch实例页面

    1. 登录阿里云Elasticsearch控制台
    2. 在左侧导航栏,单击Elasticsearch实例
    3. Elasticsearch实例页面的顶部菜单栏,选择创建实例的地域。

    4. 在实例列表中,单击目标Elasticsearch实例ID。

  2. 在左侧导航栏,选择配置与管理 > 可视化控制

  3. Kibana区域,单击修改配置,配置Kibana访问白名单,以公网访问为例,具体操作,请参见配置Kibana公网或私网访问白名单

  4. 登录Kibana控制台。

    1. 单击右上角的image,然后单击页面左上角的返回图标,返回可视化控制页面。

    2. Kibana区域,单击公网入口image

    3. 在Kibana登录页面,输入用户名和密码。

    4. 单击登录,进入的界面如下图所示。image

  5. 查看并管理索引。

    1. 在Kibana控制台单击左上角的image,然后在下拉列表中选择Management > Stack Management

    2. 在左侧导航栏数据区域,单击索引管理

    3. 在右侧索引页签,查看相应的索引(例如已创建的索引es_test),并进行包括关闭索引、刷新索引、清空索引以及删除索引等管理操作。image

相关文档

  • 针对AIGC和LLM的典型前沿场景,EAS提供了简化的部署方式。您可以很方便地一键拉起服务,包括ComfyUI部署、Stable Diffusion WebUI部署、ModelScope模型部署、HuggingFace模型部署、Triton部署以及TFserving部署等。详情请参见EAS场景化部署说明

  • RAG服务WebUI界面提供了丰富的推理参数配置选项,以满足多样化需求。此外,RAG服务也支持通过API接口进行调用。具体实现细节以及参数配置说明,请参见大模型RAG对话系统