二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancker
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancker
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Shell编程

  • Go编程笔记

    • 开发技巧

    • 库包研究

    • 个人项目

      • 给我一个URL,我能将你关心的页面元素截图发给机器人
      • 有人在go-ldap库issue中寻求文档,我为此写了一个ldapctl工具
      • 拯救openLDAP的上古管理界面,我写了一个现代化的ldap管理后台go-ldap-admin
      • chatGPT钉钉群聊交互版-chatgpt-dingtalk
        • 项目
        • 前言
        • 功能介绍
        • 使用前提
        • 使用教程
          • 第一步,创建机器人
          • 方案一:outgoing类型机器人
          • 方案二:企业内部应用
          • 第二步,部署应用
          • docker部署
          • 二进制部署
        • 亮点特色
          • 与机器人私聊
          • 帮助列表
          • 切换模式
          • 查询余额
          • 日常问题
          • 通过内置prompt聊天
          • 生成图片
          • 支持 gpt-4
        • 本地开发
        • 配置文件说明
        • 常见问题
        • 感谢
        • 赞赏
        • 高光时刻
  • 前端编程笔记

  • Go学习笔记

  • Vue-21年学习笔记

  • Vue-22年重学笔记

  • 编程世界
  • Go编程笔记
  • 个人项目
二丫讲梵
2022-12-09
目录

chatGPT钉钉群聊交互版-chatgpt-dingtalk

文章发布较早,内容可能过时,阅读注意甄别。

# 项目

chatgpt-dingtalk

openldap Controller

- name: chatgpt-dingtalk
  desc: openldap Controller
  avatar: https://avatars2.githubusercontent.com/u/416130?s=460&u=8753e86600e300a9811cdc539aa158deec2e2724&v=4 # 可选
  link: https://github.com/eryajf/chatgpt-dingtalk # 可选
  bgColor: '#FBDE4B' # 可选,默认var(--bodyBg)。颜色值有#号时请添加单引号
  textColor: '#fff' # 可选,默认var(--textColor)
1
2
3
4
5
6

# 前言

本项目可以助你将GPT机器人集成到钉钉群聊当中。当前默认模型为 gpt-3.5,支持gpt-4。

🥳 欢迎关注我的其他开源项目:

  • Go-Ldap-Admin (opens new window):🌉 基于Go+Vue实现的openLDAP后台管理项目。
  • learning-weekly (opens new window):📝 周刊内容以运维技术和Go语言周边为主,辅以GitHub上优秀项目或他人优秀经验。
  • HowToStartOpenSource (opens new window):🌈 GitHub开源项目维护协同指南。
  • read-list (opens new window):📖 优质内容订阅,阅读方为根本
  • awesome-github-profile-readme-chinese (opens new window):🦩 优秀的中文区个人主页搜集

🚜 我还创建了一个项目awesome-chatgpt-answer (opens new window):记录那些问得好,答得妙的时刻,欢迎提交你与ChatGPT交互过程中遇到的那些精妙对话。

⚗️ openai官方提供了一个状态页 (opens new window)来呈现当前openAI服务的状态,同时如果有问题发布公告也会在这个页面,如果你感觉它有问题了,可以在这个页面看看。

# 功能介绍

  • 🚀 帮助菜单:通过发送 帮助 将看到帮助列表,🖼 查看示例
  • 🥷 私聊:支持与机器人单独私聊(无需艾特),🖼 查看示例
  • 💬 群聊:支持在群里艾特机器人进行对话
  • 🙋 单聊模式:每次对话都是一次新的对话,没有历史聊天上下文联系
  • 🗣 串聊模式:带上下文理解的对话模式
  • 🎨 图片生成:通过发送 #图片关键字开头的内容进行生成图片,🖼 查看示例
  • 🎭 角色扮演:支持场景模式,通过 #周报 的方式触发内置prompt模板 🖼 查看示例
  • 🧑‍💻 频率限制:通过配置指定,自定义单个用户单日最大对话次数
  • 💵 余额查询:通过发送 余额 关键字查询当前key所剩额度,🖼 查看示例
  • 🔗 自定义api域名:通过配置指定,解决国内服务器无法直接访问openai的问题
  • 🪜 添加代理:通过配置指定,通过给应用注入代理解决国内服务器无法访问的问题
  • 👐 默认模式:支持自定义默认的聊天模式,通过配置化指定

# 使用前提

  • 有Openai账号,并且创建好api_key,注册相关事项可以参考此文章 (opens new window) 。访问这里 (opens new window),申请个人秘钥。
  • 在钉钉开发者后台创建机器人,配置应用程序回调。

# 使用教程

# 第一步,创建机器人

# 方案一:outgoing类型机器人

钉钉群内的机器人有一个outgoing模式,当你创建机器人的时候,可以选择启用这个模式,然后直接配置回调地址,免去在管理后台创建应用的步骤,就可以直接投入使用。

官方文档:自定义机器人接入 (opens new window)

但是这个模式貌似是部分开放的(目前来看貌似是部分人有创建这个类型的白名单),所以如果你在钉钉群聊中添加自定义机器人的时候,看到和我一样的信息,则说明无法使用这种方式:

image_20230325_162017

📢 注意

  • 如果你的和我一样,那么就只能放弃这种方案,往下看第二种对接方案。
  • 如果使用这种方案,那么就不能与机器人私聊对话,只能局限在群聊当中艾特机器人聊天。
  • 如果使用这种方案,则在群聊当中并不能达到真正的艾特发消息人的效果,因为这种机器人回调过来的关键信息为空。

# 方案二:企业内部应用

创建步骤参考文档:企业内部开发机器人 (opens new window),或者根据如下步骤进行配置。

  1. 创建机器人。 image_20221209_163616

    📢 注意1:可能现在创建机器人的时候名字为chatgpt会被钉钉限制,请用其他名字命名。 📢 注意2:第四步骤点击创建应用的时候,务必选择使用旧版,从而创建旧版机器人。

    步骤比较简单,这里就不赘述了。

  2. 配置机器人回调接口。 image_20221209_163652

    创建完毕之后,点击机器人开发管理,然后配置将要部署的服务所在服务器的出口IP,以及将要给服务配置的域名。

如果提示: 消息接收地址校验失败(请确保公网可访问该地址,如无有效SSL证书,可选择禁用证书校验),那么可以先输入一个https://,然后就能看到禁用https的选项了,选择禁用,然后再把地址改成http就好了。

  1. 发布机器人。 image_20221209_163709

    点击版本管理与发布,然后点击上线,这个时候就能在钉钉的群里中添加这个机器人了。

  2. 群聊添加机器人。

    image_20221209_163724

# 第二步,部署应用

# docker部署

你可以使用docker快速运行本项目。

第一种:基于环境变量运行
# 运行项目
$ docker run -itd --name chatgpt -p 8090:8090 --add-host="host.docker.internal:host-gateway" -e APIKEY=换成你的key -e BASE_URL="" -e MODEL="gpt-3.5-turbo" -e SESSION_TIMEOUT=600 -e HTTP_PROXY="http://host.docker.internal:15732" -e DEFAULT_MODE="单聊" -e MAX_REQUEST=0 -e PORT=8090 -e SERVICE_URL="你当前服务外网可访问的URL" --restart=always  dockerproxy.com/eryajf/chatgpt-dingtalk:latest
1
2
3

📢 注意:如果使用docker部署,那么PORT参数不需要进行任何调整。 📢 注意:如果服务器节点本身就在国外或者自定义了BASE_URL,那么就把HTTP_PROXY参数留空即可。 📢 注意:如果使用docker部署,那么proxy地址可以直接使用如上方式部署,host.docker.internal会指向容器所在宿主机的IP,只需要更改端口为你的代理端口即可。参见:Docker容器如何优雅地访问宿主机网络 (opens new window)

运行命令中映射的配置文件参考下边的配置文件说明。

第二种:基于配置文件挂载运行
# 复制配置文件,根据自己实际情况,调整配置里的内容
$ cp config.dev.json config.json  # 其中 config.dev.json 从项目的根目录获取

# 运行项目
$ docker run -itd --name chatgpt -p 8090:8090  -v `pwd`/config.json:/app/config.json --restart=always  dockerproxy.com/eryajf/chatgpt-dingtalk:latest
1
2
3
4
5
6

其中配置文件参考下边的配置文件说明。

第三种:使用 docker compose 运行
$ wget https://raw.githubusercontent.com/eryajf/chatgpt-dingtalk/main/docker-compose.yml

$ nano docker-compose.yml # 编辑 APIKEY 等信息

$ docker compose up -d
1
2
3
4
5
6

注意,不论通过上边哪种docker方式部署,都需要配置Nginx代理,当然你直接通过服务器外网IP也可以。

部署完成之后,通过Nginx代理本服务:

server {
    listen       80;
    server_name  chat.eryajf.net;

    client_header_timeout 120s;
    client_body_timeout 120s;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://localhost:8090;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

部署完成之后,就可以在群里艾特机器人进行体验了。

Nginx配置完毕之后,可以先手动请求一下,通过服务日志输出判断服务是否正常可用:

$ curl --location --request POST 'http://chat.eryajf.net/' \
  --header 'Content-type: application/json' \
  --data-raw '{
    "conversationId": "xxx",
    "atUsers": [
        {
            "dingtalkId": "xxx",
            "staffId":"xxx"
        }
    ],
    "chatbotCorpId": "dinge8a565xxxx",
    "chatbotUserId": "$:LWCP_v1:$Cxxxxx",
    "msgId": "msg0xxxxx",
    "senderNick": "eryajf",
    "isAdmin": true,
    "senderStaffId": "user123",
    "sessionWebhookExpiredTime": 1613635652738,
    "createAt": 1613630252678,
    "senderCorpId": "dinge8a565xxxx",
    "conversationType": "2",
    "senderId": "$:LWCP_v1:$Ff09GIxxxxx",
    "conversationTitle": "机器人测试-TEST",
    "isInAtList": true,
    "sessionWebhook": "https://oapi.dingtalk.com/robot/sendBySession?session=xxxxx",
    "text": {
        "content": " 你好"
    },
    "msgtype": "text"
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

如果手动请求没有问题,那么就可以在钉钉群里与机器人进行对话了。

# 二进制部署

如果你想通过命令行直接部署,可以直接下载release中的压缩包 (opens new window) ,请根据自己系统以及架构选择合适的压缩包,下载之后直接解压运行。

下载之后,在本地解压,即可看到可执行程序,与配置文件:

$ tar xf chatgpt-dingtalk-v0.0.4-darwin-arm64.tar.gz
$ cd chatgpt-dingtalk-v0.0.4-darwin-arm64
$ cp config.dev.json  config.json # 然后根据情况调整配置文件内容,宿主机如遇端口冲突,可通过调整config.json中的port参数自定义服务端口
$ ./chatgpt-dingtalk  # 直接运行

# 如果要守护在后台运行
$ nohup ./chatgpt-dingtalk &> run.log &
$ tail -f run.log
1
2
3
4
5
6
7
8

# 亮点特色

# 与机器人私聊

2023-03-08补充,我发现也可以不在群里艾特机器人聊天,还可点击机器人,然后点击发消息,通过与机器人直接对话进行聊天:

由 @Raytow (opens new window) 同学发现,在机器人自动生成的测试群里无法直接私聊机器人,在其他群里单独添加这个机器人,然后再点击就可以跟它私聊了。

image

# 帮助列表

艾特机器人发送空内容或者帮助,会返回帮助列表。

image_20230216_221253

# 切换模式

发送指定关键字,可以切换不同的模式。

image_20230215_184655

📢 注意:串聊模式下,群里每个人的聊天上下文是独立的。 📢 注意:默认对话模式为单聊,因此不必发送单聊即可进入单聊模式,而要进入串聊,则需要发送串聊关键字进行切换,当串聊内容超过最大限制的时候,你可以发送重置,然后再次进入串聊模式。

# 查询余额

艾特机器人发送 余额 二字,会返回当前key对应的账号的剩余额度以及可用日期。

image_20230304_222522

# 日常问题

image_20221209_163739

# 通过内置prompt聊天

发送模板两个字,会返回当前内置支持的prompt列表。

image_20230323_152703

如果你发现有比较优秀的prompt,欢迎PR。注意:一些与钉钉使用场景不是很匹配的,就不要提交了。

# 生成图片

发送以 #图片开头的内容,将会触发绘画能力,图片生成之后,将会保存在程序根目录下的images目录下。

如果你绘图没有思路,可以在这里 https://www.clickprompt.org/zh-CN/ (opens new window)以及这里 https://lexica.art/ (opens new window)找到一些不错的prompt。

image_20230323_150547

# 支持 gpt-4

如果你的账号通过了官方的白名单,那么可以将模型配置为:gpt-4-0314或gpt-4,目前gpt-4的余额查询以及图片生成功能暂不可用,可能是接口限制,也可能是其他原因,等我有条件的时候,会对这些功能进行测试验证。

以下是gpt-3.5与gpt-4对数学计算方面的区别。

image_20230330_180308

感谢@PIRANHACHAN (opens new window)同学提供的gpt-4的key,使得项目在gpt-4的对接上能够进行验证测试,达到了可用状态。

# 本地开发

# 获取项目
$ git clone https://github.com/eryajf/chatgpt-dingtalk.git

# 进入项目目录
$ cd chatgpt-dingtalk

# 复制配置文件,根据个人实际情况进行配置
$ cp config.dev.json config.json

# 启动项目
$ go run main.go
1
2
3
4
5
6
7
8
9
10
11

# 配置文件说明

{
    "api_key": "xxxxxxxxx",   // openai api_key
    "base_url": "api.openai.com", //  如果你想指定请求url的地址,可通过这个参数进行配置,默认为官方地址,不需要再添加 /v1
    "model": "gpt-3.5-turbo", // 指定模型,默认为 gpt-3.5-turbo , 可选参数有: "gpt-4-0314", "gpt-4", "gpt-3.5-turbo-0301", "gpt-3.5-turbo"
    "session_timeout": 600,   // 会话超时时间,默认600秒,在会话时间内所有发送给机器人的信息会作为上下文
    "http_proxy": "",         // 指定请求时使用的代理,如果为空,则不使用代理
    "default_mode": "单聊",    // 默认对话模式,可根据实际场景自定义,如果不设置,默认为单聊
    "max_request": 0,    // 单人单日请求次数限制,默认为0,即不限制
    "port": "8090",     // 指定服务启动端口,默认为 8090,一般在二进制宿主机部署时,遇到端口冲突时使用。
    "service_url": "" // 指定服务的地址,就是当前服务可供外网访问的地址,用于生成图片时给钉钉渲染
}
1
2
3
4
5
6
7
8
9
10
11

# 常见问题

如何更好地使用ChatGPT:这里有许多案例 (opens new window)可供参考。

🗣 重要重要 一些常见的问题,我单独开issue放在这里:👉点我👈 (opens new window),可以查看这里辅助你解决问题,如果里边没有,请对历史issue进行搜索(不要提交重复的issue),也欢迎大家补充。

# 感谢

这个项目能够成立,离不开这些开源项目:

  • go-resty/resty (opens new window)
  • patrickmn/go-cache (opens new window)
  • solywsh/chatgpt (opens new window)
  • xgfone/ship (opens new window)
  • avast/retry-go (opens new window)
  • sashabaranov/go-openapi (opens new window)
  • charmbracelet/log (opens new window)

# 赞赏

如果觉得这个项目对你有帮助,你可以请作者喝杯咖啡 ☕️ (opens new window)

# 高光时刻

本项目曾在 | 2022-12-12 (opens new window) | 2022-12-18 (opens new window) | 2022-12-19 (opens new window) | 2022-12-20 (opens new window) | 2023-02-09 (opens new window) | 2023-02-10 (opens new window) | 2023-02-11 (opens new window) | 2023-02-12 (opens new window) | 2023-02-13 (opens new window) | 2023-02-14 (opens new window) | 2023-02-15 (opens new window) | 2023-03-04 (opens new window) | 2023-03-05 (opens new window) | 2023-03-19 (opens new window) | 2023-03-22 (opens new window) | 2023-03-25 (opens new window) | 2023-03-26 (opens new window), 这些天里,登上GitHub Trending。而且还在持续登榜中,可见最近openai的热度。 image_20230316_114915

微信 支付宝
上次更新: 2023/03/30, 20:54:25

← 拯救openLDAP的上古管理界面,我写了一个现代化的ldap管理后台go-ldap-admin 基于codemirror在页面中嵌入代码编辑器→

最近更新
01
记录2022年购买过的电子产品
05-26
02
一次因为Mac系统升级引发的ssh无法免密登陆的问题
05-26
03
学习周刊-总第108期-2023年第21周
05-26
更多文章>
Theme by Vdoing | Copyright © 2017-2023 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式