前言

去年写了一篇阿里云 FC 对接 OpenAI 的教程,没想到浏览量暴增,相比之前的技术文章,大家貌似对人工智能这块蛋糕比较感兴趣。随着 猿码盒 的开发以及一部分内测用户的体验,我也接到了几个委托,比如接入 Whisper 相关的语音系统、针对顾博士的研究课题进行数据计算等等,但是今天要讲的是另一位朋友的委托——将钉钉机器人接入 ChatGPT。

前提

  • 阿里云账号 (本次需要用到 FC 和 OSS)
  • OpenAI 账号 (需要绑定银行卡,不需要开会员)

    • 如果你没梯子,先找网上免费的用一下,然后到 这里 去买稳定套餐,我用五六年了,没出过任何问题。
    • 如果你没账号,暂不提供注册方式,自行研究一下。
    • 如果你没美区银行卡,到 这里 申请一张虚拟卡,会提供美国家庭环境和教程教你如何绑卡,费率不高,稳定性未知,才用了一年。
  • 钉钉账号

开整

Github

可以先去 这里 学习一下本次需要用到的主要操作,或者直接跟我来。

首先把这两份文件下载到本地 直接请求脚本 异步回复脚本

两份脚本写的都不是很完美,咱们要修改一下逻辑,使用你的文本编辑器打开。

第一份 Dingtalk_Conversation.py 脚本,阿里云 FC 执行的时候可能会获取不到环境变量而报错,由于我们是自己做的机器人,验签操作不影响结果,把框出来的代码删除。

image-20240106164953452

第二份 Dingtalk_ChatGPT_Reply.py 脚本,逻辑很怪,回复次数变量解析为整形,所以 HISTORY_LENGTH1 时,会取最后两次的问答结果,配 0 时,Python 中数组切片 [0:]会取全部回答的记录,然而在某些特定的场景,我们不需要机器人有任何记忆的时候,通过脚本的环境变量就配不出来。因此,如果你不要机器人的记忆功能,那么把下面我框出来的部分删除。

image-20240106165708139

代码这块就算处理完了,其他按你的需求自行调整。记住把这两个代码放到两个文件夹里,或者压缩到两个压缩包里,因为后续阿里 FC 导入的时候不支持文件直接导入。

阿里云

OSS

先去工作台创建一个 OSS,收费但可以忽略不计。

image-20240106170044785

FC

这部分是重中之重,比较容易搞错,仔细看。

先去工作台创建服务,地点必须选美国,除非你用三方代理的 api,否则官网的 api 无法调用,且有封号风险。取名为 ChatGTP_Services(取其他名字也行,但是记得改后面的环境变量),如果你懂技术,建议把日志开起来,配错的时候根据日志定位问题。

image-20240106170457803

然后要挂载一下刚才创建的 oss,否则无法异步处理消息。检查一下该服务有没有绑定角色,如果没有记得绑一下 AliyunFcDefaultRole,或其他有权限的角色。

image-20240106173322987

接下来绑定上面我们在 oss 里创建的 bucket,目录填 /mnt/oss

image-20240106173453138

接下来我们要针对两份代码分别创建两个函数,首先是第一个Dingtalk_Conversation

image-20240106171504716

高级参数推荐按我截图的配。

image-20240106171700189

环境变量把下面的复制过去后修改,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,这次要选择处理事件请求

image-20240106172338984

再提醒一下,handler改成脚本的文件名。

image-20240106172518026

这次的环境变量用下面的,但是配置的修改有两种情况:

  1. 你用的是官方接口,那么只要修改CHATGPT_API_KEY
  2. 你用的是三方接口,那么要修改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函数中触发器管理里的公网访问地址,后续要填入钉钉里。

image-20240106173613718

钉钉

省略注册账号的步骤,随便创建一个组织后进入,然后创建一个机器人应用。

image-20240106163305340

将上面的地址配置到机器人里面,然后直接发布,不要使用测试(测试名称在发送消息时会解析失败)

image-20240106173827502

发布一下应用。

image-20240106174020479

发布完成之后,去钉钉群就可以使用啦。

image-20240106175505588

参考资料

最后修改:2024 年 02 月 04 日
随意