在阿里云上,您可以通过人工智能平台PAI快速部署一个大模型RAG对话系统。通过AppFlow的集成,您可以将该对话系统集成到钉钉群聊或微信等各种场景中,让您随时随地使用您的智能客服。本文将以微信公众号为例,为您介绍PAI RAG+AppFlow的部署方案。
方案概览
将RAG对话系统集成到微信公众号,具体方案只需以下几步:
|
1. 部署PAI RAG应用
首先您需要部署一个大模型RAG对话应用,用于实现AI助手。具体操作步骤如下:
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。
在模型在线服务(EAS)页面,单击部署服务,然后在场景化模型部署区域,单击大模型RAG对话系统部署。
在部署大模型RAG对话系统页面,配置以下关键参数。
基本信息
参数
描述
服务名称
自定义服务名称,例如pai_rag_test1。
模型来源
本方案选择开源公共模型。
您也可以选择自持微调模型,但需提前准备好您的私有模型。通过分布式训练(DLC)完成模型训练后,您可以将模型训练结果导入阿里云对象存储OSS或文件存储NAS中,详情请参见在DLC训练任务中使用云存储。
模型类别
本方案选择Qwen1.5-1.8b。
资源配置
资源配置选择:选择模型类别后,系统会自动推荐适合的资源规格,无需您进行配置。如果更换至其他资源规格,可能会导致模型服务启动失败。
向量检索库设置
RAG支持通过Faiss(Facebook AI Similarity Search)、阿里云Elasticsearch、Milvus、Hologres、OpenSearch-向量检索版或RDS PostgreSQL构建向量检索库。本方案以FAISS为例,参数配置说明如下。您也可以选择使用其他向量检索库,如何准备向量检索库以及相关配置项,请参见向量检索库设置。
参数
描述
版本类型
选择FAISS。
OSS地址
选择当前地域下已创建的OSS存储路径,用来存储上传的知识库文件。如果没有可选的存储路径,您可以参考控制台快速入门进行创建。
说明如果您选择使用自持微调模型部署服务,请确保所选的OSS存储路径不与自持微调模型所在的路径重复,以避免造成冲突。
参数配置完成后,单击部署。
查看PAI RAG应用服务Token。
在模型在线服务(EAS)页面,单击目标服务名称。
在基本信息区域单击查看调用信息,并在调用信息对话框的公网地址调用页签,获取Token。
2. 创建微信公众号连接流
AppFlow可以让您在不写代码的情况下,通过界面配置将PAI RAG应用和微信公众号连接起来。您可以通过预置的AppFlow模板创建一个微信公众号连接流。
如果您的微信公众号已经完成认证,您可以使用微信客户消息回复用户在公众号的咨询,如果您没有完成认证,只能使用被动回复消息功能回复用户,该功能将消息响应时间限制为 5 秒,超时将无法回复。
是否完成认证可以在微信公众号后台,在左侧菜单选择 ,在账号设置页面中查看。您可以根据认证情况选择下面的创建方案。
未认证公众号
使用AppFlow模板创建连接流,单击立即使用进入创建流程。
访问微信公众号后台,在左侧菜单选择 。选择基本配置页签,获取 AppID。
在连接流的账户授权配置向导页,在选择凭证下拉列表中单击添加新凭证,然后在授权页面填入AppID,单击授权并在新的页面使用微信扫描完成授权。授权后,Appflow会自动帮您配置公众号,您无需任何操作。授权完成后,您需要回到连接流的账户授权配置向导页,选择刚刚授权的微信公众号。
在连接流的账户授权配置向导页,在选择凭证下拉列表中单击添加新凭证,在创建凭证对话框中,填入步骤1获取的RAG应用Token,并设置一个自定义凭证名称。
在执行动作配置向导页,填写RAG应用的区域、工作空间ID和服务名称,完成后单击下一步。
在基本信息配置向导页,填写连接流名称和连接流描述(建议保持默认),完成后单击下一步。
界面提示流程配置成功,单击发布。
进入连接流页面查看已发布成功的连接流。
已认证公众号
使用AppFlow模板创建连接流,单击立即使用进入创建流程。
访问微信公众号后台,在左侧菜单选择 。选择基本配置页签,获取 AppID。
在连接流的账户授权配置向导页,在选择凭证下拉列表中单击添加新凭证,然后在授权页面填入AppID,单击授权并在新的页面使用微信扫描完成授权。授权后,Appflow会自动帮您配置公众号,您无需任何操作。授权完成后,您需要回到连接流的账户授权配置向导页,选择刚刚授权的微信公众号。
在连接流的账户授权配置向导页,在选择凭证下拉列表中单击添加新凭证。在创建凭证对话框中,填入步骤1获取的RAG应用Token,并设置一个自定义凭证名称。
在执行动作配置向导页,填写RAG应用的区域、工作空间ID和服务名称,完成后单击下一步。
在基本信息配置向导页,填写连接流名称和连接流描述(建议保持默认),完成后单击下一步。
界面提示流程配置成功,单击发布。
进入连接流页面查看已发布成功的连接流。
3. 为PAI RAG应用增加私有知识
以上传开源项目EasyRec的知识库文档为例,当您提出与EasyRec相关的问题时,能够获得更准确的回答。
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。
在模型在线服务(EAS)页面,单击目标服务的服务方式列下的查看Web应用。
在Upload页签,上传知识库文件。例如source.zip,解压后通过Directory上传。
4. 测试公众号上的智能客服
您可以在微信公众号中发送与EasyRec相关的问题,来检验智能客服回答效果。
常见问题
公众号开启服务器配置后,自定义菜单无法使用怎么办?
当您在公众号后台开启服务器配置后,因为微信公众号的限制,您之前配置的自定义菜单会因为冲突而关闭。如果您未完成微信认证,则无法同时开启服务器配置和自定义菜单。如果您是服务号或订阅号完成了微信认证,这时您可以参考如下步骤通过接口配置自定义菜单:
1. 获取access_token。您可以参考获取 access_token 文档。通过访问下面的微信接口,获取access_token。您可以访问微信公众号后台,在左侧菜单选择 。获取 AppID 和 AppSecret,并替换下面的您的AppID
与您的AppSecret
。
curl "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=您的AppID&secret=您的AppSecret"
2. 调用菜单接口。你可以参考创建菜单文档,通过执行下面的代码,替换代码中ACCESS_TOKEN
,并设定你需要的菜单数据,创建自定义的菜单。
curl "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"button":[
{
"type":"click",
"name":"首页",
"key":"home"
},
{
"name":"菜单",
"sub_button":[
{
"type":"view",
"name":"文档",
"url":"https://help.aliyun.com/zh/model-studio/getting-started/what-is-model-studio"
}]
}]
}'
配置完成后,与公众号对话没有反应,如何排查问题?
如果您是在 AppFlow 控制台点击运行一次进行测试时没有返回内容,是因为运行一次功能未包含内容输入,所以会报错。如果您是在微信与微信公众号对话时,没有返回内容,可以按照以下步骤进行排查:
访问AppFlow控制台,在表格操作列点击运行日志,跳转到执行日志页面查看日志。
在执行日志页面,点击详情查看错误日志详情。查看运行失败的步骤,通过失败信息分析原因。
常见的原因有:
PAI RAG应用Token配置错误,Token未正确配置PAI RAG 应用Token或配置时存在前后空格。Token可以参考步骤1查看并和配置比对。
微信公众号未完成认证,但采用了已完成认证的工作流。需要重新配置工作流,选择没有认证的公众号对应的工作流。
微信公众号凭证配置错误,可在AppFlow控制台连接凭证页面,查看微信公众号配置,与微信公众号后台进行比对。
微信公众号未配置白名单 IP。可在AppFlow控制台连接凭证页面,查看微信公众号配置,获取白名单 IP。
微信公众号未完成认证,RAG应用回答超过5秒,导致触发微信限制,未能成功回复。建议完成微信认证,使用已经完成认证的工作流。如果无法完成认证,可以在PAI-RAG WebUI中修改prompt,并添加”请总是给出简短的回答,不要讲太多“。或选择更小规格的大模型来提升模型回复速度,但此方法会降低模型回答效果。
微信报错“当前填写的URL存在严重安全风险,无法设置”如何解决
当您在微信公众号后台配置服务器配置时,报错提示“当前填写的URL存在严重安全风险,无法设置”时,您可以采用最新的服务商授权方式重新创建微信公众号连接流。如果您不想要使用服务商方式,也可以参考下面的方式绑定自有域名。
如果您的域名已在阿里云备案,您可以提交工单,联系我们客服人员,提供连接流 ID、自定义域名,帮您配置并使用您企业的自有域名。然后您需要为自定义域名配置CNAME解析到连接流的WebhookUrl。
如果您的域名没有在阿里云备案,您可以在服务器配置中配置URL为您自有的域名,并在您自有域名对外提供服务的Nginx上配置转发规则,将请求转发到连接流的WebhookUrl。