由于 chatGPT 网页版有点难用(有墙且需要频繁刷新),所以本文使用阿里云函数计算 FC + 对象存储 OSS 为钉钉机器人构建 Serverless 服务。不需要维护服务器,成本可以忽略不计。这个方法利用阿里云美国服务器通过 API 访问 OpenAI,比较方便。
在钉钉中私聊机器人,或在群聊中@机器人。
- 拥有一个 OpenAI 账号
- 拥有一个钉钉账号,并注册一个钉钉组织 (与 ZJU 不冲突)
- 拥有一个阿里云账号
函数计算与对象存储都可以按量付费。
函数计算根据函数运行时长、使用内存、CPU、流量进行计费,具体计费规则可参考阿里云文档,个人使用费用可以忽略(函数计算按每小时用量计费,且对金额小数位2位后进行抹零,即费用小于0.01不会收费)。
对象存储根据存储容量和流出流量计费,每个月有 5GB 的免费用量,每次对话用量在 1 kB 左右,费用可以忽略。
- 用户向钉钉机器人发送消息
- 钉钉机器人将消息转发至函数计算触发器
- 函数计算从 OSS 拉取聊天历史,与新消息组合后通过 ChatGPT API 得到新回复
- 函数计算将新的对话内容存入 OSS,并将新回答发回给钉钉机器人
- 用户收到钉钉机器人的消息
https://github.com/cyoahs/Dingtalk-ChatGPT-Connector
ChatGPT API Key: https://platform.openai.com/account/api-keys (注意保护密钥,泄露会引起财产损失)
阿里云账号 AccessKey: https://help.aliyun.com/document_detail/116401.htm (注意保护密钥,泄露会引起财产损失)
创建钉钉组织,并登陆 https://open.dingtalk.com/ ,按照引导创建钉钉机器人,并获取钉钉机器人的 APPSecret。
开通阿里云对象存储,创建一个 Bucket,获取 Bucket 的名称和 Endpoint。
在函数计算 ChatGTP_Services
的服务详情-存储配置中开启OSS挂载功能,挂载上一步所创建的Bucket,建议挂载点为 /mnt/oss
。
开通阿里云函数计算服务,服务地区切换到美国硅谷(嘘,不要动歪心思),创建服务,命名为 ChatGTP_Services
。创建名为 Dingtalk_Conversation
的HTTP函数,并将代码仓库的 Dingtalk_Conversation.py
内容复制进去。再创建名为 Dingtalk_ChatGPT_Reply
的事件函数,并将代码仓库的 Dingtalk_ChatGPT_Reply.py
内容复制进去。
// 环境变量说明
// 函数:Dingtalk_Conversation:
{
// 必填项
"CHATGPT_FUNCTION": "Dingtalk_ChatGPT_Reply",
"DINGTALK_APP_SECRET": "修改为你的钉钉应用的appSecret",
"ENDPOINT": "修改为你的阿里云函数计算Endpoint地址",
"SERVICE_NAME": "ChatGTP_Services",
// 选填项
"VERBOSE": "25", // 日志级别
}
// Endpoint地址详见文档 https://help.aliyun.com/document_detail/52984.html
// 函数: Dingtalk_ChatGPT_Reply
{
// 必填项
"CHATGPT_API_KEY": "修改为你的ChatGPT API Key",
// 选填项
"HISTORY_LENGTH": "5", // 历史记录长度(一问一答算一次)
"OSS_MOUNT_POINT": "/mnt/oss", // 自定义 OSS 挂载点
"TIMEOUT": "55", // chatgpt请求时间,请使用小于函数执行时间的数值
"VERBOSE": "25", // 日志级别
}
复制 Dingtalk_Conversation
的公网访问地址,在钉钉机器人的开发管理中,填入 消息接受地址
,在部署中上线机器人。