github-actions[bot] 9b6ff6d898 🫶 更新贡献者列表 | преди 1 година | |
---|---|---|
.github | преди 1 година | |
config | преди 1 година | |
docs | преди 1 година | |
pkg | преди 1 година | |
public | преди 1 година | |
.gitignore | преди 1 година | |
.pre-commit-config.yaml | преди 1 година | |
CONTRIBUTING.md | преди 1 година | |
Dockerfile | преди 1 година | |
LICENSE | преди 1 година | |
Makefile | преди 1 година | |
README.md | преди 1 година | |
config.example.yml | преди 1 година | |
docker-compose.yml | преди 1 година | |
go.mod | преди 1 година | |
go.sum | преди 1 година | |
main.go | преди 1 година | |
prompt.yml | преди 1 година |
<summary> 📷 点击展开企联AI完整功能</summary>
<br>
<p align='center'>
<img src='https://github.com/ConnectAI-E/Feishu-OpenAI/assets/50035229/8a589e42-c092-4878-83c3-dc12a801c2d6' alt='语音对话' width='800'/>
<img src='https://github.com/ConnectAI-E/Feishu-OpenAI/assets/50035229/7178f68e-2e97-46a6-b692-a2c43191b45b' alt='文字成图' width='800'/>
<img src='https://github.com/ConnectAI-E/Feishu-OpenAI/assets/50035229/92712155-eb0c-4dce-a005-c05a21dd8280' alt='文字成图' width='800'/>
<img src='https://github.com/ConnectAI-E/Feishu-OpenAI/assets/50035229/25cf595f-eaaf-4a52-8066-02afdc9fcdad' alt='余额查询' width='800'/>
<img src='https://github.com/ConnectAI-E/Feishu-OpenAI/assets/50035229/9ce7b941-2806-484c-94dc-0abc8e735a7f' alt='帮助菜单' width='800'/>
<img src='https://github.com/ConnectAI-E/Feishu-OpenAI/assets/50035229/d5128f44-53cc-4a49-9fd1-573bbb1fddff' alt='帮助菜单' width='800'/>
<img src='https://github.com/ConnectAI-E/Feishu-OpenAI/assets/50035229/43b52857-bde9-4c56-8cf1-bdafe31d4aaa' alt='帮助菜单' width='800'/>
</p>
钉钉 ×(GPT-3.5 + DALL·E + Whisper)
🚀 DingDing OpenAI 🚀
😀企联AI共创计划正式开启😀
https://fork-way.feishu.cn/docx/Gvztd1iVXoXOsVxF2ujcnPPenDf
如果开源版无法满足您公司的需求,推荐您尝试的商业共创版
查看更多内容: https://connect-ai.forkway.cn
企业客户咨询:13995928702(River)
🌉 基于GO语言实现的钉钉集成ChatGPT机器人 🌉
如果开源版无法满足您公司的需求,推荐您尝试目前正在内测的商业交付版本
查看更多内容: https://connect-ai.forkway.cn
大家好呀!我是feishu-OpenAI的作者River。非常兴奋地欢迎大家加入我们的Connect-AI开源马拉松活动!
AIGC的热潮正在各行各业掀起巨大的变革,我们看到各大社群以”知识xx“为代表的”割韭菜“行为,不禁感到无奈。身为互联网行业的从业者,与其指点江山激扬文字,不如参与其中,感受发展。为此我们成立了下面10个课题组,并从技术可行性的基础上进行了调研,现并欢迎大家自由选择组队并加入相关的项目推进群。
无论您是设计师、前端工程师、后端工程师、算法工程师还是测试小伙伴,只要您对GPT技术充满热情,就可以参与到我们的开源项目中来。设计师们可以参与多个repo,优化项目的交互体验和设计风格;前端工程师可以参与每个项目的UI搭建;后端和算法工程师们则可以积极学习AI能力的使用。我们还诚邀测试小伙伴参与每次发版前的功能内测。
每个项目都需要招募一个项目负责人,我们会将其指定为repo的owner。如果您愿意深度参与,可以找我报名成为负责人。当然,如果项目表上有队长名称,则代表已经招募完成。其他同学可以在业余时间参与一个或多个项目。
我们的目标是为AI开源社区提供一个可持续性的生态系统,并且鼓励更多的人参与其中,共同推进AI技术的发展。后续遇到企业的定制AI开发需求,我们会优先邀请相关课题的同学参与,这样既可以帮助他们获取不错的收入,也符合开源的精神和原则。我们希望通过这样的方式,让我们的开源项目更有可持续性,让更多人愿意加入我们,共同推进AI技术的发展!
预期奖励内容包括:
做出下面奖励安排
我们队员有
如果您对Connect-AI开源马拉松感兴趣,请随时加入项目推进群,一起为AI技术的未来贡献力量!
目录
本项目可以助你将GPT机器人集成到钉钉群聊当中。当前默认模型为gpt-3.5
,支持gpt-4
。
🥳 欢迎关注我的其他开源项目:
- Go-Ldap-Admin:🌉 基于Go+Vue实现的openLDAP后台管理项目。
- learning-weekly:📝 周刊内容以运维技术和Go语言周边为主,辅以GitHub上优秀项目或他人优秀经验。
- HowToStartOpenSource:🌈 GitHub开源项目维护协同指南。
- read-list:📖 优质内容订阅,阅读方为根本
- awesome-github-profile-readme-chinese:🦩 优秀的中文区个人主页搜集
🚜 我还创建了一个项目 awesome-chatgpt-answer :记录那些问得好,答得妙的时刻,欢迎提交你与ChatGPT交互过程中遇到的那些精妙对话。
⚗️ openai官方提供了一个 状态页 来呈现当前openAI服务的状态,同时如果有问题发布公告也会在这个页面,如果你感觉它有问题了,可以在这个页面看看。
帮助
将看到帮助列表,🖼 查看示例#图片
关键字开头的内容进行生成图片,🖼 查看示例#周报
的方式触发内置prompt模板 🖼 查看示例余额
关键字查询当前key所剩额度,🖼 查看示例#查对话 username:xxx
查询xxx的对话历史,可在线预览,可下载到本地推荐你使用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 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 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 dockerproxy.com/eryajf/chatgpt-dingtalk:latest
运行命令中映射的配置文件参考下边的配置文件说明。
📢 注意:
如果使用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 dockerproxy.com/eryajf/chatgpt-dingtalk:latest
其中配置文件参考下边的配置文件说明。
第三种:使用 docker compose 运行
$ wget https://raw.githubusercontent.com/eryajf/chatgpt-dingtalk/main/docker-compose.yml
$ vim docker-compose.yml # 编辑 APIKEY 等信息
$ docker compose up -d
部署完成之后,通过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代理步骤是个可选步骤,你也可以直接通过服务器外网IP:PORT作为回调地址。
Nginx配置完毕之后,可以先手动请求一下,通过服务日志输出判断服务是否正常可用:
$ curl -s 'http://chat.eryajf.net/'
{
"msg": "欢迎使用钉钉机器人",
"status": "ok"
}
如果手动请求没有问题,那么就可以在钉钉群里与机器人进行对话了。
如果你想通过命令行直接部署,可以直接下载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 # 然后根据情况调整配置文件内容,宿主机如遇端口冲突,可通过调整config.yml中的port参数自定义服务端口
$ ./chatgpt-dingtalk # 直接运行
# 如果要守护在后台运行
$ nohup ./chatgpt-dingtalk &> run.log &
$ tail -f run.log
钉钉群内的机器人有一个outgoing模式,当你创建机器人的时候,可以选择启用这个模式,然后直接配置回调地址,免去在管理后台创建应用的步骤,就可以直接投入使用。
官方文档:自定义机器人接入
但是这个模式貌似是部分开放的(目前来看貌似是部分人有创建这个类型的白名单),所以如果你在钉钉群聊中添加自定义机器人
的时候,看到和我一样的信息,则说明无法使用这种方式:
<summary>🖼 点我查看示例图</summary>
<img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230325_162017.jpg">
📢 注意
创建步骤参考文档:企业内部开发机器人,或者根据如下步骤进行配置。
📢 注意1:
可能现在创建机器人的时候名字为chatgpt
会被钉钉限制,请用其他名字命名。
📢 注意2:
第四步骤点击创建应用的时候,务必选择使用旧版,从而创建旧版机器人,如果选择新版,则机器人的功能集成在了应用当中的消息推送模块儿。
步骤比较简单,这里就不赘述了。
创建完毕之后,点击机器人开发管理,然后配置将要部署的服务所在服务器的出口IP,以及将要给服务配置的域名。
📢 注意:
添加消息接收地址的时候,务必确保服务在正常运行且可通过回调地址访问,否则保存时将会失败。
📢 如果提示:
消息接收地址校验失败(请确保公网可访问该地址,如无有效SSL证书,可选择禁用证书校验),那么可以先输入一个https://
,然后就能看到禁用https
的选项了,选择禁用,然后再把地址改成http
就好了。
点击版本管理与发布,然后点击上线,这个时候就能在钉钉的群里中添加这个机器人了。
2023-03-08
补充,我发现也可以不在群里艾特机器人聊天,还可点击机器人,然后点击发消息,通过与机器人直接对话进行聊天:
由 @Raytow 同学发现,在机器人自动生成的测试群里无法直接私聊机器人,在其他群里单独添加这个机器人,然后再点击就可以跟它私聊了。
<summary>🖼 点我查看示例图</summary>
<img src="https://user-images.githubusercontent.com/33259379/223607306-2ac836a2-7ce5-4a12-a16e-bec40b22d8d6.png">
艾特机器人发送空内容或者帮助,会返回帮助列表。
<summary>🖼 点我查看示例图</summary>
<img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230216_221253.png">
发送指定关键字,可以切换不同的模式。
<summary>🖼 点我查看示例图</summary>
<img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230215_184655.png">
📢 注意:串聊模式下,群里每个人的聊天上下文是独立的。 📢 注意:默认对话模式为单聊,因此不必发送单聊即可进入单聊模式,而要进入串聊,则需要发送串聊关键字进行切换,当串聊内容超过最大限制的时候,你可以发送重置,然后再次进入串聊模式。
艾特机器人发送
余额
二字,会返回当前key对应的账号的剩余额度以及可用日期。
<summary>🖼 点我查看示例图</summary>
<img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230304_222522.jpg">
<summary>🖼 点我查看示例图</summary>
<img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20221209_163739.png">
发送模板两个字,会返回当前内置支持的prompt列表。
<summary>🖼 点我查看示例图</summary>
<img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230323_152703.jpg">
如果你发现有比较优秀的prompt,欢迎PR。注意:一些与钉钉使用场景不是很匹配的,就不要提交了。
发送以
#图片
开头的内容,将会触发绘画能力,图片生成之后,将会保存在程序根目录下的images目录
下。
<summary>🖼 点我查看示例图</summary>
<img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230323_150547.jpg">
如果你的账号通过了官方的白名单,那么可以将模型配置为:gpt-4-0314
或gpt-4
,目前gpt-4的余额查询以及图片生成功能暂不可用,可能是接口限制,也可能是其他原因,等我有条件的时候,会对这些功能进行测试验证。
以下是gpt-3.5与gpt-4对数学计算方面的区别。
<summary>🖼 点我查看示例图</summary>
<img src="https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230330_180308.jpg">
感谢@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"
# openai api_key
api_key: "xxxxxxxxx"
# 如果你使用官方的接口地址 https://api.openai.com,则留空即可,如果你想指定请求url的地址,可通过这个参数进行配置,注意需要带上 http 协议
base_url: ""
# 指定模型,默认为 gpt-3.5-turbo , 可选参数有: "gpt-4-0314", "gpt-4", "gpt-3.5-turbo-0301", "gpt-3.5-turbo",如果使用gpt-4,请确认自己是否有接口调用白名单
model: "gpt-3.5-turbo"
# 会话超时时间,默认600秒,在会话时间内所有发送给机器人的信息会作为上下文
session_timeout: 600
# 指定请求时使用的代理,如果为空,则不使用代理,注意需要带上 http 协议 或 socks5 协议
http_proxy: ""
# 指定默认的对话模式,可根据实际需求进行自定义,如果不设置,默认为单聊,即无上下文关联的对话模式
default_mode: "单聊"
# 单人单日请求次数上限,默认为0,即不限制
max_request: 0
# 指定服务启动端口,默认为 8090,一般在二进制宿主机部署时,遇到端口冲突时使用
port: "8090"
# 指定服务的地址,就是当前服务可供外网访问的地址(或者直接理解为你配置在钉钉回调那里的地址),用于生成图片时给钉钉做渲染
service_url: "http://chat.eryajf.net"
# 限定对话类型 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: ["disabled"]
# 以下 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你可以查看:[用户指南](https://github.com/eryajf/chatgpt-dingtalk/blob/main/docs/userGuide.md)\n\n这是一个[开源项目](https://github.com/eryajf/chatgpt-dingtalk/),觉得不错你可以来波素质三连."
# Azure OpenAI 配置
# 例如 curl https://forkway-test.openai.azure.com/openai/deployments/test-dev/chat/completions\?api-version\=2023-03-15-preview \
# azure_api_version: "2023-03-15-preview"
# azure_resource_name: "forkway-test"
# azure_deployment_name: "test-dev"
azure_on: false # 如果是true,则会走azure的openai接口
azure_api_version: "2023-03-15-preview"
azure_resource_name: "xxxx"
azure_deployment_name: "xxxx"
azure_openai_token: "xxxx"
# 钉钉应用鉴权凭据信息,支持多个应用。通过请求时候鉴权来识别是来自哪个机器人应用的消息
# 设置credentials 之后,即具备了访问钉钉平台绝大部分 OpenAPI 的能力;例如上传图片到钉钉平台,提升图片体验,结合 Stream 模式简化服务部署
# client_id 对应钉钉平台 AppKey/SuiteKey;client_secret 对应 AppSecret/SuiteSecret
# 建议采用 credentials 代替 app_secrets 配置项,以获得钉钉 OpenAPI 访问能力
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的热度。