大家好,我是 AI 研习者轻寒。本教程主要介绍如何把 ChatGPT 接入到钉钉聊天中,本文相对偏技术,使用技术较为基础,主要是为了跑通整个流程。废话不多说,直接开始~
准备
- 需要一个 ChatGPT 代理地址,供国内可访问,我这边是自己部署的(有兴趣的关注私聊)
- 需要 OpenAI 账户的 key
- 了解钉钉机器人文档,这里
钉钉配置
我们知道如果要在钉钉聊天实现接入 ChatGPT,必然需要以下流程:
- 用户在群里进行提问,通过钉钉把内容转发给 ChatGPT;
- ChatGPT 收到内容产生答案,通过接口发送到群里进行回复。
刚好钉钉支持有能力。
创建机器人应用
在钉钉开放平台内创建机器人应用,这里需要使用旧版。
填写应用信息,确定创建。
创建成功。
开发管理,这里可以填写服务器出口 IP 和消息接收地址。其中服务器出口 IP 是调用钉钉服务端 API 时的合法 IP 列表,多个IP请以","隔开,支持带一个*号通配符的IP格式;消息接收地址即是通过@群机器人,将消息发送到指定外部服务,还可以将外部服务的响应结果返回到群组。这里填写一个公网可访问的HTTPS/HTTP地址,用于接收POST过来的消息。
相关权限进行设置,根据自己的需求申请。
版本管理与发布,点击调试,可以进入钉钉测试群。点击上线,在企业内部群里才能看到。
钉钉群机器人
在订单企业内部群支持添加自定义机器人,这里我们选择在开发平台创建的机器人。
这里我们就得到下面代码中使用的 Webhook URL。
下面我这边直接提供核心代码和部署方式。
核心代码
webhook.py
import requests
import urllib3
from flask import Flask, request
urllib3.disable_warnings()
requests.adapters.DEFAULT_RETRIES = 3
s = requests.Session()
# 关闭多余连接
s.keep_alive = False
# 取消验证证书
s.verify = False
# 关闭在设置了verify=False后的错误提示
urllib3.disable_warnings()
app = Flask(__name__)
chatgpt_conversation = [] # AI对话形成上下文连贯
# Bearer加上空格然后替换openai的apikey 从openai官网获取
OPENAI_API_KEY = "***"
# OpenAI 代理地址
OPENAI_API_BASE = "***"
# 钉钉群聊机器人的 Webhook URL
DINGTALK_SEND_URL = "***"
@app.route("/webhook/event", methods=['POST'])
def event(): # AI聊天
global chatgpt_conversation
headers = {'Content-Type': 'application/json',
'Authorization': 'Bearer ' + OPENAI_API_KEY}
json_data = request.get_json()
chatgpt_conversation.append({"role": "user", "content": json_data['text']['content']})
json_message = {
"model": "gpt-3.5-turbo-16k-0613",
"messages": chatgpt_conversation
}
chatgpt_response = requests.post(OPENAI_API_BASE + '/chat/completions', headers=headers,
json=json_message)
chatgpt_conversation.append(chatgpt_response.json()['choices'][0]['message'])
answer = chatgpt_response.json()['choices'][0]['message']['content']
print("----" * 20)
print(answer)
print("----" * 20)
headers2 = {'Content-Type': 'application/json'}
json_sendmessages = {"msgtype": "text", "text": {"content": answer}}
response = requests.post(DINGTALK_SEND_URL, headers=headers2, json=json_sendmessages)
print(response.text)
if len(chatgpt_conversation) > 16: # 对会话数进行限制
chatgpt_conversation = []
return 'success'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=18888, debug=True) # 运行在有公网IP的服务器,同时开发18888端口
requirements.txt
Flask==2.2.3
requests==2.28.2
urllib3==1.25.11
部署方式
我这里采用 Docker 部署。先创建一个简单 Dockerfile 用于构建镜像,Dockerfile 与上面的 webhook.py 和 requirements.txt 同一目录。
FROM python:3.9.17-slim-bullseye
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3", "webhook.py" ]
在 Terminal 中执行如下命令,完成镜像构建。
docker build -t ding-chatbot:1.0.0
我这里采用阿里云进行镜像管理。
docker tag cc07f3641130 registry.cn-hangzhou.aliyuncs.com/zwqh/ding-chatbot:1.0.0
docker push registry.cn-hangzhou.aliyuncs.com/zwqh/ding-chatbot:1.0.0
编写 docker-compose.yaml 部署脚本。
version: '3.9'
services:
chatbot:
image: registry.cn-hangzhou.aliyuncs.com/zwqh/ding-chatbot:1.0.0
ports:
- 18888:18888
networks:
- xunlu
networks:
xunlu:
external: true
在服务器上 docker-compose.yaml 目录下,通过以下命令完成部署。
docker-compose up -d
部署完成后,把公网可访问的 URL 填写到钉钉开放平台的消息接收地址里。
遇到问题
刚开始采用阿里云函数部署程序,但请求有时会报如下错误:FC Invoke End RequestId: 1-648c13e6-9c0746fe88192005df9220a1, Error: Invocation canceled by client (duration: 11422ms, maxMemoryUsage: 0.00MB)
。应该是请求时间太长,客户端断开连接了。目前没找到客户端如何设置超时时间,所以换了思路还是用 Docker 部署。
演示成果
结尾
本次教程就到这里,后续可能会进行迭代优化,基于 LangChain 去实现一些功能。
理解新范式,拥抱新时代,把握新机会。
想要了解更多 AI 内容,记得关注我哦!觉得对你有用的话,记得点赞,转发给你的朋友!如果有什么问题可以私信我~
下面是5、6月份通过 ChatGPT 协助开发的应用,一个人完成了前端、后端、运维~
长按二维码查看~

评论区