Git Product home page Git Product logo

eryajf / chatgpt-dingtalk Goto Github PK

View Code? Open in Web Editor NEW
2.1K 23.0 390.0 569 KB

🎒 钉钉 & 🤖 GPT-3.5 让你的工作效率直接起飞 🚀 私聊群聊方式、单聊串聊模式、角色扮演、图片创作 🚀

Home Page: https://wiki.eryajf.net

License: MIT License

Dockerfile 0.59% Go 98.60% Makefile 0.48% Shell 0.32%
chatgpt chatgpt-api dingtalk dingtalk-robot openai go-gpt connect-ai go golang

chatgpt-dingtalk's Introduction


🚀 ChatGPT DingTalk 🚀

🌉 基于GO语言实现的钉钉集成ChatGPT机器人 🌉

Auth Go Version GitHub Pull Requests GitHub Pull Requests HitCount Docker Image Size (latest by date) Docker Pulls GitHub license



目录

前言

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

  • 📢 注意:当下部署以及配置流程都已非常成熟,文档和 issue 中基本都覆盖到了,因此不再回答任何项目安装部署与配置使用上的问题,如果完全不懂,可考虑通过 邮箱 联系我进行付费的技术支持。

  • 📢 注意:这个项目所有的功能,都汇聚在使用指南中,请务必仔细阅读,以体验其完整精髓。

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

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

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

赞助商

302.AI 是一个汇集全球顶级AI的自助平台,按需付费,零月费,零门槛使用各种类型AI。

  • 点击注册: 立即获得 1PTC(1PTC=1美金,约为7人民币)代币。
  • 功能全面: 将最好用的AI集成到在平台之上,包括不限于AI聊天,图片生成,图片处理,视频生成,全方位覆盖。
  • 简单易用: 提供机器人,工具和API多种使用方法,可以满足从小白到开发者多种角色的需求。
  • 按需付费,零门槛: 不提供月付套餐,对产品不设任何门槛,按需付费,全部开放。充值余额永久有效。
  • 管理者和使用者分离:管理者一键分享,使用者无需登录。使用者无需关心复杂的AI设置,让懂AI的人来配置,简化使用流程。

功能介绍

  • 🚀 帮助菜单:通过发送 帮助 将看到帮助列表,🖼 查看示例
  • 🥷 私聊:支持与机器人单独私聊(无需艾特),🖼 查看示例
  • 💬 群聊:支持在群里艾特机器人进行对话
  • 🙋 单聊模式:每次对话都是一次新的对话,没有历史聊天上下文联系
  • 🗣 串聊模式:带上下文理解的对话模式
  • 🎨 图片生成:通过发送 #图片关键字开头的内容进行生成图片,🖼 查看示例
  • 🎭 角色扮演:支持场景模式,通过 #周报 的方式触发内置 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/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/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 模式的配置流程来介绍。

创建步骤参考文档:企业内部应用,或者根据如下步骤进行配置。

  1. 创建应用。

    🖼 点我查看示例图

    📢 注意:可能现在创建机器人的时候名字为chatgpt会被钉钉限制,请用其他名字命名。

    基础信息 --> 应用信息当中能够获取到机器人的AppKeyAppSecret

  2. 配置机器人。

🖼 点我查看示例图
  1. 发布机器人。

    🖼 点我查看示例图

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

  2. 群聊添加机器人。

🖼 点我查看示例图

亮点特色

与机器人私聊

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

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

🖼 点我查看示例图

帮助列表

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

🖼 点我查看示例图

切换模式

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

🖼 点我查看示例图

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

查询余额

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

🖼 点我查看示例图

日常问题

🖼 点我查看示例图

通过内置 prompt 聊天

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

🖼 点我查看示例图

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

生成图片

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

如果你绘图没有思路,可以在这里以及这里找到一些不错的 prompt。

🖼 点我查看示例图

支持 gpt-4

如果你的账号通过了官方的白名单,那么可以将模型配置为:gpt-4-0314gpt-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

配置文件说明

# 应用的日志级别,info or debug
log_level: "info"
# 运行模式,http 或者 stream ,强烈建议你使用stream模式,通过此链接了解:https://open.dingtalk.com/document/isvapp/stream
run_mode: "stream"
# openai api_key,如果你是用的是azure,则该配置项可以留空或者直接忽略
api_key: "xxxxxxxxx"
# 如果你使用官方的接口地址 https://api.openai.com,则留空即可,如果你想指定请求url的地址,可通过这个参数进行配置,注意需要带上 http 协议,如果你是用的是azure,则该配置项可以留空或者直接忽略
base_url: ""
# 指定模型,默认为 gpt-3.5-turbo , 可选参数有: "gpt-4-32k-0613", "gpt-4-32k-0314", "gpt-4-32k", "gpt-4-0613", "gpt-4-0314", "gpt-4", "gpt-3.5-turbo-16k-0613", "gpt-3.5-turbo-16k", "gpt-3.5-turbo-0613", "gpt-3.5-turbo-0301", "gpt-3.5-turbo",如果使用gpt-4,请确认自己是否有接口调用白名单,如果你是用的是azure,则该配置项可以留空或者直接忽略
model: "gpt-3.5-turbo"
# 指定绘画模型,默认为 dall-e-2 , 可选参数有:"dall-e-2", "dall-e-3"
image_model: "dall-e-2"
# 会话超时时间,默认600秒,在会话时间内所有发送给机器人的信息会作为上下文
session_timeout: 600
# 最大问题长度
max_question_len: 2048
# 最大回答长度
max_answer_len: 2048
# 最大上下文文本长度,通常该参数可设置为与模型Token限制相同
max_text: 4096
# 指定请求时使用的代理,如果为空,则不使用代理,注意需要带上 http 协议 或 socks5 协议,如果你是用的是azure,则该配置项可以留空或者直接忽略
http_proxy: ""
# 指定默认的对话模式,可根据实际需求进行自定义,如果不设置,默认为单聊,即无上下文关联的对话模式
default_mode: "单聊"
# 单人单日请求次数上限,默认为0,即不限制
max_request: 0
# 指定服务启动端口,默认为 8090,一般在二进制宿主机部署时,遇到端口冲突时使用,如果run_mode为stream模式,则可以忽略该配置项
port: "8090"
# 指定服务的地址,就是当前服务可供外网访问的地址(或者直接理解为你配置在钉钉回调那里的地址),用于生成图片时给钉钉做渲染,最新版本中将图片上传到了钉钉服务器,理论上你可以忽略该配置项,如果run_mode为stream模式,则可以忽略该配置项
service_url: "http://xxxxxx"
# 限定对话类型 0:不限 1:只能单聊 2:只能群聊
chat_type: "0"
# 哪些群组可以进行对话(仅在chat_type为0、2时有效),如果留空,则表示允许所有群组,如果要限制,则列表中写群ID(ConversationID)
# 群ID,可在群组中 @机器人 群ID 来查看日志获取,例如日志会输出:[🙋 企业内部机器人 在『测试』群的ConversationID为: "cidrabcdefgh1234567890AAAAA"],获取后可填写该参数并重启程序
allow_groups: []
# 哪些普通群(使用outgoing机器人)可以进行对话,如果留空,则表示允许所有群组,如果要限制,则列表中写群ID(ConversationID)
# 群ID,可在群组中 @机器人 群ID 来查看日志获取,例如日志会输出:[🙋 outgoing机器人 在『测试』群的ConversationID为: "cidrabcdefgh1234567890AAAAA"],获取后可填写该参数并重启程序
# 如果不想支持outgoing机器人功能,这里可以随意设置一个内部群组,例如:cidrabcdefgh1234567890AAAAA;或随意一个字符串,例如:disabled
# 建议该功能默认关闭:除非你必须要用到outgoing机器人
allow_outgoing_groups: []
# 以下 allow_users、deny_users、vip_users、admin_users 配置中填写的是用户的userid,outgoing机器人模式下不适用这些配置
# 比如 ["1301691029702722","1301691029702733"],这个信息需要在钉钉管理后台的通讯录当中获取:https://oa.dingtalk.com/contacts.htm#/contacts
# 哪些用户可以进行对话,如果留空,则表示允许所有用户,如果要限制,则列表中写用户的userid
allow_users: []
# 哪些用户不可以进行对话,如果留空,则表示允许所有用户(如allow_user有配置,需满足相应条件),如果要限制,则列表中写用户的userid,黑名单优先级高于白名单
deny_users: []
# 哪些用户可以进行无限对话,如果留空,则表示只允许管理员(如max_request配置为0,则允许所有人)
# 如果要针对指定VIP用户放开限制(如max_request配置不为0),则列表中写用户的userid
vip_users: []
# 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则列表中写用户的userid
# 注意:如果下边的app_secrets为空,以及使用outgoing的方式配置机器人,这两种情况下,都表示没有人是管理员
admin_users: []
# 钉钉机器人在应用信息中的AppSecret,为了校验回调的请求是否合法,如果留空,将会忽略校验,则该接口将会存在其他人也能随意调用的安全隐患,因此强烈建议配置正确的secret,如果你的服务对接给多个机器人,这里可以配置多个机器人的secret
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.jsdelivr.net/gh/eryajf/tu/img/image_20230404_193608.jpg'><br /></details> |\n|  **串聊**  |            带上下文联系的对话模式            | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_193608.jpg'><br /></details> |\n|  **重置**  |        重置上下文模式,回归到默认模式        | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_193608.jpg'><br /></details> |\n|  **余额**  |        查询机器人所用OpenAI账号的余额        | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230304_222522.jpg'><br /></details> |\n|  **模板**  |           查看应用内置的prompt模板           | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_193827.jpg'><br /></details> |\n|  **图片**  |           查看如何根据提示生成图片           | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_194125.jpg'><br /></details> |\n| **查对话** |            获取指定人员的对话历史            | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_193938.jpg'><br /></details> |\n|  **帮助**  |                 获取帮助信息                 | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/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.jsdelivr.net/gh/eryajf/tu/img/image_20230323_150547.jpg'><br /></details> |\n| **#域名**     | 查询域名相关信息     |  <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_202620.jpg'><br /></details>    |\n| **#证书**     | 查询域名证书相关信息     | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_202706.jpg'><br /></details>    |\n| **#Linux命令**     | 根据自然语言描述生成对应命令     | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_214947.jpg'><br /></details>    |\n| **#解释代码**     | 分析一段代码的功能或含义     | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_215242.jpg'><br /></details>    |\n| **#正则**     | 根据自然语言描述生成正则     | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_220222.jpg'><br /></details>    |\n| **#周报**     | 应用周报的prompt     | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/img/image_20230404_214335.jpg'><br /></details>    |\n| **#生成sql**     | 根据自然语言描述生成sql语句     | <details><br /><summary>预览</summary><br /><img src='https://cdn.jsdelivr.net/gh/eryajf/tu/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 OpenAI 配置
# 例如你的示例请求为: curl https://eryajf.openai.azure.com/openai/deployments/gpt-35-turbo/chat/completions?api-version=2023-03-15-preview 那么对应配置如下,如果配置完成之后还是无法正常使用,请新建应用,重新配置回调试试看
azure_on: false # 如果是true,则会走azure的openai接口
azure_resource_name: "eryajf" # 对应你的主个性域名
azure_deployment_name: "gpt-35-turbo" # 对应的是 /deployments/ 后边跟着的这个值
azure_api_version: "2023-03-15-preview" # 对应的是请求中的 api-version 后边的值
azure_openai_token: "xxxxxxx"

# 钉钉应用鉴权凭据信息,支持多个应用。通过请求时候鉴权来识别是来自哪个机器人应用的消息
# 设置credentials 之后,即具备了访问钉钉平台绝大部分 OpenAPI 的能力;例如上传图片到钉钉平台,提升图片体验,结合 Stream 模式简化服务部署
# client_id 对应钉钉平台 AppKey/SuiteKey;client_secret 对应 AppSecret/SuiteSecret
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 的热度。 image_20230316_114915

Star 历史

Star History Chart

贡献者列表

chatgpt-dingtalk's People

Contributors

aydenlii avatar chzealot avatar cnmill avatar ddmeaqua avatar eryajf avatar fantasticmao avatar ffinly avatar frankcheungdev avatar github-actions[bot] avatar iblogc avatar laorange avatar leizhenpeng avatar little-huang avatar luoxufeiyan avatar ronething avatar stoneflying avatar suyunkai avatar wangbooth avatar winmin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chatgpt-dingtalk's Issues

报错

[WARNING]2023/02/16 09:05:35 logger.go:33: send message error: %v
Post "": unsupported protocol scheme ""
[WARNING]2023/02/16 09:05:35 logger.go:33: process request failed: %v
Post "": unsupported protocol scheme ""

不知道啥问题

上下文的逻辑有些怪

每次都会把上次的提问和回复作为新的问题提交
这是符合预期的吗?

eg:
Q1:你好
A1:你好,很高兴认识你。
Q2:今天天气怎么样

Q2实际发送给openAI的请求是:"你好 你好,很高兴认识你。 今天天气怎么样"

🙋 常见问题速览

注意

📢 注意:当下部署以及配置流程都已非常成熟,文档和issue中基本都覆盖到了,因此不再回答任何项目安装部署与配置使用上的问题,如果完全不懂,可考虑通过邮箱联系我进行付费的技术支持。


经过大家的一些体验,现在积累了不少的常见问题,这里统一整理,让你更快地了解ChatGPT,以及这个项目。

此处的链接没有跳转效果,可仅当做目录。

关于如何升级

  • 因为这个项目没有什么其他依赖,因此升级非常简单,如果你是docker部署的,那么停掉服务,删除本地镜像,然后重新拉取镜像部署即可,同理,如果你是二进制运行,那就下载最新release的二进制,然后替换原来的二进制,然后启动服务即可。
  • 📢 注意:无论任何时候升级,你都应该看看最新的配置文件说明,如果有新的内容,我都会在这里进行更新。你也应该仔细阅读,并且正确配置,以确保完整地体验到新的功能特性。

关于钉钉后台添加回调地址时如何禁用https

钉钉开放平台在开发管理页面配置机器人消息接收地址时由于没有https ,报错: 消息接收地址校验失败(请确保公网可访问该地址,如无有效SSL证书,可选择禁用证书校验)请问在哪里禁用证书校验,或者跳过这个限制使用http地址。

关于这个问题,可以先输入一个https://,然后就能看到禁用https的选项了,选择禁用,然后再把地址改成http就好了。

📢 注意:配置这一步的时候,务必让服务是启动状态,否则保存时无法通过验证。

为什么图片无法正常显示?

如果服务器上图片有正常生成,那么原因一定是 service_url 的配置项没有正确配置,这项配置应该与钉钉管理后台配置的回调地址一样。

与机器人单独对话

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

image

@Raytow 同学发现,在机器人自动生成的测试群里无法私聊机器人,在其他群里单独添加这个机器人,就可以跟它私聊了.

通过内置prompt聊天

image_20230318_093225

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

钉钉群聊艾特机器人之后,没有回应,应用也没有任何输出

注意钉钉艾特群聊之后,会通过回调服务器的外网IP与域名把请求发过来,如果这个环节有问题,大概率是你的服务未暴漏出来让钉钉访问到。

一切配置完毕之后,群聊艾特机器人没有反应,看应用输出内容为:回调参数为空,以至于无法正常解析,请检查原因

可能是创建的机器人有问题,建议重新走一遍创建机器人的流程,创建一个新的机器人再试试。需要注意的是,机器人的名字尽量避开chatgpt等关键字,有人反馈可能官方会有限制 #42

为啥感觉这里聊天的不够只能,跟网页版的不一样

首先程序里用模型是3.0,网页版肯定代表官方最新的成果,因此会有差别。不过,每个参数都可能影响你得到不一样的聊天效果,改变一个参数你就可能得到另一种回答,所以请自己尝试去调试,不要上来就抱怨人工智障。文档中有二十多中参数示例,如AI聊天机器人 ,产品名称生成,python代码修复器等等等...

添加机器人回调地址之后,点击保存的时候报错 消息接收地址校验失败

这个问题我也遇到过,但并非稳定复现,时好时坏,所以目前给到的解决方案大概就是稍后再试下。

回调参数为空,以至于无法正常解析,请检查原因

出现这个问题,那就是钉钉回调没带任何内容,不必再重复提问。

最新版本代码接入的模型是 gpt-3.5 ,请不要再提不够智能之类的问题了

为这个问题我很困扰,特地问了一下gpt,看看她的解释:

image_20230302_151729

🙋 问题交流

问题反馈

docker报错如下:
[INFO]2023/02/18 08:48:40 logger.go:21: gpt request error: %v
error, status code: 401
[WARNING]2023/02/18 08:48:40 logger.go:33: get gpt result falied: %v

请问是什么原因

项目不更新了,都散了吧

项目不更新了,都散了吧项目不更新了,都散了吧项目不更新了,都散了吧项目不更新了,都散了吧项目不更新了,都散了吧

钉钉也挺逆天的

从wechat-chatgpt过来的,刚注册五分钟的账号啥也没发就被封了,蚌埠住了

一个关于上下文的问题

看日志和代码目前是拼接之前的问题和答案之后发过去 ,但是可能会超过字数限制,而且对于收费影响也较大。

不知道是否有别的方式 。

和机器人说话提示错误,您看看是docker没运行好么

45678900',
},
};
const requiredFields = {
payload: {
firstName: 'Example',
lastName: 'User',
email: '[email protected]',
password: 'TestPass12345678900',
},
};
const userData = {
firstName: 'Example',
lastName: 'User',
email: '[email protected]',
password: 'TestPass12345678900',
};
const spy = sinon.spy(validator, 'validate');
const spySchema = sinon.spy(userSchemas, 'registerSchema');
const spyUserModel = sinon.spy(userModel, 'createUser');
const spyHelper = sinon.spy(helper, 'getToken');
const spySendEmail = sinon.spy(mailer, 'sendVerificationEmail');
const spySendEmailFunction = sinon.spy(emailTemplate, 'sendVerificationEmail');
try {
await UserController.registerUser(req, res);
} catch (error) {
expect(error).to.be.an.instanceOf(Error);
}
expect(spy.calledOnce).to.be.true;
expect(spySchema.calledOnceWithExactly(requiredFields)).to.be.true;
expect(spyUserModel.calledOnceWithExactly(userData)).to.be.true;
expect(spyHelper.calledOnce).to.be.true;
expect(spySendEmail.calledOnce).to.be.true;
expect(spySendEmailFunction.calledOnce).to.be.true;
validator.validate.restore();
userSchemas.registerSchema.restore();
userModel.createUser.restore();
helper.getToken.restore();
mailer.sendVerificationEmail.restore();
emailTemplate.sendVerificationEmail.restore();
});

it('should throw an error if res.status is not 200', async () => {
const req = {

机器人太累了,让她休息会儿,过一会儿再来请求。

超过97个tokens的文本就会报错,看起来有4000个token是completion的,这个是什么地方的限制吗。
"error": {
"message": "This model's maximum context length is 4097 tokens, however you requested 4995 tokens (995 in your prompt; 4000 for the completion). Please reduce your prompt; or completion length.",
"type": "invalid_request_error",
"param": null,
"code": null
}

部署不成功

钉钉提示 : 消息接收地址校验失败(请确保公网可访问该地址,如无有效SSL证书,可选择禁用证书校验)

请问可以让机器人发图片么?

我现在让机器人给我生成一张图片
机器人会回复
(图片链接)
这几个字,连链接都看不到。。能不能让机器人把图片发出来?

部署项目碰到的几个问题,请教

一是答复格式和截取方式似乎有些问题,经常在答复开头有个“?”,并且增加一个换行。说请继续后,前几个字感觉之前还有内容,可能是截取掉了一些内容。我有截图,不知道如何上传。
二是看gpt-3的api是有性格描述的,是用Prompt给模型一个性格设定,这样可以帮助更好回答,因为我不太懂go语言,看看可不可以把这个参量加上,方便自行调整模型状态。
三是在windows上部署偶尔会见程序卡死,在命令行用ctrl+c才会推进,不知道是什么原因。

感谢帮助

docker部署升级后无与api交互的输出了

问题反馈

  • 搜索打开和关闭的 GitHub 问题,请勿重复提交issue。

重要:提交问题时,请务必带上输出日志,以及个人排查的成果。

原docker部署的0.0.8版本正常使用。近期看到版本有更新,下载0.1.1新的镜像部署后。
运行测试curl只有参数日志。 没有与openai的接口调用日志了。切换回低版本无问题,请问是哪里有变化了?
image

这个提示是不是正常的?

[INFO]2023/02/10 04:24:37 logger.go:21: gtp request error: %v Post "https://api.openai.com/v1/completions": dial tcp: lookup api.openai.com on 183.60.82.98:53: read udp 172.17.0.2:52575->183.60.82.98:53: i/o timeout

日志报 ssl证书过期

通过curl模拟钉钉推过来的消息测试连通性。
日志显示请求openai的api的ssl证书过期。实际官方证书确实没过期。

本地使用curl访问也提示过期。
尝试将openai的证书下载并添加到机器的 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem后
curl已经不提示过期。

但是在go中请求仍旧提示ssl证书过期。

没写过go,请问有办法忽略ssl证书吗?或者有什么地方能够配置?
image
image
image

非linux部署,下载zip包,可执行文件部署的两个问题

懒人使用可执行文件使用时的细节:
如果在使用下载对应zip包,非linux部署,进行chatgpt-dingtalk可执行文件的直接使用时,需更改如下:
1、目前使用可执行文件,会报错config.json不存在问题:
记得在下载zip包,解压之后,重新命名一下json文件为config.json即可。
2、在钉钉的开发平台中修改如下信息:
服务器出口IP
127.0.0.1
消息接收地址
http://chat.eryajf.net:8090/
目的是:请求的时候会请求到自己本机地址的服务器和对应端口

unmarshal request body failed: unexpected end of JSON input?

https://open.dingtalk.com/document/robots/enterprise-created-chatbot

{
    "conversationId": "xxx",
    "atUsers": [
        {
            "dingtalkId": "xxx",
            "staffId":"xxx"
        }
    ],
    "chatbotCorpId": "dinge8a565xxxx",
    "chatbotUserId": "$:LWCP_v1:$Cxxxxx",
    "msgId": "msg0xxxxx",
    "senderNick": "杨xx",
    "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"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.