为群晖Chat设计的ChatGPT机器人,使用Django编写。
ChatGPT client for Synology Chat, written with Django
使用本应用共分四步:
- 启动服务
- 设置斜杠命令
- 通过斜杠命令设置用户、密钥
- 通过SynologyChat聊天机器人窗口与ChatGpt对话。
支持docker启动或本机运行。
以下三种择一即可,建议DSM7.2使用第二种docker-compose启动的方式,DSM7.1及以下使用docker图形界面或命令行。
docker run --rm \
-p 8000:8000 \
--name synology-chat-gpt \
-v $(pwd)/data:/app/data \
-e OPENAI_API_BASE=https://api.openai.com/v1 \ # Set custom OpenAI API base here
docker-registry.mujiannan.com:5001/mujiannan/synology-chat-gpt:latest-p参数为端口映射,-v为数据目录映射(用于持久化保存聊天记录、api_key等)。
如果你想要从源码自行制作镜像,请参考项目目录项目目录下的.debug-docker.sh。
DSM7.2以上可以在container manager内新建项目,然后通过WebStation建立自定义域名,该方式有不占用母机端口、方便管理、安全等好处。
version: "3.7"
services:
synology-chat-gpt:
image: docker-registry.mujiannan.com:5001/mujiannan/synology-chat-gpt:latest
volumes:
- /volume1/docker/synology-chat-gpt/data:/app/data
deploy:
resources:
limits:
cpus: 500m
memory: 200m
ports:
- "8000:8000"建议非开发者不要使用此方式启动。
去群晖套件中心安装 Python3 即可。
群晖安装的 python3 没有自带 pip,请参照这篇文章安装。下面假设你为 root 用户安装了pip,因为普通用户会遇到权限问题。
如果你执行提示语法错误/其他错误,首先试试把命令中的python和pip换成python3 和 pip3。你的python可能是python2。
在项目目录下,执行
sudo pip install -r requirements.txt
如果本项目不部署在群晖上,会遇到HTTP 400错误。解决方案请参考这个Issue:#4
在项目目录下,依次执行以下两条命令,创建数据库:
sudo python manage.py makemigrations chat
sudo python manage.py migrate
然后执行下面的命令启动服务器:
sudo python manage.py runserver <port>
在<port>中填入你指定的端口。注意,<port>是一个数字,不包含尖括号,如1999。如果服务器启动正常(没有端口冲突),按Ctrl C中断服务器。然后执行。
sudo nohup python manage.py runserver <port>
现在服务器就在后台执行,可以关闭SSH窗口了。(注意不要按Ctrl C中断nohup执行)
在Chat界面右上角,创建整合。
先创建一些斜杠命令。斜杠命令可以在Chat对话框里输入/执行。
点击创建按钮创建。
像这样填写表单内容。请求URL均为http://127.0.0.1:<port>/webhook。其中<port>是你刚刚指定的端口,图中的示例使用了1999端口。你可以在自定义名称中填入任何合法名称,但命令必须按下面的指示填写。本项目不使用令牌参数,可以忽略它。
接下来列出本项目支持的命令及其参数。
| 字段名 | 内容 |
|---|---|
| 命令 | clear |
| 命令说明 | 清除对话历史记录 |
| 描述 | 清除ChatGPT的上下文,但Chat中的聊天记录仍然会被保留。 |
| 字段名 | 内容 |
|---|---|
| 命令 | totaltoken |
| 命令说明 | 查看当前token用量 |
| 描述 | token上限为4096 |
| 字段名 | 内容 |
|---|---|
| 命令 | retry |
| 命令说明 | 重新回答上一个问题 |
| 描述 | 让ChatGPT重新回答一次你的上一个提问 |
| 字段名 | 内容 |
|---|---|
| 命令 | whoami |
| 命令说明 | 返回当前用户ID |
| 描述 | 用户ID是每位用户的唯一身份证明 |
| 字段名 | 内容 |
|---|---|
| 命令 | newuser |
| 命令说明 | 创建新ChatGPT用户 |
| 描述 | 接受可选两个参数:BaseURL,群晖的URL;BotKey,为机器人界面展示的令牌。 |
| 字段名 | 内容 |
|---|---|
| 命令 | setapikey |
| 命令说明 | 设置当前用户的OpenAI API密钥 |
| 描述 | 接受一个参数:OpenAI API密钥。 |
| 字段名 | 内容 |
|---|---|
| 命令 | setbotkey |
| 命令说明 | 设置当前用户的Bot令牌 |
| 描述 | 接受一个参数:Bot令牌 |
| 字段名 | 内容 |
|---|---|
| 命令 | setbaseurl |
| 命令说明 | 设置群晖Chat的URL |
| 描述 | 接受一个参数:URL,如https://www.example.com:5001 |
| 字段名 | 内容 |
|---|---|
| 命令 | setsavedir |
| 命令说明 | 设置自动保存的目录 |
| 描述 | 接受一个参数:/path/to/a/dir,是一个目录的路径 |
| 字段名 | 内容 |
|---|---|
| 命令 | getsavedir |
| 命令说明 | 获取自动保存的目录路径 |
| 描述 | 返回当前自动保存的目录 |
| 字段名 | 内容 |
|---|---|
| 命令 | saveas |
| 命令说明 | 保存目前与ChatGPT的聊天到txt文件 |
| 描述 | 接受一个参数:filename,保存到默认保存路径中 |
| 字段名 | 内容 |
|---|---|
| 命令 | savenow |
| 命令说明 | 自动保存目前与ChatGPT的聊天到txt文件 |
| 描述 | 使用当前系统时间作为文件名 |
在自定义名称中填入机器人名称,可以任意指定,比如ChatGPT。
传出URL设定为http://127.0.0.1:<port>。其中<port>为你指定的端口号。上面的截图使用了1999端口号。
本项目支持多用户。因此,第一次使用时,需要创建ChatGPT机器人用户。使用/newuser命令创建。可以在此时指定BaseURL与BotKey,也可以稍后指定。BaseURL是群晖面板的URL,如https://www.example.com:5001,注意最后没有斜线/。BotKey是机器人的令牌。
/newuser <(可选)BaseURL> <(可选)BotKey>
如果稍后指定,用/setbotkey命令指定Bot Key
/setbotkey <BotKey>
用setbaseurl命令指定BaseURL
/setbaseurl <BaseURL>
注意,在设定BaseURL和BotKey之前,机器人无法给你发送信息,Chat可能会提示机器人不可用。
然后,需要设定你的OpenAI API密钥。
/setapikey <OpenAI API Key>
如果你想使用将当前聊天记录保存成文件的功能,还需要配置默认文件保存文件夹的路径,路径中不允许含有空格:
/setsavedir /path/to/your/dir
然后,你就可以愉快地开始使用啦!
在使用saveas和savenow命令时,Chat会提示机器人不可用,然后收到保存成功的提示。文件可以正常保存。
- 容器问题排查
建议使用图形化container manager查看容器日志,或者使用命令行如有必要,可携带日志至github issue提问。docker logs -n 50 -f your-container-name
感谢 rashida 的慷慨赞助





