侧边栏壁纸
博主头像
码森林博主等级

一起走进码森林,享受编程的乐趣,发现科技的魅力,创造智能的未来!

  • 累计撰写 146 篇文章
  • 累计创建 74 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

解锁无限可能:ChatGPT + 钉钉,打造属于你的 AI 助手未来!

码森林
2023-06-16 / 0 评论 / 0 点赞 / 906 阅读 / 1,444 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-06-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

大家好,我是 AI 研习者轻寒。本教程主要介绍如何把 ChatGPT 接入到钉钉聊天中,本文相对偏技术,使用技术较为基础,主要是为了跑通整个流程。废话不多说,直接开始~

准备

  • 需要一个 ChatGPT 代理地址,供国内可访问,我这边是自己部署的(有兴趣的关注私聊)
  • 需要 OpenAI 账户的 key
  • 了解钉钉机器人文档,这里

钉钉配置

我们知道如果要在钉钉聊天实现接入 ChatGPT,必然需要以下流程:

  • 用户在群里进行提问,通过钉钉把内容转发给 ChatGPT;
  • ChatGPT 收到内容产生答案,通过接口发送到群里进行回复。

刚好钉钉支持有能力。

创建机器人应用

在钉钉开放平台内创建机器人应用,这里需要使用旧版。

image-20230616215704577

填写应用信息,确定创建。

image-20230616215742156

创建成功。

image-20230616215841311

开发管理,这里可以填写服务器出口 IP 和消息接收地址。其中服务器出口 IP 是调用钉钉服务端 API 时的合法 IP 列表,多个IP请以","隔开,支持带一个*号通配符的IP格式;消息接收地址即是通过@群机器人,将消息发送到指定外部服务,还可以将外部服务的响应结果返回到群组。这里填写一个公网可访问的HTTPS/HTTP地址,用于接收POST过来的消息。

image-20230616220143311

相关权限进行设置,根据自己的需求申请。

image-20230616220232725

版本管理与发布,点击调试,可以进入钉钉测试群。点击上线,在企业内部群里才能看到。

image-20230616220352689

钉钉群机器人

在订单企业内部群支持添加自定义机器人,这里我们选择在开发平台创建的机器人。

image-20230616220812095

image-20230616220948597

这里我们就得到下面代码中使用的 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 部署。

演示成果

image-20230616222432635

image-20230616222537686

结尾

本次教程就到这里,后续可能会进行迭代优化,基于 LangChain 去实现一些功能。

理解新范式,拥抱新时代,把握新机会。

想要了解更多 AI 内容,记得关注我哦!觉得对你有用的话,记得点赞,转发给你的朋友!如果有什么问题可以私信我~

对了,最近和朋友搞了一个副业项目,有想讨论副业或 AI 的也可以关注我,或私聊我加微信一起探讨~

下面是5、6月份通过 ChatGPT 协助开发的应用,一个人完成了前端、后端、运维~
长按二维码查看~

image-20230616223200052
0

评论区