基于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、OpenSearch以及RDS PostgreSQL。

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

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

  1. 准备向量检索库Elasticsearch

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

  2. 部署RAG服务并关联Elasticsearch

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

  3. 使用RAG对话系统

    您可以在RAG对话系统中连接Elasticsearch,上传企业知识库文件,并进行知识问答。

前提条件

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

注意事项

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

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

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

准备向量检索库Elasticsearch

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

登录阿里云Elasticsearch控制,在Elasticsearch实例页面创建阿里云Elasticsearch实例。其中关键参数配置说明如下,其他配置详情,请参见创建阿里云Elasticsearch实例

参数

描述

地域和可用区

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

实例类型

选择通用商业版

场景初始化配置

选择通用场景

登录密码

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

步骤二:准备配置项

  1. 准备Elasticsearch URL。

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

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

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

      重要

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

  2. 准备索引名称。

    Elasticsearch实例的配置与管理 > ES集群配置页面,单击修改配置,更新YML文件配置,将自动创建索引设置为允许自动创建索引。具体操作,请参见配置YML参数image

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

  3. 准备ES Userpassword。

    ES User默认为elastic,ES password是您在创建ES实例时设置的登录密码。如果您忘记了登录密码,可重置密码,具体操作,请参见重置实例访问密码

部署RAG服务并关联Elasticsearch

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

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

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

    参数

    描述

    基本信息

    模型来源

    选择开源公共模型

    模型类别

    选择模型类别,本方案以大模型Qwen1.5-1.8b为例。

    资源配置

    资源配置选择

    系统会根据已选择的模型类别,自动推荐适合的资源规格。更换至其他资源规格,可能会导致模型服务启动失败。

    向量检索库设置

    版本类型

    选择Elasticsearch

    私网地址/端口

    配置为步骤二中已获取的Elasticsearch URL,格式为http://<私网地址>:<私网端口>

    索引名称

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

    账号

    配置为elastic。

    密码

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

    专有网络配置

    VPC

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

    交换机

    安全组名称

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

使用RAG对话系统

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

1、连接向量检索库

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

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

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

2、上传企业知识库文件

您可以按照以下流程上传您的企业知识库文件,系统会自动按照PAI-RAG格式将知识库存储到向量检索库中,以方便您进行后续的知识检索。您也可以利用向量检索库中已有的知识库,但必须符合PAI-RAG格式要求,否则可能会导致检索报错。

image

  1. Upload页签,设置语义分块参数。

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

    参数

    描述

    Chunk Size

    指定每个文本分块的大小,单位为字节,默认为500。

    Chunk Overlap

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

    Process with QA Extraction Model

    通过选中Yes复选框启动QA信息提取功能,系统将在您上传企业知识库文件后自动抽取出QA对,以获得更好的检索和回答效果。

  2. FilesDirectory页签下上传企业知识库文件(支持多文件上传)或对应目录。支持的文件类型为.txt、.pdf、Excel(.xlsx或.xls)、.csv、Word(.docx或.doc)、Markdown或.html,例如rag_chatbot_test_doc.txt

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

3、进行知识问答

RAG系统将检索返回的结果与用户问题填充到已选择的Prompt模板中,一并提交至EAS-LLM服务,从中获取问答结果。

image

Elasticsearch特色功能支持

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

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

1、准备主词典或停用词词典

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

  • 词典文件格式:.dic类型的文件,文件名包含大小写字母、数字或下划线,且长度不超过30个字符。例如new_word.dic。

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

    云服务器
    自定义分词

2、上传词典文件

准备好词典文件后,您需要将词典文件上传到指定位置。以热更新为例,具体操作步骤如下。更多关于更新词典文件的操作方法,请参见使用IK分词插件(analysis-ik)

  1. 进入Elasticsearch实例详情页面。

    1. 登录阿里云Elasticsearch控制台
    2. 在左侧导航栏,单击Elasticsearch实例
    3. 进入目标实例。
      1. 在顶部菜单栏处,选择资源组和地域。
      2. Elasticsearch实例中单击目标实例ID。
  2. 在左侧导航栏,选择配置与管理 > 插件配置

  3. 系统默认插件列表页签,找到analysis-ik插件,在其右侧的操作列中单击热更新

  4. IK词库配置-热更新控制面板,单击目标词典右侧的编辑,上传对应的词典文件后单击保存

    词典文件更新方式包括:

    • 上传本地文件:单击文件上传区域上传词典文件,或拖拽词典文件到上传区域。

    • 上传OSS文件:输入Bucket名称和词典文件名称,单击添加

      • Bucket与阿里云ES实例需要在同一地域。

      • 不支持自动同步更新词典文件。源端OSS中的词典文件内容发生变化后,需要通过热更新使之生效。

    说明
    • 词典文件后缀必须是.dic,文件名可以包含大小写字母、数字和下划线,长度不超过30个字符。

    • 如果您需要修改已上传的词典文件内容,可单击目标词典文件右侧的下载按钮图标,下载、修改词典文件,然后删除源词典文件并重新上传。

    • 支持上传多个词典文件,仅词典文件内容发生变化时集群不需要重启,文件名称或文件数量发生变化时需要集群重启。为保证您的业务不受影响,请在业务低峰期进行操作,等待重启结束后,词典会自动生效。

  5. 单击确定,更新词典文件。词典文件更新后,您需要在RAG服务的WebUI页面重连Elasticsearch,具体操作,请参见连接向量检索库

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

索引管理

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

  1. 进入Elasticsearch实例详情页面。

    1. 登录阿里云Elasticsearch控制台
    2. 在左侧导航栏,单击Elasticsearch实例
    3. 进入目标实例。
      1. 在顶部菜单栏处,选择资源组和地域。
      2. Elasticsearch实例中单击目标实例ID。
  2. 在左侧导航栏,选择可视化控制

  3. Kibana区域,单击修改配置,配置Kibana公网或私网访问白名单。

    具体操作,请参见配置Kibana公网或私网访问白名单

  4. 登录Kibana控制台。

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

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

      说明

      开启Kibana公网访问或Kibana私网访问开关后,页面才会显示公网入口或私网入口。

      image

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

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

  5. 查看并管理索引。

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

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

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

相关文档