🚀 DingDing OpenAI 🚀
钉钉 ×(GPT-3.5 + DALL·E + Whisper)
www.connectai-e.com
🌉 基于GO语言实现的钉钉集成ChatGPT机器人 🌉
商业支持
如果开源版无法满足您公司的需求,推荐您尝试目前正在内测的商业交付版本。
📷 点击展开企联AI完整功能
- 内置开箱即用的Azure Openai: 无需部署到海外,即可获得数十倍的性能提升
- 掌控全局的Admin Panel: AI资源管理、对话日志查询、风险词规避和对话权限管理
- 专人技术支持: 配备专业部署交付人员与后期一对一维护服务
- 同时提供在线Saas版/企业级私有部署
企业客户咨询: 15623677720
目录
前言
本项目可以助你将GPT机器人集成到钉钉群聊当中。当前默认模型为gpt-3.5
,支持gpt-4
。同时支持Azure-OpenAI。
🥳 欢迎关注我的其他开源项目:
🚜 我还创建了一个项目 awesome-chatgpt-answer :记录那些问得好,答得妙的时刻,欢迎提交你与ChatGPT交互过程中遇到的那些精妙对话。
⚗️ openai官方提供了一个 状态页 来呈现当前openAI服务的状态,同时如果有问题发布公告也会在这个页面,如果你感觉它有问题了,可以在这个页面看看。
AI | SDK | Application |
---|
🎒OpenAI | Go-OpenAI | 🏅Feishu-OpenAI, 🎖Lark-OpenAI, Feishu-EX-ChatGPT, 🎖Feishu-OpenAI-Stream-Chatbot, Feishu-TLDR,Feishu-OpenAI-Amazing, Feishu-Oral-Friend, Feishu-OpenAI-Base-Helper, Feishu-Vector-Knowledge-Management, Feishu-OpenAI-PDF-Helper, 🏅Dingtalk-OpenAI, Wework-OpenAI, WeWork-OpenAI-Node, llmplugin |
🤖 AutoGPT | ------ | 🏅AutoGPT-Next-Web |
🎭 Stablediffusion | ------ | 🎖Feishu-Stablediffusion |
🍎 Midjourney | Go-Midjourney | 🏅Feishu-Midjourney, 🔥MidJourney-Web, Dingtalk-Midjourney |
🍍 文心一言 | Go-Wenxin | Feishu-Wenxin, Dingtalk-Wenxin, Wework-Wenxin |
💸 Minimax | Go-Minimax | Feishu-Minimax, Dingtalk-Minimax, Wework-Minimax |
⛳️ CLAUDE | Go-Claude | Feishu-Claude, DingTalk-Claude, Wework-Claude |
🥁 PaLM | Go-PaLM | Feishu-PaLM,DingTalk-PaLM,Wework-PaLM |
🎡 Prompt | ------ | 📖 Prompt-Engineering-Tutior |
🍋 ChatGLM | ------ | Feishu-ChatGLM |
⛓ LangChain | ------ | 📖 LangChain-Tutior |
🪄 One-click | ------ | 🎖Awesome-One-Click-Deployment |
功能介绍
- 🚀 帮助菜单:通过发送
帮助
将看到帮助列表,🖼 查看示例 - 🥷 私聊:支持与机器人单独私聊(无需艾特),🖼 查看示例
- 💬 群聊:支持在群里艾特机器人进行对话
- 🙋 单聊模式:每次对话都是一次新的对话,没有历史聊天上下文联系
- 🗣 串聊模式:带上下文理解的对话模式
- 🎨 图片生成:通过发送
#图片
关键字开头的内容进行生成图片,🖼 查看示例 - 🎭 角色扮演:支持场景模式,通过
#周报
的方式触发内置prompt模板 🖼 查看示例 - 🧑💻 频率限制:通过配置指定,自定义单个用户单日最大对话次数
- 💵 余额查询:通过发送
余额
关键字查询当前key所剩额度,🖼 查看示例 - 🔗 自定义api域名:通过配置指定,解决国内服务器无法直接访问openai的问题
- 🪜 添加代理:通过配置指定,通过给应用注入代理解决国内服务器无法访问的问题
- 👐 默认模式:支持自定义默认的聊天模式,通过配置化指定
- 📝 查询对话:通过发送
#查对话 username:xxx
查询xxx的对话历史,可在线预览,可下载到本地 - 👹 白名单机制:通过配置指定,支持指定群组名称和用户名称作为白名单,从而实现可控范围与机器人对话
- 💂♀️ 管理员机制:通过配置指定管理员,部分敏感操作,以及一些应用配置,管理员有权限进行操作
- ㊙️ 敏感词过滤:通过配置指定敏感词,提问时触发,则不允许提问,回答的内容中触发,则以 🚫 代替
- 🚇 stream模式:指定钉钉的stream模式,目前钉钉已全量开放该功能,项目也默认以此模式启动
使用前提
- 有Openai账号,并且创建好
api_key
,注册相关事项可以参考此文章 。访问这里,申请个人秘钥。 - 在钉钉开发者后台创建应用,在应用的消息推送功能块添加机器人,将消息接收模式指定为stream模式。
使用教程
第一步,部署应用
docker部署
推荐你使用docker快速运行本项目。
第一种:基于环境变量运行
# 运行项目
$ docker run -itd --name chatgpt -p 8090:8090 \
-v ./data:/app/data --add-host="host.docker.internal:host-gateway" \
-e LOG_LEVEL="info" -e APIKEY=换成你的key -e BASE_URL="" \
-e MODEL="gpt-3.5-turbo" -e SESSION_TIMEOUT=600 \
-e MAX_QUESTION_LENL=2048 -e MAX_ANSWER_LEN=2048 -e MAX_TEXT=4096 \
-e HTTP_PROXY="http://host.docker.internal:15732" \
-e DEFAULT_MODE="单聊" -e MAX_REQUEST=0 -e PORT=8090 \
-e SERVICE_URL="你当前服务外网可访问的URL" -e CHAT_TYPE="0" \
-e ALLOW_GROUPS=a,b -e ALLOW_OUTGOING_GROUPS=a,b -e ALLOW_USERS=a,b -e DENY_USERS=a,b -e VIP_USERS=a,b -e ADMIN_USERS=a,b -e APP_SECRETS="xxx,yyy" \
-e SENSITIVE_WORDS="aa,bb" -e RUN_MODE="http" \
-e AZURE_ON="false" -e AZURE_API_VERSION="" -e AZURE_RESOURCE_NAME="" \
-e AZURE_DEPLOYMENT_NAME="" -e AZURE_OPENAI_TOKEN="" \
-e DINGTALK_CREDENTIALS="your_client_id1:secret1,your_client_id2:secret2" \
-e HELP="欢迎使用本工具\n\n你可以查看:[用户指南](https://github.com/eryajf/chatgpt-dingtalk/blob/main/docs/userGuide.md)\n\n这是一个[开源项目](https://github.com/eryajf/chatgpt-dingtalk/)
,觉得不错你可以来波素质三连." \
--restart=always registry.cn-hangzhou.aliyuncs.com/ali_eryajf/chatgpt-dingtalk
运行命令中映射的配置文件参考下边的配置文件说明。
📢 注意:
如果使用docker部署,那么PORT参数不需要进行任何调整。📢 注意:
ALLOW_GROUPS,ALLOW_USERS,DENY_USERS,VIP_USERS,ADMIN_USERS 参数为数组,如果需要指定多个,可用英文逗号分割。outgoing机器人模式下这些参数无效。📢 注意:
如果服务器节点本身就在国外或者自定义了BASE_URL
,那么就把HTTP_PROXY
参数留空即可。📢 注意:
如果使用docker部署,那么proxy地址可以直接使用如上方式部署,host.docker.internal
会指向容器所在宿主机的IP,只需要更改端口为你的代理端口即可。参见:Docker容器如何优雅地访问宿主机网络
第二种:基于配置文件挂载运行
# 复制配置文件,根据自己实际情况,调整配置里的内容
$ cp config.example.yml config.yml # 其中 config.example.yml 从项目的根目录获取
# 运行项目
$ docker run -itd --name chatgpt -p 8090:8090 -v `pwd`/config.yml:/app/config.yml --restart=always registry.cn-hangzhou.aliyuncs.com/ali_eryajf/chatgpt-dingtalk
其中配置文件参考下边的配置文件说明。
第三种:使用 docker compose 运行
$ wget https://raw.githubusercontent.com/eryajf/chatgpt-dingtalk/main/docker-compose.yml
$ vim docker-compose.yml # 编辑 APIKEY 等信息
$ docker compose up -d
之前部署完成之后还有一个配置Nginx的步骤,现在将模式默认指定为stream模式,因此不再需要配置Nginx。
二进制部署
如果你想通过命令行直接部署,可以直接下载release中的压缩包 ,请根据自己系统以及架构选择合适的压缩包,下载之后直接解压运行。
下载之后,在本地解压,即可看到可执行程序,与配置文件:
$ tar xf chatgpt-dingtalk-v0.0.4-darwin-arm64.tar.gz
$ cd chatgpt-dingtalk-v0.0.4-darwin-arm64
$ cp config.example.yml config.yml
$ ./chatgpt-dingtalk
$ nohup ./chatgpt-dingtalk &> run.log &
$ tail -f run.log
第二步,添加应用
钉钉官方在2023年5月份全面推出了stream模式,因此这里也推荐大家直接使用这个模式,其他HTTP的仍旧支持,只不过不再深入研究,因此下边的文档也以stream模式的配置流程来介绍。
创建步骤参考文档:企业内部应用,或者根据如下步骤进行配置。
-
创建应用。
🖼 点我查看示例图
📢 注意:
可能现在创建机器人的时候名字为chatgpt
会被钉钉限制,请用其他名字命名。
在基础信息
--> 应用信息
当中能够获取到机器人的AppKey
和AppSecret
。
-
配置机器人。
🖼 点我查看示例图
-
发布机器人。
🖼 点我查看示例图
点击版本管理与发布
,然后点击上线
,这个时候就能在钉钉的群里中添加这个机器人了。
-
群聊添加机器人。
🖼 点我查看示例图
亮点特色
与机器人私聊
2023-03-08
补充,我发现也可以不在群里艾特机器人聊天,还可点击机器人,然后点击发消息,通过与机器人直接对话进行聊天:
由 @Raytow 同学发现,在机器人自动生成的测试群里无法直接私聊机器人,在其他群里单独添加这个机器人,然后再点击就可以跟它私聊了。
🖼 点我查看示例图
帮助列表
艾特机器人发送空内容或者帮助,会返回帮助列表。
🖼 点我查看示例图
切换模式
发送指定关键字,可以切换不同的模式。
🖼 点我查看示例图
📢 注意:串聊模式下,群里每个人的聊天上下文是独立的。
📢 注意:默认对话模式为单聊,因此不必发送单聊即可进入单聊模式,而要进入串聊,则需要发送串聊关键字进行切换,当串聊内容超过最大限制的时候,你可以发送重置,然后再次进入串聊模式。
查询余额
艾特机器人发送 余额
二字,会返回当前key对应的账号的剩余额度以及可用日期。
🖼 点我查看示例图
日常问题
🖼 点我查看示例图
通过内置prompt聊天
发送模板两个字,会返回当前内置支持的prompt列表。
🖼 点我查看示例图
如果你发现有比较优秀的prompt,欢迎PR。注意:一些与钉钉使用场景不是很匹配的,就不要提交了。
生成图片
发送以 #图片
开头的内容,将会触发绘画能力,图片生成之后,将会保存在程序根目录下的images目录
下。
如果你绘图没有思路,可以在这里以及这里找到一些不错的prompt。
🖼 点我查看示例图
支持 gpt-4
如果你的账号通过了官方的白名单,那么可以将模型配置为:gpt-4-0314
或gpt-4
,目前gpt-4的余额查询以及图片生成功能暂不可用,可能是接口限制,也可能是其他原因,等我有条件的时候,会对这些功能进行测试验证。
以下是gpt-3.5与gpt-4对数学计算方面的区别。
🖼 点我查看示例图
感谢@PIRANHACHAN同学提供的gpt-4的key,使得项目在gpt-4的对接上能够进行验证测试,达到了可用状态。
本地开发
$ git clone https://github.com/eryajf/chatgpt-dingtalk.git
$ cd chatgpt-dingtalk
$ cp config.example.yml config.yml
$ go run main.go
配置文件说明
log_level: "info"
run_mode: "stream"
api_key: "xxxxxxxxx"
base_url: ""
model: "gpt-3.5-turbo"
session_timeout: 600
max_question_len: 2048
max_answer_len: 2048
max_text: 4096
http_proxy: ""
default_mode: "单聊"
max_request: 0
port: "8090"
service_url: "http://xxxxxx"
chat_type: "0"
allow_groups: []
allow_outgoing_groups: []
allow_users: []
deny_users: []
vip_users: []
admin_users: []
app_secrets: []
sensitive_words: []
help: "### 发送信息\n\n若您想给机器人发送信息,有如下两种方式:\n\n1. **群聊:** 在机器人所在群里 **@机器人** 后边跟着要提问的内容。\n\n2. **私聊:** 点击机器人的 **头像** 后,再点击 **发消息。** \n\n### 系统指令\n\n系统指令是一些特殊的词语,当您向机器人发送这些词语时,会触发对应的功能。\n\n**📢 注意:系统指令,即只发指令,没有特殊标识,也没有内容。**\n\n以下是系统指令详情:\n\n| 指令 | 描述 | 示例 |\n| :--------: | :------------------------------------------: | :----------------------------------------------------------: |\n| **单聊** | 每次对话都是一次新的对话,没有聊天上下文联系 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193608.jpg'><br /></details> |\n| **串聊** | 带上下文联系的对话模式 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193608.jpg'><br /></details> |\n| **重置** | 重置上下文模式,回归到默认模式 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193608.jpg'><br /></details> |\n| **余额** | 查询机器人所用OpenAI账号的余额 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230304_222522.jpg'><br /></details> |\n| **模板** | 查看应用内置的prompt模板 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193827.jpg'><br /></details> |\n| **图片** | 查看如何根据提示生成图片 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_194125.jpg'><br /></details> |\n| **查对话** | 获取指定人员的对话历史 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_193938.jpg'><br /></details> |\n| **帮助** | 获取帮助信息 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_202336.jpg'><br /></details> |\n\n\n### 功能指令\n\n除去系统指令,还有一些功能指令,功能指令是直接与应用交互,达到交互目的的一种指令。\n\n**📢 注意:功能指令,一律以 #+关键字 为开头,通常需要在关键字后边加个空格,然后再写描述或参数。**\n\n以下是功能指令详情\n\n| 指令 | 说明 | 示例 |\n| :--: | :--: | :--: |\n| **#图片** | 根据提示咒语生成对应图片 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230323_150547.jpg'><br /></details> |\n| **#域名** | 查询域名相关信息 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_202620.jpg'><br /></details> |\n| **#证书** | 查询域名证书相关信息 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_202706.jpg'><br /></details> |\n| **#Linux命令** | 根据自然语言描述生成对应命令 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_214947.jpg'><br /></details> |\n| **#解释代码** | 分析一段代码的功能或含义 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_215242.jpg'><br /></details> |\n| **#正则** | 根据自然语言描述生成正则 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_220222.jpg'><br /></details> |\n| **#周报** | 应用周报的prompt | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_214335.jpg'><br /></details> |\n| **#生成sql** | 根据自然语言描述生成sql语句 | <details><br /><summary>预览</summary><br /><img src='https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230404_221325.jpg'><br /></details> |\n\n如上大多数能力,都是依赖prompt模板实现,如果你有更好的prompt,欢迎提交PR。\n\n### 友情提示\n\n使用 **串聊模式** 会显著加快机器人所用账号的余额消耗速度,因此,若无保留上下文的需求,建议使用 **单聊模式。** \n\n即使有保留上下文的需求,也应适时使用 **重置** 指令来重置上下文。\n\n### 项目地址\n\n本项目已在GitHub开源,[查看源代码](https://github.com/eryajf/chatgpt-dingtalk)。"
azure_on: false
azure_resource_name: "eryajf"
azure_deployment_name: "gpt-35-turbo"
azure_api_version: "2023-03-15-preview"
azure_openai_token: "xxxxxxx"
credentials:
-
client_id: "put-your-client-id-here"
client_secret: "put-your-client-secret-here"
常见问题
如何更好地使用ChatGPT:这里有许多案例可供参考。
🗣 重要重要
一些常见的问题,我单独开issue放在这里:👉点我👈,可以查看这里辅助你解决问题,如果里边没有,请对历史issue进行搜索(不要提交重复的issue),也欢迎大家补充。
进群交流
我创建了一个钉钉的交流群,欢迎进群交流。
感谢
这个项目能够成立,离不开这些开源项目:
赞赏
如果觉得这个项目对你有帮助,你可以请作者喝杯咖啡 ☕️
高光时刻
本项目曾在 | 2022-12-12 | 2022-12-18 | 2022-12-19 | 2022-12-20 | 2023-02-09 | 2023-02-10 | 2023-02-11 | 2023-02-12 | 2023-02-13 | 2023-02-14 | 2023-02-15 | 2023-03-04 | 2023-03-05 | 2023-03-19 | 2023-03-22 | 2023-03-25 | 2023-03-26 | 2023-03-27 | 2023-03-29, 这些天里,登上GitHub Trending。而且还在持续登榜中,可见最近openai的热度。
Star历史
贡献者列表