大模型RAG对话系统

RAG(Retrieval-Augmented Generation,检索增强生成)技术通过从外部知识库检索相关信息,并将其与用户输入合并后传入大语言模型(LLM),从而增强模型在私有领域知识问答方面的能力。EAS提供场景化部署方式,支持灵活选择大语言模型和向量检索库,实现RAG对话系统的快速构建与部署。本文为您介绍如何部署RAG对话系统服务以及如何进行模型推理验证。

步骤一:部署RAG服务

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

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

    6eea7736f88e6ec8b3b900e4d028bb48

  3. 部署大模型RAG对话系统页面,配置参数后单击部署。当服务状态变为运行中时,表示服务部署成功(服务部署时长通常约为5分钟,具体时长可能因模型参数量或其他因素略有差异,请耐心等待)。关键参数说明如下。

    • 基本信息

      参数

      描述

      版本选择

      支持部署以下两种版本:

      • LLM一体化部署:将大语言模型(LLM)服务和RAG服务部署在同一服务内。

      • LLM分离式部署:仅部署RAG服务。但在RAG服务内,您可以自由更换和连接LLM服务,灵活性更高。

      模型类别

      当版本选择LLM一体化部署时,您需要选择要部署的大语言模型(LLM)。您可以根据具体使用场景选择相应的开源模型。

    • 资源信息

      参数

      描述

      部署资源

      • 在选择LLM一体化部署版本时,系统会根据所选模型类别,自动匹配适合的资源规格。更换为其他资源规格,可能会导致模型服务无法正常启动。

      • 在选择LLM分离式部署版本时,建议选择8核以上的CPU资源和16 GB以上的内存,推荐使用ecs.g6.2xlarge、ecs.g6.4xlarge等机型。

    • 向量检索库设置

      RAG支持通过Faiss(Facebook AI Similarity Search)ElasticsearchMilvusHologresOpenSearchRDS PostgreSQL构建向量检索库。根据您的场景需要,任意选择一种版本类型,作为向量检索库。

      FAISS

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

      参数

      描述

      版本类型

      选择FAISS

      OSS地址

      选择当前地域下已创建的OSS存储目录,用来存储上传的知识库文件。如果没有可选的存储路径,您可以参考控制台快速入门进行创建。

      说明

      如果您选择使用自持微调模型部署服务,请确保所选的OSS存储路径不与自持微调模型所在的路径重复,以避免造成冲突。

      ElasticSearch

      配置阿里云ElasticSearch实例的连接信息。关于如何创建ElasticSearch实例及准备配置项,请参见准备向量检索库Elasticsearch

      参数

      描述

      版本类型

      选择Elasticsearch

      私网地址/端口

      配置Elasticsearch实例的私网地址和端口,格式为http://<私网地址>:<私网端口>。如何获取Elasticsearch实例的私网地址和端口号,请参见查看实例的基本信息

      索引名称

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

      账号

      配置创建Elasticsearch实例时配置的登录名,默认为elastic。

      密码

      配置创建Elasticsearch实例时配置的登录密码。如果您忘记了登录密码,可重置实例访问密码

      OSS地址

      请选择当前地域下已创建的OSS存储目录。通过挂载OSS路径实现知识库管理。

      Milvus

      配置Milvus实例的连接信息。关于如何创建Milvus实例及准备配置项,请参见准备向量检索库Milvus

      参数

      描述

      版本类型

      选择Milvus

      访问地址

      配置为Milvus实例内网地址。您可以前往阿里云Milvus控制台实例详情页面的访问地址区域进行查看。

      代理端口

      配置为Milvus实例的Proxy Port,默认为19530。您可以前往阿里云Milvus控制台实例详情页面的访问地址区域进行查看。

      账号

      配置为root。

      密码

      配置为创建Milvus实例时,您自定义的root用户的密码。

      数据库名称

      配置为数据库名称,例如default。创建Milvus实例时,系统会默认创建数据库default,您也可以手动创建新的数据库,具体操作,请参见管理Databases

      Collection名称

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

      OSS地址

      请选择当前地域下已创建的OSS存储目录。通过挂载OSS路径实现知识库管理。

      Hologres

      配置为Hologres实例的连接信息。如果未开通Hologres实例,可参考购买Hologres进行操作。

      参数

      描述

      版本类型

      选择Hologres

      调用信息

      配置为指定VPChost信息。进入Hologres管理控制台的实例详情页,在网络信息区域单击指定VPC后的复制,获取域名:80前的host信息。

      数据库名称

      配置为Hologres实例的数据库名称。如何创建数据库,详情请参见创建数据库

      账号

      配置为已创建的自定义用户账号。具体操作,请参见创建自定义用户,其中选择成员角色选择实例超级管理员(SuperUser)

      密码

      配置为已创建的自定义用户的密码。

      表名称

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

      OSS地址

      请选择当前地域下已创建的OSS存储目录。通过挂载OSS路径实现知识库管理。

      OpenSearch

      配置为OpenSearch向量检索版实例的连接信息。关于如何创建OpenSearch实例及准备配置项,请参见准备向量检索库OpenSearch

      参数

      描述

      版本类型

      选择OpenSearch

      访问地址

      配置为OpenSearch向量检索版实例的公网访问地址。您需要为OpenSearch向量检索版实例开通公网访问功能,具体操作,请参见准备向量检索库OpenSearch

      实例id

      OpenSearch向量检索版实例列表中获取实例ID。

      用户名

      配置为创建OpenSearch向量检索版实例时,输入的用户名和密码。

      密码

      表名称

      配置为准备OpenSearch向量检索版实例时创建的索引表名称。如何准备索引表,请参见准备向量检索库OpenSearch

      OSS地址

      请选择当前地域下已创建的OSS存储目录。通过挂载OSS路径实现知识库管理。

      RDS PostgreSQL

      配置为RDS PostgreSQL实例数据库的连接信息。关于如何创建RDS PostgreSQL实例及准备配置项,请参见准备向量检索库RDS PostgreSQL

      参数

      描述

      版本类型

      选择RDS PostgreSQL

      主机地址

      配置为RDS PostgreSQL实例的内网地址,您可以前往云数据库RDS PostgreSQL控制台页面,在RDS PostgreSQL实例的数据库连接页面进行查看。

      端口

      默认为5432,请根据实际情况填写。

      数据库

      配置为已创建的数据库名称。如何创建数据库和账号,请参见创建账号和数据库,其中:

      • 创建账号时,账号类型选择高权限账号

      • 创建数据库时,授权账号选择已创建的高权限账号。

      表名称

      自定义配置数据库表名称。

      账号

      配置为已创建的高权限账号和密码。如何创建高权限账号,请参见创建账号和数据库,其中账号类型选择高权限账号

      密码

      OSS地址

      请选择当前地域下已创建的OSS存储目录。通过挂载OSS路径实现知识库管理。

    • 专有网络

      参数

      描述

      专有网络(VPC)

      • 在部署RAG服务时,如果选择LLM分离式部署,需确保RAG服务能正常访问LLM服务。具体网络要求如下:

        • 通过公网访问LLM服务:需在此处配置具有公网访问能力的专有网络,详情请参见场景一:让EAS服务访问公网

        • 通过内网地址访问LLM服务:RAG服务和LLM服务需使用相同的专有网络。

      • 如果您需要使用阿里云百炼模型或者使用联网搜索进行问答,需配置具有公网访问能力的专有网络,详情请参见场景一:让EAS服务访问公网

      • 向量检索库的网络要求:

        • Faiss向量检索库,无需通过网络访问。

        • Hologres、ElasticSearch、MilvusRDS PostgreSQL,EAS可通过公网或私网访问,推荐使用私网访问。私网访问要求EAS中配置的专有网络与向量检索库的专有网络保持一致。如需创建专有网络(VPC)、交换机和安全组,详情请参见创建和管理专有网络创建安全组

        • EAS只能通过公网访问OpenSearch。配置方式请参见步骤二:准备配置项

      交换机

      安全组名称

步骤二:WebUI页面调试

RAG服务部署成功后,单击调用/日志/监控列下的image按钮,启动WebUI页面。

pai-rag:0.3.4版本为例,介绍如何在WebUI页面上传企业知识库文件并对问答效果进行调试。您可以单击RAG服务名称,在概览页签的环境信息区域,查看RAG服务版本号。image

1、大语言模型设置

当版本选择LLM分离部署时,您需要参照LLM大语言模型部署来部署大语言模型服务,然后单击LLM服务名称,在基本信息区域单击查看调用信息,获取服务访问地址和Token。

说明
  • 使用公网地址连接LLM服务:RAG服务需绑定具有公网访问能力的专有网络。

  • 使用VPC地址连接LLM服务:RAG服务与LLM服务必须在同一个专有网络内。

image然后在系统设置页签的模型及存储配置Tab页,配置以下参数:

参数

描述

模型配置

您可以在下拉列表中选择NEW来新增模型配置。在后续进行模型推理时,可通过选择对话模型ID,灵活切换并使用不同的大语言模型完成推理任务。

URL

  • 当使用LLM分离部署时,配置为已获取的LLM服务的访问地址和Token,或使用dashscope。

    说明

    使用dashscope,您需要给EAS配置公网连接,并配置阿里云百炼的API Key。阿里云百炼模型调用需单独计费,请参见阿里云百炼计费项说明

  • 当使用LLM一体化部署时,系统已默认配置该参数,无需修改。

密钥

模型名称

在部署大语言模型(LLM)时,如果您选择了加速部署-vLLM模式,请务必填写具体的模型名称,例如qwen2-72b-instruct。对于其他部署模式,则只需将模型名称设置为default即可。

2、知识库管理

知识库设置

知识库页签的知识库设置Tab页,配置知识库向量模型、向量数据库等相关参数,建议直接使用默认配置。相关参数说明如下:

参数

描述

知识库名称

系统支持对已有知识库名称进行更新。您可以在下拉列表中选择NEW来新增知识库名称,并通过指定知识库名称实现不同知识库数据的隔离,详情请参见如何使用RAG服务进行知识库数据隔离?

向量模型来源

仅支持huggingface,系统提供内置的向量模型供您选择。

向量维度

输出向量维度。维度的设置对模型的性能有直接影响。在您选择向量模型后,系统将自动配置向量维度,无需手动操作。

向量Batch大小

批处理大小。

向量数据库配置

默认使用部署RAG服务时配置的向量数据库。您也可以切换至其他向量数据库,在配置相关参数后,单击更新知识库即可。

上传知识库文件

知识库设置完成后,您可以在知识库页签的文件管理Tab页上传知识库文件。上传知识库文件的具体操作方法,请参见RAG知识库管理

知识库上传完成后,系统会自动按照PAI-RAG格式将文件存储到向量检索库。对于同名知识库文件,除了FAISS外,其他向量检索库将会覆盖原有文件。支持的文件类型为.html、.htm、.txt、.pdf、.pptx、.md、Excel(.xlsx或.xls)、.jsonl、.jpeg、.jpg、.png、.csvWord(.docx),例如rag_chatbot_test_doc.txt

image

检索参数设置

知识库页签的检索测试Tab页,支持配置以下向量检索参数:

参数

描述

检索模式

支持以下三种检索方式:

  • 向量检索:在大多数复杂场景下,该方式表现较好,尤其适合处理语义相似性和上下文相关的查询。

  • 关键字检索:在某些语料稀缺的垂直领域或需要精确匹配的场景中,该方式更具优势。PAI也提供了BM25等关键词检索召回算法来完成稀疏检索召回操作。通过计算用户查询与知识文档的关键词重叠度进行检索,具有简单高效的特点。

  • 混合检索:为了综合两种召回方式的优势,PAI支持通过倒数排序融合(Reciprocal Rank Fusion, RRF)算法对每个文档在不同召回方法中的排名进行加权求和,以此计算融合后的总分数,从而提升整体检索的准确性和效率。当检索模式选择混合检索时,PAI默认使用RRF算法完成多路召回融合。

返回Top-K条文本结果

召回Top-K条最相关的文本片段。取值为0~100。

相似度分数阈值

相似度分数阈值。分数越大,表示返回的内容越相似。

重排序类型

取值如下:

  • 无重排序

  • 基于模型的重排序:选择重排序模型,对第一次召回的Top K条结果进行精度更高的重排序操作,以获得相关度更高、更准确的检索结果。

    说明

    首次使用时,加载模型可能需要较长时间,请根据需要进行选择。

3、联网搜索配置

如果使用联网搜索进行问答测试,需在应用页签的联网搜索Tab页进行联网搜索配置。image

推荐使用aliyun搜索引擎,开通使用请参见联网搜索开通说明。参数配置说明如下:

  • 搜索数量:QPS限制为1时,搜索数量的最大值不能超过10。

  • Endpoint:参见服务接入点

    • 支持通过公网发起调用:iqs.cn-zhangjiakou.aliyuncs.com。需为RAG服务配置有公网访问能力的专有网络,详情请参见EAS服务访问公网

    • 以下地域也支持通过阿里云VPC发起调用:

      • 北京Region:iqs-vpc.cn-beijing.aliyuncs.com

      • 上海Region:iqs-vpc.cn-shanghai.aliyuncs.com

      • 张家口Region:iqs-vpc.cn-zhangjiakou.aliyuncs.com

  • AccessKey ID、AccessKey Secret:建议使用RAM用户的AccessKey IDAccessKey Secret。

4、模型推理验证

对话页签,选择使用的对话模型ID知识库名称问答策略进行问答测试。image

支持配置以下参数:

  • 问答策略

    • 查询知识库:将向量数据库检索返回的结果与用户问题合并填充至已选择的Prompt模板中,一并输入大语言模型服务进行处理,从中获取问答结果。

    • 大模型:直接使用LLM回答。

    • 联网搜索:根据用户提问自动判断是否需要联网搜索,如果联网搜索,将搜索结果和用户问题一并输入大语言模型服务。使用联网搜索需要给EAS配置公网连接

    • 查询数据库:直接从NL2SQL查询数据库中检索并返回Top K条相似结果。

  • 通用参数

    参数

    说明

    开启流式输出

    选中流式输出后,系统将以流式方式输出结果。

    展示RAG和网页搜索的参考资料

    选中展示参考资料,回答结果中将给出引用。

  • LLM相关

    温度(01) :控制生成内容的随机性。温度值越低,输出结果也相对固定;而温度越高,输出结果则更具多样性和创造性。

步骤:API调用

以下内容介绍了RAG常用功能的API调用方法。如需了解更多功能的API调用方法(如管理知识库、更新RAG服务配置等),请参见RAG API接口说明

重要

查询和上传API均可以指定知识库名称来切换知识库,当知识库名称参数省略时,默认为default。详情请参见如何使用RAG服务进行知识库数据隔离?

获取调用信息

  1. 在模型在线服务(EAS)页面,单击RAG服务名称,然后在基本信息区域,单击查看调用信息

  2. 调用信息对话框,获取服务访问地址和Token。

    说明

    您可以选择使用公网调用地址或VPC调用地址:

    • 使用公网调用地址,调用客户端需支持访问公网。

    • 使用VPC调用地址:调用客户端必须与RAG服务位于同一个专有网络内。

上传知识库文件

支持通过API上传本地的知识库文件。根据上传接口返回的task_id可以查询文件上传任务的状态。

以下示例中,<EAS_SERVICE_URL>替换为RAG服务的访问地址;<EAS_TOKEN>替换为RAG服务的Token。获取方式详情请参见获取调用信息

  • 上传单个文件(使用-F 'files=@path上传)

    # <EAS_TOKEN>和<EAS_SERVICE_URL>需分别替换为服务Token和访问地址。
    # <name>需替换为您的知识库名称。 
    # “-F 'files=@”后的路径需替换为您的知识库文件路径。 
    curl -X 'POST' <EAS_SERVICE_URL>/api/v1/knowledgebases/<name>/files \
    -H 'Authorization: <EAS_TOKEN>' \
    -H 'Content-Type: multipart/form-data' \
    -F 'files=@example_data/paul_graham/paul_graham_essay.txt'
  • 上传多份文件

    使用多个-F 'files=@path'参数,每个参数对应一个要上传的文件,示例如下:

    # <EAS_TOKEN>和<EAS_SERVICE_URL>需分别替换为服务Token和访问地址。
    # <name>需替换为您的知识库名称。 
    # # “-F 'files=@”后的路径需替换为您的知识库文件路径。
    curl -X 'POST' <EAS_SERVICE_URL>/api/v1/knowledgebases/<name>/files \
    -H 'Authorization: <EAS_TOKEN>' \
    -H 'Content-Type: multipart/form-data' \
    -F 'files=@example_data/paul_graham/paul_graham_essay.txt' \
    -F 'files=@example_data/another_file1.md' \
    -F 'files=@example_data/another_file2.pdf' \
  • 查询上传状态

    # <EAS_TOKEN>和<EAS_SERVICE_URL>需分别替换为服务Token和访问地址。
    # <name>需替换为您的知识库名称;<file_name>替换为您的文件名称。 
    curl -X 'GET' <EAS_SERVICE_URL>/api/v1/knowledgebases/<name>/files/<file_name> -H 'Authorization: <EAS_TOKEN>'

发送对话请求

通过OpenAI-Compatiable API调用服务。调用服务前,您需根据使用的功能,提前在RAG服务的WebUI页面完成相应配置。

支持功能

  • web search:联网搜索。需提前在RAG服务的WebUI页面配置网络搜索参数。

  • chat knowledgebase:知识库查询。需提前上传知识库文件。

  • chat llm:使用LLM回答。需提前配置LLM服务

  • chat agent:智能体工具调用。需提前在RAG服务的WebUI页面完成智能体相关代码配置。

  • chat db:数据库/表格查询。需提前在RAG服务的WebUI页面完成数据分析相关配置。

请求示例

联网搜索

from openai import OpenAI

##### API 配置 #####

# <EAS_TOKEN>和<EAS_SERVICE_URL>需分别替换为服务Token和访问地址。
openai_api_key = "<EAS_TOKEN>"
openai_api_base = "<EAS_SERVICE_URL>/v1"
client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)


#### Chat ######
def chat():
    stream = True
    chat_completion = client.chat.completions.create(
        model="default",
        stream=stream,
        messages=[
            {"role": "user", "content": "您好"},
            {"role": "assistant", "content": "您好,有什么能帮到您?"},
            {"role": "user", "content": "浙江省会是哪里"},
            {"role": "assistant", "content": "杭州是浙江的省会。"},
            {"role": "user", "content": "有哪些好玩的"},
        ],
        extra_body={
            "search_web": True,
        },
    )

    if stream:
        for chunk in chat_completion:
            print(chunk.choices[0].delta.content, end="")
    else:
        result = chat_completion.choices[0].message.content
        print(result)


chat()

查询数据库

from openai import OpenAI

##### API 配置 #####
# <EAS_TOKEN>和<EAS_SERVICE_URL>需分别替换为服务Token和访问地址。

openai_api_key = "<EAS_TOKEN>"
openai_api_base = "<EAS_SERVICE_URL>/v1"
client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)


#### Chat ####
def chat():
    stream = True
    chat_completion = client.chat.completions.create(
        model="default",
        stream=stream,
        messages=[
            {"role": "user", "content": "有多少只猫"},
            {"role": "assistant", "content": "有2只猫"},
            {"role": "user", "content": "狗呢"},
        ],
        extra_body={
            "chat_db": True,
        },
    )

    if stream:
        for chunk in chat_completion:
            print(chunk.choices[0].delta.content, end="")
    else:
        result = chat_completion.choices[0].message.content
        print(result)


chat()

注意事项

本实践受制于LLM服务的服务器资源大小以及默认Token数量限制,能支持的对话长度有限,旨在帮助您体验RAG对话系统的基本检索功能。

常见问题

如何使用RAG服务进行知识库数据隔离?

以部署pai-rag:0.3.4版本的RAG服务为例,当不同部门或个人使用各自独立的知识库时,可以通过以下方法实现数据的有效隔离:

  1. WebUI页面的知识库页签的知识库设置Tab页,配置以下参数,然后单击添加知识库

    • 知识库名称:选择NEW

    • 新知识库名称:自定义新的知识库名称。例如INDEX_1。

    image

  2. 知识库页签的文件管理Tab页上传知识库文件时,将文件上传到对应的知识库目录中即可。具体操作,请参见上传知识库文件image

  3. 对话页签进行对话时,请选择相应的知识库名称。系统将使用目标知识库文件进行知识问答,从而实现不同知识库数据的隔离。image

如何收费?

计费说明

在部署大模型RAG对话系统时,仅收取EAS资源的费用。如果在使用过程中,使用了阿里云百炼、向量数据库(如ElasticsearchMilvusHologresOpenSearchRDS PostgreSQL)、对象存储OSS公网NAT网关或网络搜索服务(如Bing阿里云通用搜索服务)等其他产品,将依据各产品的计费规则在相应产品中单独计费。

停止收费

停止EAS服务后,仅能停止EAS资源的收费。若需停止其他产品的收费,请参考对应产品的文档指引,按照说明停止或删除相关实例。

通过API上传的知识库文档可永久使用吗?

RAG服务通过API上传的知识库文件并非永久存储,其存储期限取决于所选向量检索库(如对象存储OSS、Elasticsearch、Hologres等)的配置。建议查阅相关文档,了解存储策略以确保数据长期保存。

通过API设置的参数为什么没有生效?

目前,PAI-RAG服务仅支持通过API设置接口说明文档中列出的参数,其余参数需通过WebUI界面进行配置,详情请参见步骤二:WebUI页面调试

相关文档