大语言模型的知识缺少企业私有或实时的数据,通过RAG(Retrieval-Augmented Generation)技术可以检索私有知识库,并以上下文的方式提供给大语言模型,从而增强大语言模型回答的准确性和相关性。本文将详细介绍如何在LangStudio中开发和部署一个RAG应用。
前提条件
本文创建的向量数据库连接基于Milvus数据库,因此需要您先完成Milvus数据库的创建,详情请参见创建Milvus实例、实例管理。
已将RAG知识库语料上传至OSS中。示例语料:西红市第十实验小学.docx
1. 部署LLM和Embedding模型
本文以快速开始 > ModelGallery中部署的模型服务为例,后续创建连接时也会基于此处的模型服务进行创建。
前往快速开始 > ModelGallery,分别按场景选择大语言模型及Embedding分类,并部署指定的模型。本文以通义千问1.5-7B-Chat和bge-large-zh-v1.5 通用向量模型为例进行部署。请务必选择使用指令微调的大语言模型(名称中包含“Chat”或是“Instruct”的模型),Base模型无法正确遵循用户指令回答问题。
更多部署详情,请参见模型部署及训练。
前往任务管理,单击已部署的服务名称,在服务详情页签下单击查看调用信息,分别获取前面部署的LLM和Embedding模型服务的VPC访问地址和Token,供后续创建连接时使用。
2. 创建连接
本文创建的LLM和Embedding模型服务连接基于快速开始 > ModelGallery中部署的模型服务。更多其他类型的连接及详细说明,请参见连接管理。
2.1 创建LLM服务连接
进入LangStudio,选择工作空间后,在连接管理页签下单击新建连接,进入应用流创建页面。
创建通用LLM模型服务连接。其中base_url和api_key分别对应1. 部署LLM和Embedding模型中LLM的VPC访问地址和Token。
2.2 创建Embedding模型服务连接
同2.1 创建LLM服务连接,创建通用Embedding模型服务连接。其中base_url和api_key分别对应1. 部署LLM和Embedding模型中Embedding模型的VPC访问地址和Token。
2.3 创建向量数据库连接
同2.1 创建LLM服务连接,创建Milvus数据库连接。
关键参数说明:
uri:Milvus实例的访问地址,即
http://<Milvus内网访问地址>
,Milvus内网访问地址如下:则uri为
http://c-b1c5222fba****-internal.milvus.aliyuncs.com
。token:登录Milvus实例的用户名和密码,即
<yourUsername>:<yourPassword>
。database:数据库名称,本文使用默认数据库
default
。
3. 创建离线知识库
通过PAI-Designer预置的RAG离线知识库构建工作流模板,将语料经过解析、分块、向量化后存储到向量数据库,从而构建知识库。
进入PAI-Designer,选择工作空间后,在预置模板 > LLM 大语言模型页签下创建并进入RAG离线知识库构建工作流。
配置工作流,关键组件说明:
工作流中的其余配置保持默认或根据实际需求进行配置,关键组件配置如下:
读OSS数据
OSS数据路径:配置前提条件中RAG知识库语料的OSS路径。
RAG文本解析分块
块大小:本文部署的Embedding模型bge-large-zh-v1.5最大输入为512,需要将文本分块大小调整为512或者更小。
RAG文本向量生成
Embedding模型连接:配置2.2 创建Embedding模型服务连接中创建的连接。
RAG索引构建
向量数据库连接:配置2.3 创建向量数据库连接 中创建的连接。
集合/表名称:配置前提条件中创建Milvus数据库的Collection。
执行调优 > 专有网络配置:配置Milvus实例所在的专有网络。
运行工作流。
4. 创建并运行RAG应用流
进入LangStudio,选择工作空间后,在应用流页签下单击新建应用流,模板类型选择RAG,创建RAG应用流。
启动运行时:单击右上角启动运行时并进行配置。在进行Python节点解析或查看更多工具时,需要保证运行时已启动。
关键参数说明:
专有网络配置:选择前提条件中创建Milvus实例时的专有网络。
开发应用流。应用流中的其余配置保持默认或根据实际需求进行配置,关键节点配置如下:
rewrite_question:重写用户问题,将用户的问题重写为更具体、准确的表述。
connection:选择2.1 创建LLM服务连接中创建的连接。
model:输入default。如果connection选择的是百炼大模型服务连接,则model需在下拉列表中选择对应的模型名称,百炼模型名称可在百炼-模型广场中查看。
retrieve:在知识库中检索与用户问题相关的文本。
vector_store_conn:选择2.3 创建向量数据库连接中创建的连接。
index_name:输入前提条件中创建Milvus数据库的Collection。
embedding_model_conn:选择2.2 创建Embedding模型服务连接中创建的连接。
embedding_model_name:置空。如果embedding_model_conn选择的是百炼大模型服务连接,则embedding_model_name需在下拉列表中选择对应的模型名称,百炼模型名称可在百炼-模型广场中查看。
threshold_filter:根据向量索引查找组件返回的相似度分数过滤分数低于阈值的文档。
generate_answer:使用过滤后的文档作为上下文,与用户问题一起发送给大语言模型,生成回答。
connection:选择2.1 创建LLM服务连接中创建的连接。为了简化流程,本文在generate_answer阶段采用和rewrite_question阶段相同的连接。在生产阶段,您可以根据实际需求创建并选择不同的连接。
model:输入default。如果connection选择的是百炼大模型服务连接,则model需在下拉列表中选择对应的模型名称,百炼模型名称可在百炼-模型广场中查看。
调试/运行:单击右上角对话, 开始执行应用流。
查看链路:单击生成答案下的查看链路,查看Trace详情或拓扑视图。
5. 部署应用流
在应用流开发页面,单击右上角部署,部署参数其余配置保持默认或根据实际需求进行配置,关键参数配置如下:
资源部署信息 > 实例数:配置服务实例数。本文部署仅供测试使用,因此实例数配置为1。在生产阶段,建议配置多个服务实例,以降低单点故障的风险。
专有网络配置 > VPC:配置Milvus实例所在的专有网络。
更多部署详情,请参见应用流部署。
6. 调用服务
部署成功后,跳转到PAI-EAS,在在线调试页签下配置并发送请求。请求参数中的Key与应用流中输入节点中的"Chat 输入"字段一致,本文使用默认字段question
。
更多调用方式(如API调用)及详细说明,请参见调用服务。