前言
去年写了一篇阿里云 FC 对接 OpenAI 的教程,没想到浏览量暴增,相比之前的技术文章,大家貌似对人工智能这块蛋糕比较感兴趣。随着 猿码盒 的开发以及一部分内测用户的体验,我也接到了几个委托,比如接入 Whisper 相关的语音系统、针对顾博士的研究课题进行数据计算等等,但是今天要讲的是另一位朋友的委托——将钉钉机器人接入 ChatGPT。
前提
- 阿里云账号 (本次需要用到 FC 和 OSS)
OpenAI 账号 (需要绑定银行卡,不需要开会员)
- 钉钉账号
开整
Github
可以先去 这里 学习一下本次需要用到的主要操作,或者直接跟我来。
两份脚本写的都不是很完美,咱们要修改一下逻辑,使用你的文本编辑器打开。
第一份 Dingtalk_Conversation.py
脚本,阿里云 FC 执行的时候可能会获取不到环境变量而报错,由于我们是自己做的机器人,验签操作不影响结果,把框出来的代码删除。
第二份 Dingtalk_ChatGPT_Reply.py
脚本,逻辑很怪,回复次数变量解析为整形,所以 HISTORY_LENGTH
配 1
时,会取最后两次的问答结果,配 0
时,Python 中数组切片 [0:]
会取全部回答的记录,然而在某些特定的场景,我们不需要机器人有任何记忆的时候,通过脚本的环境变量就配不出来。因此,如果你不要机器人的记忆功能,那么把下面我框出来的部分删除。
代码这块就算处理完了,其他按你的需求自行调整。记住把这两个代码放到两个文件夹里,或者压缩到两个压缩包里,因为后续阿里 FC 导入的时候不支持文件直接导入。
阿里云
OSS
先去工作台创建一个 OSS,收费但可以忽略不计。
FC
这部分是重中之重,比较容易搞错,仔细看。
先去工作台创建服务,地点必须选美国,除非你用三方代理的 api,否则官网的 api 无法调用,且有封号风险。取名为 ChatGTP_Services
(取其他名字也行,但是记得改后面的环境变量),如果你懂技术,建议把日志开起来,配错的时候根据日志定位问题。
然后要挂载一下刚才创建的 oss,否则无法异步处理消息。检查一下该服务有没有绑定角色,如果没有记得绑一下 AliyunFcDefaultRole
,或其他有权限的角色。
接下来绑定上面我们在 oss 里创建的 bucket,目录填 /mnt/oss
。
接下来我们要针对两份代码分别创建两个函数,首先是第一个Dingtalk_Conversation
。
高级参数推荐按我截图的配。
环境变量把下面的复制过去后修改,Endpoint地址详见文档 https://help.aliyun.com/document_detail/52984.html,比如我选的弗吉尼亚,那就是 <主账号ID>.us-east-1-internal.fc.aliyuncs.com
,如果第一步里的服务名称改了,那这里的SERVICE_NAME
也记得修改,同理如果接下来要添加的回复函数名称不叫Dingtalk_ChatGPT_Reply
这里也要改一下CHATGPT_FUNCTION
。
{
"CHATGPT_FUNCTION":"Dingtalk_ChatGPT_Reply",
"DINGTALK_APP_SECRET":"修改为你的钉钉应用的appSecret",
"ENDPOINT":"修改为你的阿里云函数计算Endpoint地址",
"SERVICE_NAME":"ChatGTP_Services",
"VERBOSE":"25"
}
触发器用默认的即可,点击创建后,再创建第二个函数Dingtalk_ChatGPT_Reply
,这次要选择处理事件请求
。
再提醒一下,handler改成脚本的文件名。
这次的环境变量用下面的,但是配置的修改有两种情况:
- 你用的是官方接口,那么只要修改
CHATGPT_API_KEY
- 你用的是三方接口,那么要修改
ENDPOINT
为三方接入的 url,并且修改USER_API_KEY
为三方提供的 key,上面的CHATGPT_API_KEY
就不用改了,随便填什么
HISTORY_LENGTH
:代表会取多少次历史问答记录,比如配置1
,那么会把上一次提问+回答+这一次提问,合并一起发送。如果你不需要历史记录,且已经按照上面我说的修改过代码,那么这里不用管了。
OSS_MOUNT_POINT
:这里配置成服务挂载的 oss 路径即可,建议多个不同的机器人绑定不同的路径,否则消息会被多个机器人同时共享。
{
"CHATGPT_API_KEY":"修改为你的ChatGPT API Key",
"HISTORY_LENGTH":"5",
"OSS_MOUNT_POINT":"/mnt/oss",
"TIMEOUT":"55",
"VERBOSE":"25",
"ENDPOINT":"https://api.openai.com",
"USER_API_KEY":""
}
最后一步,复制 Dingtalk_Conversation
函数中触发器管理里的公网访问地址,后续要填入钉钉里。
钉钉
省略注册账号的步骤,随便创建一个组织后进入,然后创建一个机器人应用。
将上面的地址配置到机器人里面,然后直接发布,不要使用测试(测试名称在发送消息时会解析失败)
发布一下应用。
发布完成之后,去钉钉群就可以使用啦。
参考资料
- 对于阿里 FC 接入不太熟悉的可以看看我上一篇发的文章: 国内使用阿里云 FC 对接 OpenAI API 方案
- 脚本仓库:https://github.com/Sunny-Law/Dingtalk-ChatGPT-Connector
- ChatGPT API 调用文档:https://platform.openai.com/docs/api-reference/making-requests
- 钉钉机器人接收消息文档:https://open.dingtalk.com/document/orgapp/receive-message
- 阿里云函数计算概述文档:https://help.aliyun.com/document_detail/61009.html
- 阿里云对象存储文档: https://help.aliyun.com/product/31815.html
- 阿里云AccessKey获取方式: https://help.aliyun.com/document_detail/116401.htm
- 函数计算挂载OSS文档:https://help.aliyun.com/document_detail/454199.html