RAG(Retrieval-Augmented Generation,检索增强生成)技术通过从外部知识库检索相关信息,并将其与用户输入合并后传入大语言模型(LLM),从而增强模型在私有领域知识问答方面的能力。EAS提供场景化部署方式,支持灵活选择大语言模型和向量检索库,实现RAG对话系统的快速构建与部署。本文为您介绍如何部署RAG对话系统服务以及如何进行模型推理验证。
步骤一:部署RAG服务
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。
在模型在线服务(EAS)页面,单击部署服务,然后在场景化模型部署区域,单击大模型RAG对话系统部署。
在部署大模型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)、Elasticsearch、Milvus、Hologres、OpenSearch或RDS 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。
调用信息
配置为指定VPC的host信息。进入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服务访问公网。
向量检索库的网络要求:
交换机
安全组名称
步骤二:WebUI页面调试
RAG服务部署成功后,单击调用/日志/监控列下的按钮,启动WebUI页面。
以pai-rag:0.3.4
版本为例,介绍如何在WebUI页面上传企业知识库文件并对问答效果进行调试。您可以单击RAG服务名称,在概览页签的环境信息区域,查看RAG服务版本号。
1、大语言模型设置
当版本选择LLM分离部署时,您需要参照LLM大语言模型部署来部署大语言模型服务,然后单击LLM服务名称,在基本信息区域单击查看调用信息,获取服务访问地址和Token。
使用公网地址连接LLM服务:RAG服务需绑定具有公网访问能力的专有网络。
使用VPC地址连接LLM服务:RAG服务与LLM服务必须在同一个专有网络内。
然后在系统设置页签的模型及存储配置Tab页,配置以下参数:
参数 | 描述 |
模型配置 | 您可以在下拉列表中选择NEW来新增模型配置。在后续进行模型推理时,可通过选择对话模型ID,灵活切换并使用不同的大语言模型完成推理任务。 |
URL |
|
密钥 | |
模型名称 | 在部署大语言模型(LLM)时,如果您选择了加速部署-vLLM模式,请务必填写具体的模型名称,例如qwen2-72b-instruct。对于其他部署模式,则只需将模型名称设置为 |
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、.csv或Word(.docx),例如rag_chatbot_test_doc.txt。
检索参数设置
在知识库页签的检索测试Tab页,支持配置以下向量检索参数:
参数 | 描述 |
检索模式 | 支持以下三种检索方式:
|
返回Top-K条文本结果 | 召回Top-K条最相关的文本片段。取值为0~100。 |
相似度分数阈值 | 相似度分数阈值。分数越大,表示返回的内容越相似。 |
重排序类型 | 取值如下:
|
3、联网搜索配置
如果使用联网搜索进行问答测试,需在应用页签的联网搜索Tab页进行联网搜索配置。
推荐使用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 ID和AccessKey Secret。
4、模型推理验证
在对话页签,选择使用的对话模型ID、知识库名称和问答策略进行问答测试。
支持配置以下参数:
问答策略:
查询知识库:将向量数据库检索返回的结果与用户问题合并填充至已选择的Prompt模板中,一并输入大语言模型服务进行处理,从中获取问答结果。
大模型:直接使用LLM回答。
联网搜索:根据用户提问自动判断是否需要联网搜索,如果联网搜索,将搜索结果和用户问题一并输入大语言模型服务。使用联网搜索需要给EAS配置公网连接。
查询数据库:直接从NL2SQL查询数据库中检索并返回Top K条相似结果。
通用参数
参数
说明
开启流式输出
选中流式输出后,系统将以流式方式输出结果。
展示RAG和网页搜索的参考资料
选中展示参考资料,回答结果中将给出引用。
LLM相关
温度(0到1) :控制生成内容的随机性。温度值越低,输出结果也相对固定;而温度越高,输出结果则更具多样性和创造性。
步骤三:API调用
以下内容介绍了RAG常用功能的API调用方法。如需了解更多功能的API调用方法(如管理知识库、更新RAG服务配置等),请参见RAG API接口说明。
查询和上传API均可以指定知识库名称来切换知识库,当知识库名称参数省略时,默认为default。详情请参见如何使用RAG服务进行知识库数据隔离?。
获取调用信息
在模型在线服务(EAS)页面,单击RAG服务名称,然后在基本信息区域,单击查看调用信息。
在调用信息对话框,获取服务访问地址和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服务为例,当不同部门或个人使用各自独立的知识库时,可以通过以下方法实现数据的有效隔离:
在WebUI页面的知识库页签的知识库设置Tab页,配置以下参数,然后单击添加知识库。
知识库名称:选择NEW。
新知识库名称:自定义新的知识库名称。例如INDEX_1。
在知识库页签的文件管理Tab页上传知识库文件时,将文件上传到对应的知识库目录中即可。具体操作,请参见上传知识库文件。
在对话页签进行对话时,请选择相应的知识库名称。系统将使用目标知识库文件进行知识问答,从而实现不同知识库数据的隔离。
如何收费?
计费说明
在部署大模型RAG对话系统时,仅收取EAS资源的费用。如果在使用过程中,使用了阿里云百炼、向量数据库(如Elasticsearch、Milvus、Hologres、OpenSearch或RDS PostgreSQL)、对象存储OSS、公网NAT网关或网络搜索服务(如Bing、阿里云通用搜索服务)等其他产品,将依据各产品的计费规则在相应产品中单独计费。
停止收费
停止EAS服务后,仅能停止EAS资源的收费。若需停止其他产品的收费,请参考对应产品的文档指引,按照说明停止或删除相关实例。
通过API上传的知识库文档可永久使用吗?
RAG服务通过API上传的知识库文件并非永久存储,其存储期限取决于所选向量检索库(如对象存储OSS、Elasticsearch、Hologres等)的配置。建议查阅相关文档,了解存储策略以确保数据长期保存。
通过API设置的参数为什么没有生效?
目前,PAI-RAG服务仅支持通过API设置接口说明文档中列出的参数,其余参数需通过WebUI界面进行配置,详情请参见步骤二:WebUI页面调试。
相关文档
通过EAS,您还可以完成以下场景化部署:
EAS针对LLM服务和通用服务场景提供了压测方法,帮助您轻松创建压测任务并进行一键压测,全面了解EAS服务的性能表现。详情请参见服务自动压测。