Awesome
Feishu-EX-ChatGPT
Feishu-EX-ChatGPT 是让飞书接入一个拥有增强版本的 ChatGPT 功能。 通过集成各种插件,Feishu-EX-ChatGPT 可以让 ChatGPT 更好地与外部服务进行交互。插件可以轻松扩展,并通过注册机制来注册和激活。此外,Feishu-EX-ChatGPT 插件系统还支持第三方服务的扩展能力。⚡
功能 ✨
- 通过集成不同的插件来增强 ChatGPT 的外部能力。
- 插件可以进行随意扩展,并通过注册机制完成插件的注册与激活。
- 利用插件机制,实现对第三方服务的扩展能力。
一起贡献更多插件能力,增强 FeishuEx 扩展能力。github.com/agi-cn/llmplugin
- 正常提问,使用 ChatGPT 回答。
- 以
#
开头提问,使用插件进行回答。
工作流程 🌊
- 注册插件列表以获取扩展能力。📝
- 根据用户的提问,选择并激活相应的插件(可能是一个或多个)。🎯
- 等待获取所有插件的结果,并汇总所有结果。🔁
- 将汇总后的结果返回给用户。🔙
如何开始 🛠️
- 克隆此仓库到本地。
- 在项目中,根据需要创建自己的插件并实现相应的接口。
- 注册并激活插件。
- 开始使用 Feishu-EX-ChatGPT 与 ChatGPT 进行交互!🎉
现在开始使用 Feishu-EX-ChatGPT,让您的飞书接入的 ChatGPT 拥有的功能更强大吧!🚀
运行
支持本地运行,或者使用 fly.io 进行部署。
运行时,依赖环境变量支持,环境变量加载形式有:
- 设置系统环境变量
- 加载 .env 环境变量定义文件
具体环境变量参考:./dotenv.example
文件说明。
1. 本地运行
使用 .env 环境变量文件,
cp dotenv.example .env
go run ./cmd
2. 集成 Stable Diffusion 插件
2. 搜索插件支持
支持搜索引擎如下,
- agi.cn search 搜索插件 - 封装了 duckduckgo 搜索能力,且不需要额外申请 token,默认集成。
- 支持 Google Search 插件能力(需要申请 Google Search Engine Token)。
没有配置 Google Search 的环境变量,则默认启动 duckduckgo 搜索。
2. 飞书提问
- 没有支持 Plugin 时,效果如下,
- 支持 Plugin 时,效果,
如何贡献
- 代码结构参考「整洁架构思想」,具体说明参考 github.com/xpzouying/go-clean-arch。
- 编码规范参考 Go Code Review
部署机器人
1. 部署飞书机器人服务
因为飞书需要访问公网的 IP 地址,所以我们使用 fly.io 进行部署。一般情况下,免费额度都够用。
<details> <summary>fly.io 部署流程</summary>以 MacOS 为例,其他的类似。
-
登录 https://fly.io/dashboard 并注册账号。
-
安装 Fly CLI。
-
运行命令登录,
flyctl auth login
。
Waiting for session... Done
successfully logged in as xpzouying@gmail.com
-
运行
flyctl apps create
,输入 app name:feishuex-bot
。 -
使用 flyctl env 配置各种环境变量。
- flyctl secrets set FEISHU_APP_ID=cli_xxx
- flyctl secrets set FEISHU_APP_SECRET=abcABCxxx
- flyctl secrets set VERIFY_TOKEN=abcABCxxx
- flyctl secrets set ENCRYPT_KEY=abcABCxxx
- flyctl secrets set BOT_NAME=feishu-bot
- flyctl secrets set OPENAI_TOKEN=sk-xxx
配置后,使用 flyctl secrets list
查看环境变量设置。
-
部署程序:
flyctl deploy
。 -
查看状态:
-
通过命令行查看:
flyctl status
2. 配置飞书机器人
使用 fly.io 成功部署后,可以在飞书开发平台配置请求地址。
联系
欢迎讨论更多功能扩展,
<img src='https://github.com/ConnectAI-E/Feishu-EX-ChatGPT/assets/50035229/3a65502b-bfd5-4096-96d0-90ecc1b5d535' alt='' width='200'/>