Skip to content

RyanLookchard/chatgpt-dingtalk

 
 

Repository files navigation

ChatGPT Dingtalk

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

🌉 在钉钉群聊中添加ChatGPT机器人 🌉


前言

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

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

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

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

功能简介

  • 支持在钉钉群聊中添加机器人,通过@机器人进行聊天交互。
  • 提问支持单聊与串聊两种模式,通过@机器人发关键字切换。
  • 支持添加代理,通过配置化指定。
  • 支持自定义api域名,通过配置化指定。
  • 支持自定义指定的模型,通过配置化指定。
  • 支持自定义默认的聊天模式,通过配置化指定。
  • 支持自定义单个用户单日对话次数,通过配置化指定。
  • 支持通过内置prompt进行对话。欢迎提交你认为不错的prompt,请通过编辑此文件来提交PR。

使用前提

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

使用教程

第一步,先创建机器人

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

  1. 创建机器人。 image_20221209_163616

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

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

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

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

  3. 发布机器人。 image_20221209_163709

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

  4. 群聊添加机器人。

    image_20221209_163724

第二步,部署应用

你可以使用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 --restart=always  dockerproxy.com/eryajf/chatgpt-dingtalk:latest

📢 注意:如果使用docker部署,那么proxy地址可以直接使用如上方式部署,host.docker.internal会指向容器所在宿主机的IP,只需要更改端口为你的代理端口即可。参见:Docker容器如何优雅地访问宿主机网络

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

第二种:基于配置文件挂载运行

# 复制配置文件,根据自己实际情况,调整配置里的内容
$ 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

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

第三种:使用 docker compose 运行

$ wget https://raw.githubusercontent.com/eryajf/chatgpt-dingtalk/main/docker-compose.yml

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

$ docker compose up -d

注意,不论通过上边哪种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;
    }
}

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

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"
}'

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

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

image

帮助列表

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

image_20230216_221253

切换模式

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

image_20230215_184655

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

查询余额

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

image_20230304_222522

实际聊天效果如下

image_20221209_163739

通过内置prompt聊天

image_20230318_093225

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


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

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

$ 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 # 然后根据情况调整配置文件内容
$ ./chatgpt-dingtalk  # 直接运行

# 如果要守护在后台运行
$ nohup ./chatgpt-dingtalk &> run.log &
$ tail -f run.log

本地开发

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

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

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

# 启动项目
$ go run main.go

配置文件说明

{
    "api_key": "xxxxxxxxx",   // openai api_key
    "base_url": "api.openai.com", //  如果你想指定请求url的地址,可通过这个参数进行配置,默认为官方地址,不需要再添加 /v1
    "model": "gpt-3.5-turbo", // 指定模型,默认为 gpt-3.5-turbo , 可选参数有: "gpt-4-32k-0314", "gpt-4-32k", "gpt-4-0314", "gpt-4", "gpt-3.5-turbo-0301", "gpt-3.5-turbo", "text-davinci-003", "text-davinci-002", "text-curie-001", "text-babbage-001", "text-ada-001", "text-davinci-001", "davinci-instruct-beta", "davinci", "curie-instruct-beta", "curie", "ada", "babbage"
    "session_timeout": 600,   // 会话超时时间,默认600秒,在会话时间内所有发送给机器人的信息会作为上下文
    "http_proxy": "",         // 指定请求时使用的代理,如果为空,则不使用代理
    "default_mode": "单聊",    // 默认对话模式,可根据实际场景自定义,如果不设置,默认为单聊
    "max_request": 0    // 单人单日请求次数限制,默认为0,即不限制
}

常见问题

如何更好地使用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, 这些天里,登上GitHub Trending。而且还在持续登榜中,可见最近openai的热度。 image_20230316_114915

赞赏

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

About

ChatGPT机器人在钉钉群聊中交互

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 97.3%
  • Dockerfile 1.6%
  • Makefile 1.1%