文档

阿里云大模型RAG对话系统最佳实践

更新时间:

大模型RAG对话系统最佳实践,旨在指引AI开发人员如何有效地结合LLM大语言模型的推理能力和外部知识库检索增强技术,从而显著提升对话系统的性能,使其能更加灵活地返回用户查询的内容。适用于问答、摘要生成和其他依赖外部知识的自然语言处理任务。通过该实践,您可以掌握构建一个大模型RAG对话系统的完整开发链路。

背景信息

大语言模型(LLM)在生成准确和实时的回复方面存在局限性,不适合直接用于需要精确信息的客服或问答等场景。当前业界普遍采用基于检索增强的RAG技术来改善LLM的表现。该方法通过结合LLM的归纳生成能力和向量检索库的检索能力,增强对用户查询的理解,并产生更加可靠的回复。

检索增强生成(Retrieval-Augmented Generation, RAG)技术结合了大语言模型(LLM),如通义千问,与信息检索系统,以提高文本生成的准确性和丰富度。在响应用户查询时,RAG首先利用检索系统从知识库中检索相关内容,然后将检索到的内容与原始查询一同输入大语言模型(LLM),从而让语言模型不用重新训练就能够获取最新的信息,并产生可靠的输出。RAG特别适用于问答、摘要生成和其他依赖外部知识的自然语言处理任务,同时还支持定制化提示(Prompt)和基于检索的多轮对话管理。LangChain可以用来实现这些应用,从而进一步优化用户交互体验和答案质量。

方案架构

image

本方案包括以下功能模块:

  • 向量检索库准备:根据场景需求选择开通Hologres、AnalyticDB PostgreSQL或ElasticSearch,或使用Faiss作为向量检索库供后续RAG对话系统链路使用。

  • 对话模型推理服务在线部署:您可以在EAS中将对话模型部署为在线服务,以供后续RAG对话系统链路中调用模型服务。

  • RAG服务在线部署:您可以在EAS中部署LangChain的WebUI服务。

  • 在WebUI界面进行知识问答:打开RAG服务的WebUI应用,然后串联自定义的业务数据进行知识问答,验证对话系统的效果。

前提条件

  • 已开通PAI(EAS)并创建了默认工作空间。具体操作,请参见开通PAI并创建默认工作空间

  • 如果使用RAM用户来部署模型,需要为RAM用户授予EAS的管理权限,详情请参见云产品依赖与授权:EAS

  • 已创建一个专有网络VPC、交换机和安全组。详情请参见创建和管理专有网络创建安全组

  • 已购买灵骏智算资源。具体操作,请参见灵骏智算资源配额如果不做大规模预训练与微调,仅做应用部署,则可跳过该步骤。

    说明
    • 仅在华北6(乌兰察布)地域支持购买灵骏资源,且需要开通白名单。

    • 当前灵骏智算资源仅供白名单用户受限申请使用,如果您希望使用灵骏智算资源,您可先提交工单,申请添加灵骏智算使用白名单。

步骤一:准备向量检索库

您可以选择以下任意一种产品构建本地向量库:

其中,Faiss无需开通或购买即可使用,Hologres、AnalyticDB PostgreSQL和ElasticSearch需要开通并准备相应的WebUI界面配置参数。后续您可以使用准备好的参数连接向量检索库。

Hologres

  1. 开通Hologres实例并创建数据库。具体操作,请参见购买Hologres。您需要将已创建的数据库名称保存到本地。

  2. 在实例详情页面查看调用信息。

    1. 单击实例名称,进入实例详情页面。

    2. 网络信息区域,单击指定VPC后的复制,将域名:80前面的内容保存到本地。

  3. 切换到账号管理Tab页,创建自定义用户。并将账号和密码保存到本地,后续用于连接Hologres实例。具体操作,请参见创建自定义用户

    其中:选择成员角色选择实例超级管理员(SuperUser)

AnalyticDB for PostgreSQL

  1. AnalyticDB for PostgreSQL版控制台上创建实例。具体操作,请参见创建实例

    其中:向量引擎优化选择开启

  2. 单击实例名称,进入基本信息页面,在该页面中的数据库连接信息区域,复制内网地址和外网地址并保存到本地。

    说明
    • 如果没有外网地址,您需要单击申请外网地址来获取。具体操作,请参见管理外网地址

    • 如果在同一个VPC内连接实例,只需使用内网地址。

  3. 创建数据库账号,并将数据库账号和密码保存到本地,后续用于连接数据库。具体操作,请参见创建数据库账号

  4. 配置白名单为可信来源IP。具体操作,请参见设置白名单

ElasticSearch

  1. 创建阿里云Elasticsearch实例。具体操作,请参见创建阿里云Elasticsearch实例

    其中:

    • 选择服务选择通用商业版

    • 场景初始化配置选择通用场景

    • 您需要将网络及系统配置向导页面配置的登录名登录密码保存到本地。

  2. 单击实例名称,进入实例基本信息页面。在该页面获取私网地址私网端口并保存到本地。

Faiss

使用Faiss构建本地向量库,无需购买线上向量库产品,免去了线上开通向量库产品的复杂流程,更轻量易用。

步骤二:部署模型服务

在本方案的RAG对话系统链路中,需要部署对话模型推理服务和RAG服务,分别作为与用户交互的对话模型和知识文档预处理步骤的QA提取模型。具体操作步骤如下:

部署对话模型推理服务

您可以使用自定义的数据微调训练对话模型并部署为推理服务,具体操作,请参见灵骏分布式训练和部署模型。本方案以预置镜像为例,介绍如何部署对话模型推理服务:

  1. 进入PAI-EAS 模型在线服务页面。

    1. 登录PAI控制台

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

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

  2. PAI-EAS 模型在线服务页面,单击部署服务,在弹出对话框中,选择自定义部署,然后单击确定

  3. 部署服务页面,配置以下关键参数。

    参数

    描述

    服务名称

    自定义服务名称。

    部署方式

    选择镜像部署AI-Web应用

    镜像选择

    PAI平台镜像列表中选择chat-llm-webui;镜像版本选择2.0

    说明

    由于版本迭代迅速,部署时镜像版本选择最高版本即可。

    运行命令

    不同的模型类型对应的运行命令如下:

    • 使用chatglm2-6b模型进行部署:python webui/webui_server.py --port=8000 --model-path=THUDM/chatglm2-6b

    • 使用通义千问-7b模型进行部署:python webui/webui_server.py --port=8000 --model-path=Qwen/Qwen-7B-Chat

    • 使用llama2-7b模型进行部署:python webui/webui_server.py --port=8000 --model-path=meta-llama/Llama-2-7b-chat-hf

    • 使用Llama2-13b模型进行部署:python webui/webui_server.py --port=8000 --model-path=meta-llama/Llama-2-13b-chat-hf --precision=fp16

    端口号配置为:8000。

    资源组种类

    选择公共资源组

    资源配置方法

    选择常规资源配置

    资源配置选择

    必须选择GPU类型,实例规格推荐使用ml.gu7i.c16m60.1-gu30(性价比最高);

    若您选择使用Llama2-13b模型,实例规格推荐使用ecs.gn6e-c12g1.3xlarge

    专有网络配置

    • 当选择Hologres、AnalyticDB for PostgreSQL或ElasticSearch作为向量检索库时,请确保所配置的专有网络与选定的向量检索库保持一致。

    • 当选择Faiss作为向量检索库时,请随意选择一个专有网络。

  4. 单击部署,等待一段时间即可完成模型部署。

    服务状态运行中时,表明服务部署成功。

  5. 获取VPC地址调用的服务访问地址和Token。

    1. 单击服务名称,进入服务详情页面。

    2. 基本信息区域,单击查看调用信息

    3. 调用信息对话框的VPC地址调用页签,获取服务访问地址和Token,并保存到本地。

部署RAG服务并启动WebUI

PAI提供了最方便快捷的部署方式,您可以直接在EAS中选择指定的镜像即可部署RAG的WebUI服务,具体操作步骤如下。更多关于RAG链路的详细内容,请参见GitHub开源代码

  1. PAI-EAS 模型在线服务页面,单击部署服务,在弹出对话框中,选择自定义部署,然后单击确定

  2. 部署服务页面,配置以下关键参数。

    参数

    描述

    服务名称

    自定义服务名称。本案例使用的示例值为:chatbot_langchain_vpc

    部署方式

    选择镜像部署AI-Web应用

    镜像选择

    PAI平台镜像列表中选择chatbot-langchain,镜像版本选择1.0

    由于版本迭代迅速,部署时镜像版本选择最高版本即可。

    运行命令

    • 服务运行命令:uvicorn webui:app --host 0.0.0.0 --port 8000

    • 端口号输入:8000

    资源组种类

    选择公共资源组

    资源配置方法

    • 必须选择GPU类型,实例规格推荐使用ml.gu7i.c16m60.1-gu30(性价比最高)。

    • 额外系统盘:70G

    专有网络配置

    • 当选择Hologres、AnalyticDB for PostgreSQL或ElasticSearch作为向量检索库时,请确保所配置的专有网络与选定的向量检索库保持一致。

    • 当选择Faiss作为向量检索库时,与对话模型推理服务配置的专有网络保持一致。

  3. 单击部署,等待一段时间即可完成模型部署。

    服务状态运行中时,表明服务部署成功。

  4. 服务部署成功后,单击服务方式列下的查看Web应用,进入WebUI页面。

步骤三:在WebUI页面进行知识问答

目前RAG对话系统支持集成两类知识库文档类型:HTML和TEXT。以下内容为您介绍两种文档类型支持的产品能力。

场景一:面向HTML文档的检索增强大模型对话系统

1、自定义配置参数

如下图所示,您可以在RAG服务WebUI界面的Settings选项卡中,配置本系统的参数,并测试连接是否正常。image

具体参数配置详情如下:

  • Emebdding Model:支持选择5种embedding model和对应的维度(Emebdding Dimension)。推荐使用SGPT-125M-weightedmean-nli-bitfit。

  • Emebdding Dimension:选择Emebdding Model后,系统会自动进行配置,无需手动操作。

  • EAS Url:配置为步骤二中获取的服务访问地址。

  • EAS Token:配置为步骤二中获取的服务Token。

  • 配置Vector Store。不同的向量检索库对应的参数配置详情如下:

    Hologres

    • Host:配置为步骤一中查询到的Hologres调用信息。

    • Database:配置为步骤一中创建的数据库名称。

    • User:配置为步骤一中创建的自定义用户的账号。

    • Password:配置为步骤一中创建的自定义用户的密码。

    • Table:配置数据库表名称,例如test_table。

    以上参数配置完成后,单击Connect Hologres,验证Hologres实例是否连接正常。

    AnalyticDB

    • Host:配置为步骤一中获取的数据库连接外网地址。

      说明

      如果在同一个VPC内连接实例,只需使用内网地址。

    • User:配置为步骤一中创建的数据库账号。

    • Database:配置为数据库名称。您可以登录数据库后进行查看,如何登录数据库,请参见登录数据库image.png

    • Password:配置为步骤一中创建的数据库密码。

    • CollectionName:用户自定义的数据库表名称。例如langchain_document

    • Pre_delete:是否删除已存在的Database。取值为:True(删除)、False(不删除)。

    ElasticSearch

    • URL:配置为步骤一中获取的私网地址和端口,格式为:http://私网地址:端口

    • Index:用户自定义的索引名称。

    • User:配置为步骤一中创建ElasticSearch实例时配置的登录名。

    • Password:配置为步骤一中创建ElasticSearch实例时配置的登录密码。

    以上参数配置完成后,单击Connect ElasticSearch,验证ElasticSearch实例是否连接正常。

    Faiss

    • Path:用户自定义的数据库文件夹名称。例如faiss_path

    • Index:用户自定义的索引文件夹名称。例如faiss_index

此外,您还可以在Settings选项卡中上传JSON配置文件,并单击Parse config来解析配置文件。解析成功后,WebUI页面将自动根据配置文件内容填写相应配置。不同的向量检索库对应的配置文件内容如下:

Hologres

{
  "embedding": {
    "model_dir": "embedding_model/",
    "embedding_model": "SGPT-125M-weightedmean-nli-bitfit",
    "embedding_dimension": 768
  },

  "EASCfg": {
    "url": "http://xx.vpc.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2",
    "token": "xxxxxxx=="
  },

  "vector_store": "Hologres",

  "HOLOCfg": {
    "PG_HOST": "hgpostcn-cn.xxxxxx.vpc.hologres.aliyuncs.com",
    "PG_PORT": "80",
    "PG_DATABASE": "langchain",
    "PG_USER": "user",
    "PG_PASSWORD": "password"
  }
}

其中:EASCfg即为在步骤二中获取的对话模型推理服务的访问地址和Token。HOLOCfg即为Hologres的相关配置。您可以参考WebUI界面参数说明进行配置。

AnalyticDB

{
  "embedding": {
    "model_dir": "embedding_model/",
    "embedding_model": "SGPT-125M-weightedmean-nli-bitfit",
    "embedding_dimension": 768
  },

  "EASCfg": {
    "url": "http://xx.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2",
    "token": "xxxxxxx=="
  },

  "vector_store": "AnalyticDB",

  "ADBCfg": {
    "PG_HOST": "gp.xxxxx.rds.aliyuncs.com",
    "PG_USER": "xxxxxxx", 
    "PG_DATABASE": "xxxxxxx", 
    "PG_PASSWORD": "passwordxxxx",
    "PG_COLLECTION_NAME": "xxxxxxx"
  }
}

其中:EASCfg即为在步骤二中获取的对话模型推理服务的访问地址和Token。ADBCfg即为AnalyticDB PostgreSQL的相关配置。您可以参考WebUI界面参数说明进行配置。

ElasticSearch

{
  "embedding": {
    "model_dir": "embedding_model/",
    "embedding_model": "SGPT-125M-weightedmean-nli-bitfit",
    "embedding_dimension": 768
  },

  "EASCfg": {
    "url": "http://xx.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2",
    "token": "xxxxxxx=="
  },

  "vector_store": "ElasticSearch",

  "ElasticSearchCfg": {
    "ES_URL": "http://es-cn-xxx.elasticsearch.aliyuncs.com:9200",
    "ES_USER": "elastic",
    "ES_PASSWORD": "password",
    "ES_INDEX": "test_index"
  }
}

其中:EASCfg即为在步骤二中获取的对话模型推理服务的访问地址和Token。ElasticSearchCfg即为ElasticSearch的相关配置。您可以参考WebUI界面参数说明进行配置。

Faiss

{
  "embedding": {
    "model_dir": "embedding_model/",
    "embedding_model": "SGPT-125M-weightedmean-nli-bitfit",
    "embedding_dimension": 768
  },

  "EASCfg": {
    "url": "http://xx.vpc.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2",
    "token": "xxxxxxx=="
  },

  "vector_store": "FAISS",

  "FAISS": {
    "index_path": "faiss_index",
    "index_name": "faiss_file"
  }
}

其中:EASCfg即为在步骤二中获取的对话模型推理服务的访问地址和Token。index_path为用户自定义的索引文件夹名称。index_name为用户自定义的数据库文件夹名称。

2、上传HTML文件

在RAG服务的WebUI页面中,切换到Upload选项卡中,在该页面配置以下参数,并上传HTML类型的用户知识库文档。image

其中:

  • Which type of files do you want to upload?:选择html

  • Files:参考界面操作指引上传知识库文档,然后单击Upload。支持多文件上传,文件格式为:HTML。

  • Directory:参考界面操作指引上传包含知识库文档的目录,然后单击Upload

您可以使用PAI提供的rag_chatbot_test_doc.html知识库文档进行Mock测试。

3、文档清洗与切分

在构建向量检索库前,系统会对您所上传的HTML源码文件进行文本处理。包括数据清洗(文本提取、超链替换等)和语义切块(chunk)。image

您可以通过设置rank label参数,来控制语义切块的粒度大小,默认为h2。

4、QA提取

本方案还支持针对用户提交的知识库文档自动提取QA对,以获得更好的检索和回答效果。image以阿里云官方技术文档为例,为您展示提取得到的QA数据。系统会根据您上传的知识库文档自动提取QA对,示例如下:

Q1:
授予OSS和DLF权限 前提条件 如何添加AliyunOSSFullAccess和AliyunDLFFullAccess权限以使用DLF服务?
A1:
要添加AliyunOSSFullAccess和AliyunDLFFullAccess权限,请按照以下步骤操作: 1. 访问阿里云控制台,登录您的账号。 2. 进入“安全管理”模块,点击“权限管理”。 3. 选择“用户”,点击“添加权限”。 4. 选择“阿里云OSS”,选择“OSS访问控制”,然后点击“添加权限”。 5. 在“授权策略”中,添加“阿里云DLF服务”的授权策略,并设置为“FullAccess”。 6. 完成上述步骤后,您的阿里云OSS和DLF服务将获得AliyunOSSFullAccess和AliyunDLFFullAccess权限。

Q2:
授予OSS和DLF权限 操作步骤 在集群信息页面,如何找到Worker RAM角色?
A2:
在集群信息页面,您需要单击集群资源页签,然后找到Worker RAM角色所在行的链接。

系统提取的QA对会自动写入向量检索库中。以Hologres为例,您可以在Hologres中查看写入的数据和向量等信息。具体操作,请参见image

5、向量数据库召回

在RAG服务的WebUI页面的Chat选项卡中,选择Vector Store问答策略,即为直接从向量数据库中召回Top K条相似结果。image.png

支持在界面Parameters of Vector Retrieval中设置向量检索库返回的相似结果条数,默认为3。

6、关键词检索召回

尽管在大多数复杂场景下,向量数据库召回都能有较好的表现。但在某些语料稀缺的垂直领域,或要求准确匹配的场景,向量数据库召回方法可能不如传统的稀疏检索召回方法。稀疏检索召回方法通过计算用户查询与知识文档的关键词重叠度来进行检索,因此更为简单和高效。

在本步骤,PAI提供了BM25等关键词检索召回算法来完成稀疏检索召回操作。您可以在页面中选择是否使用关键词检索召回。image

7、多路召回融合

向量数据库召回和关键词检索召回具有各自的优势和不足,因此综合二者的召回结果能够提高整体的检索准确性和效率。倒数排序融合(Reciprocal Rank Fusion, RRF)算法通过对每个文档在不同召回方法中的排名进行加权求和,以此计算融合后的总分数。

当您选择使用关键词检索召回,即Keyword Retrieval选择Keyword Ensembled时,PAI将默认使用RRF算法对向量数据库召回结果和关键词检索召回结果进行多路召回融合。image

8、检索结果Re-Rank

大多数向量数据库为了计算效率会牺牲一定程度的准确性。这使其检索结果存在一定随机性,原始返回的Top K不一定最相关。本方案支持对向量数据库第一次召回的Top K结果进行精度更高的Re-Rank操作,以得到相关度更高、更准确的知识文档。

在本步骤中,PAI提供了BAAI/bge-reranker-baseBAAI/bge-reranker-large等开源模型来完成Re-Rank操作。您可以在页面中选择是否对检索结果进行Re-Rank,以及具体使用的Re-Rank模型。

image

9、问答Prompt构建

在RAG服务的WebUI页面的Chat选项卡中,进行知识问答。PAI提供多种不同的Prompt策略,您可以选择合适的预定义Prompt模板或输入自定义的Prompt模板以获得更好的推理效果。image

10、LLM知识问答

本方案支持以下三种不同的问答方式,输入您的问题后,具体推理效果如下:

VectorStore

直接从向量数据库中检索并返回Top K条相似结果。

0437412593615060c3750d76f80e8f6a

LLM

直接与EAS-LLM对话,返回大模型的回答。

image

Vector Store + LLM

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

image

场景二:面向TEXT文档的检索增强大模型对话系统

1、参数自定义配置

如下图所示,您可以在RAG服务WebUI界面的Settings选项卡中,配置本系统的参数,并测试连接是否正常。image

具体参数配置详情,请参见1、自定义配置参数

2、上传TEXT文件

在RAG服务的WebUI页面中,切换到Upload选项卡中,在该页面配置以下参数,并上传TXT类型的用户知识库文档。image

其中:

  • Which type of files do you want to upload?:选择text

  • Files:参考界面操作指引上传知识库文档,然后单击Upload。支持多文件上传,文件格式为:txt、doc、docx、pdf和md等。

  • Directory:参考界面操作指引上传包含知识库文档的目录,然后单击Upload

您可以使用PAI提供的rag_chatbot_test_doc.txt知识库文档进行Mock测试。

3、文档清洗与切分

在构建向量检索库前,系统会对您所上传的知识文档进行预处理。包括数据清洗(文本提取、超链替换等)和切块(chunk)。image

您可以通过设置以下两个参数来控制文档切块粒度的大小:

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

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

4、向量数据库召回

在RAG服务的WebUI页面的Chat选项卡中,选择Vector Store问答策略,即为直接从向量数据库中召回Top K条相似结果。image.png

支持在界面Parameters of Vector Retrieval中设置向量检索库返回的相似结果条数,默认为3。

5、关键词检索召回

尽管在大多数复杂场景下,向量数据库召回都能有较好的表现。但在某些语料稀缺的垂直领域,或要求准确匹配的场景,向量数据库召回方法可能不如传统的稀疏检索召回方法。稀疏检索召回方法通过计算用户查询与知识文档的关键词重叠度来进行检索,因此更为简单和高效。

在本步骤,PAI提供了BM25等关键词检索召回算法来完成稀疏检索召回操作。您可以在页面中选择是否使用关键词检索召回。image

6、多路召回融合

向量数据库召回和关键词检索召回具有各自的优势和不足,因此综合二者的召回结果能够提高整体的检索准确性和效率。倒数排序融合(Reciprocal Rank Fusion, RRF)算法通过对每个文档在不同召回方法中的排名进行加权求和,以此计算融合后的总分数。

当您选择使用关键词检索召回,即Keyword Retrieval选择Keyword Ensembled时,PAI将默认使用RRF算法对向量数据库召回结果和关键词检索召回结果进行多路召回融合。image

7、检索结果Re-Rank

大多数向量数据库为了计算效率会牺牲一定程度的准确性。这使其检索结果存在一定随机性,原始返回的Top K不一定最相关。本方案支持对向量数据库第一次召回的Top K结果进行精度更高的Re-Rank操作,以得到相关度更高、更准确的知识文档。

在本步骤中,PAI提供了BAAI/bge-reranker-baseBAAI/bge-reranker-large等开源模型来完成Re-Rank操作。您可以在页面中选择是否对检索结果进行Re-Rank,以及具体使用的Re-Rank模型。

image

8、问答Prompt构建

在RAG服务的WebUI页面的Chat选项卡中,进行知识问答。PAI提供多种不同的Prompt策略,您可以选择合适的预定义Prompt模板或输入自定义的Prompt模板以获得更好的推理效果。image

9、LLM知识问答

本方案支持以下三种不同的问答方式,输入您的问题后,具体推理效果如下:

VectorStore

直接从向量数据库中检索并返回Top K条相似结果。

image

LLM

直接与EAS-LLM对话,返回大模型的回答。

image

Vector Store + LLM

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

image

相关文档

  • 本页导读 (1)
文档反馈