chatgpt-plugin/README.md
2023-03-10 21:31:49 +08:00

278 lines
11 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 云崽qq机器人的chatgpt插件
## 特点
* 支持单人连续对话Conversation群聊中支持加入其他人的对话
* API模式下使用 gpt-3.5-turbo APIChatGPT官网同款模型仅需OpenAI Api Key开箱即用。**注意收费**
* 支持问答图片截图
* 支持AI性格调教
* 支持对接vits回答直接转语音
* API3模式下绕过Cloudflare防护直接访问ChatGPT的SSE API与官方体验一致且保留对话记录在官网可查。免费。
* (Deprecated)提供基于浏览器的解决方案作为备选API3不可用的情况下或担心账户安全的用户可以选择使用浏览器模式。
* 支持新[必应](https://www.bing.com/new)Beta
## 版本要求
Node.js >= 18 / Node.js >= 14(with node-fetch)
小白尽可能使用18版本以上的nodejs
## 安装与使用方法
### 安装
在安装之前请先判断自己需要使用哪种模式本插件支持官方API/第三方API/浏览器/必应四种模式。也可以选择**我全都要**(通过qq发送命令`#chatgpt切换浏览器/API/API3/Bing`实时切换)
对于轻量用户可以先使用API模式有较高要求再转为使用其他模式。
> #### API模式和浏览器模式如何选择
>
> * API模式会调用OpenAI官方提供的gpt-3.5-turbo APIChatGPT官网同款模型只需要提供API Key。一般情况下该种方式响应速度更快可配置项多且不会像chatGPT官网一样总出现不可用的现象但注意API调用是收费的新用户有18美元试用金可用于支付价格为`$0.0020/1K tokens`。(问题和回答**加起来**算token
> * API3模式会调用第三方提供的官网反代API他会帮你绕过CF防护需要提供ChatGPT的Token。效果与官网和浏览器一致但稳定性不一定。发送#chatgpt设置token来设置token。
> * (Deprecated)浏览器模式通过在本地启动Chrome等浏览器模拟用户访问ChatGPT网站使得获得和官方以及API2模式一模一样的回复质量同时保证安全性。缺点是本方法对环境要求较高需要提供桌面环境和一个可用的代理能够访问ChatGPT的IP地址且响应速度不如API而且高峰期容易无法使用。一般作为API3的下位替代。
> * 必应Bing将调用微软新必应接口进行对话。需要在必应网页能够正常使用新必应且设置有效的Bing登录Cookie方可使用。
1. 进入 Yunzai根目录
2. 请将 chatgpt-plugin 放置在 Yunzai-Bot 的 plugins 目录下
推荐使用 git 进行安装,以方便后续升级。在 Yunzai-Bot 根目录夹打开终端,运行下述指令进行安装
```shell
git clone --depth=1 https://github.com/ikechan8370/chatgpt-plugin.git ./plugins/chatgpt-plugin/
cd plugins/chatgpt-plugin
pnpm i
```
如果是手工下载的 zip 压缩包,请将解压后的 chatgpt-plugin 文件夹(请删除压缩自带的-master后缀放置在 Yunzai-Bot 目录下的 plugins 文件夹内
> 浏览器模式仅为备选,如您需要使用浏览器模式,您还需要有**桌面环境**优先级建议API≈必应>API3>浏览器
> 2.20更新必应被大削变得蠢了建议还是API/API3优先
3. 修改配置
**本插件配置项比较多,建议使用[锅巴面板](https://github.com/guoba-yunzai/Guoba-Plugin)修改**
复制`plugins/chatgpt-plugin/config/config.example.json`并将其改名为`config.json`\
编辑`plugins/chatgpt-plugin/config/config.json`文件,修改必要配置项
4. 重启Yunzai-Bot
> ### 我想使用浏览器模式但是我是linux云服务器没有桌面环境怎么办
>
> linux云服务器可以安装窗口管理器和vnc创建并访问虚拟桌面环境
>
> 1. 安装xvfb和fluxbox
>
> - Ubuntu`sudo apt-get install x11vnc xvfb fluxbox`
>
> - CentOS`sudo yum install x11vnc Xvfb fluxbox`
>
> 2. 启动桌面环境
>
> 建议用tmux或screen等使其能够后台运行
>
> 注意本命令使用默认5900端口和**无密码**,注意通过防火墙等保护,**切勿**在公网环境或不安全的网络环境下使用!!!
> `x11vnc -create -env FD_PROG=/usr/bin/fluxbox -env X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 -env X11VNC_CREATE_GEOM=${1:-1024x768x16} -nopw -forever`
>
> 3. 使用vnc客户端连接至云桌面
>
> 右键Applications > Shells > Bash打开终端然后进入Yunzai目录下运行node app即可。
>
> 4. 执行pnpm i时sharp安装失败
>
> sharp不影响chatgpt聊天仅影响Dalle2绘图功能。ubuntu可以执行`apt install libvips-dev`之后再`pnpm i`
>
> 实测该方案资源占用低运行稳定基本1核2G的轻量云服务器就足够了。
---
### 相关配置
#### 配置文件相关
配置文件位置:`plugins/chatgpt-plugin/config/config.js`
部分关键配置项,其他请参照文件内注释:
| 名称 | 含义 | 解释 |
| :---------------: | :-----------------: | :----------------------------------------------------: |
| PROXY | 代理地址 | 请在此处配置你的代理,例如`http://127.0.0.1:7890` |
| API_KEY | openai账号的API Key | 获取地址https://platform.openai.com/account/api-keys |
| username/password | openai的账号和密码 | / |
#### Token相关
与Token相关的设置需在qq与机器人对话设置设置后方可使用对应的api
| 名称 | 含义 | 解释 | 设置方式 |
| :-----------------: | :------------------: | :----------------------------------------------------------: | :--------------------: |
| ChatGPT AccessToken | ChatGPT登录后的Token | 具体解释见下方 | \#chatgpt设置token |
| 必应token | 必应登录后的Token | 必应Bing将调用微软新必应接口进行对话。需要在必应网页能够正常使用新必应且设置有效的Bing 登录Cookie方可使用 | \#chatgpt设置必应token |
> #### 我没有注册openai账号如何获取
>
> 您可以按照以下方法获取openai账号
>
> 进入https://chat.openai.com/ 选择signup注册。目前openai不对包括俄罗斯、乌克兰、伊朗、中国等国家和地区提供服务所以自行寻找办法使用**其他国家和地区**的ip登录。此外注册可能需要验证所在国家和地区的手机号码如果没有国外手机号可以试试解码网站收费的推荐https://sms-activate.org/
>
> #### 我有openai账号了如何获取API key和Access Token
>
> - 获取API key
> - 进入账户后台创建API keyCreate new secret keyhttps://platform.openai.com/account/api-keys
>
> - 获取Access Token
> - **登录后**访问https://chat.openai.com/api/auth/session
> - 您会获得类似如下一串json字符串`{"user":{"id":"AAA","name":"BBB","email":"CCC","image":"DDD","picture":"EEE","groups":[]},"expires":"FFF","accessToken":"XXX"}`
> - 其中的XXX即为`ChatGPT AccessToken`
>
> #### ChatGPT AccessToken 设置了有什么用我为什么用不了API模式
>
> - 请参考上方 [API模式和浏览器模式如何选择](#API模式和浏览器模式如何选择)
> - 部分API需要在和机器人的聊天里输入`#chatgpt设置token`才可以使用
>
> #### 我有新必应的测试资格了如何获取必应Token
>
> 1. JS一键获取
>
> 登录www.bing.com刷新一下网页按F12或直接打开开发者模式点击Console/控制台运行如下代码执行后即在您的剪切板存储了必应Token
>
> ```js
> copy(document.cookie.split(";").find(cookie=>cookie.trim().startsWith("_U=")).split("=")[1]);
> ```
>
> 2. 手动获取
>
> 登录www.bing.com刷新一下网页按F12或直接打开开发者模式点击Application/存储点击左侧Storage下的Cookies展开找到[https://www.bing.com](https://www.bing.com/) 项在右侧列表Name项下找到"\_U"_U的value即为必应Token
>
>
>
> 其他问题可以参考使用的api库 https://github.com/transitive-bullshit/chatgpt-api 以及 https://github.com/waylaidwanderer/node-chatgpt-api
### 使用方法
根据配置文件中的toggleMode决定联通方式。
- at模式@机器人 发送聊内容即可
- prefix模式#chat+问题】,本模式可以避免指令冲突。
发挥你的想象力吧,~~调教~~拟造出你自己的机器人风格!
#### 文本/图片回复模式
> #chatgpt文本/图片/语音模式
可以控制机器人回复的方式
#### 对话相关
> #chatgpt对话列表
>
> #结束对话 [@某人]
>
> #清空chat队列
>
> #移出chat队列首位
>
> #chatgpt开启/关闭问题确认
>
> ...
#### 设置相关
> #chat切换浏览器/API/API2/API3/Bing
>
> #chatgpt设置[必应]Token
>
> ...
#### 获取帮助
> #chatgpt帮助
>
> #chatgpt模式帮助
发送#chatgpt帮助,有更多选项可以配置
### 如何更新
发送#chatgpt更新指令。如果有冲突,可以使用#chatgpt强制更新
## 示例与截图
- 程序员版
![img.png](resources/img/example1.png)
- 傲娇版
![)T@~XY~NWXUM S1)D$7%I3H](https://user-images.githubusercontent.com/21212372/217540723-0b97553a-f4ba-41df-ae0c-0449f73657fc.png)
![image](https://user-images.githubusercontent.com/21212372/217545618-3793d9f8-7941-476b-81f8-4255ac216cf7.png)
## TODO
* prompt预设与共享
## 其他
### 常见问题
1. 如果在linux系统上发现图片模式下emoj无法正常显示可以搜索安装支持emoj的字体如Ubuntu可以使用`sudo apt install fonts-noto-color-emoji`
2. 我和机器人聊天但没有任何反应怎么办?
可能是由于Yunzai-bot异常退出等原因造成Redis 队列中有残留的等待问题。使用`#清空队列`命令清除队列后再试。
3. Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'xxx'.
请参照本文档前面的安装依赖部分重新依赖。随着项目更新可能引入新的依赖。
> 一般情况下请按照 [安装](#安装) 小节的内容重新安装依赖即可
>
>
>
> 最多的问题载入插件错误chat
>
> 问题详情Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'showdown' imported from /app/Yunzai-Bot/plugins/chatgpt-plugin/apps/chat.js
>
> 原因:没装依赖
>
> 解决方式:请参考文档在本插件目录下用`pnmp install`安装依赖,安装完就不报错了
4. 反代能自己搭吗?
能。参考[这里](https://ikechan8370.com/archives/da-jian-chatgpt-guan-fang-fan-xiang-dai-li)
## 感谢
本项目使用或参考了以下开源项目
* https://github.com/transitive-bullshit/chatgpt-api
* https://github.com/waylaidwanderer/node-chatgpt-api
* https://github.com/acheong08/ChatGPT
* https://github.com/PawanOsman
图片以及Bing模式支持 @HalcyonAlcedo
* https://github.com/HalcyonAlcedo/ChatGPT-Plugin-PageCache
语音vits模型来自于
* https://huggingface.co/spaces/sayashi/vits-uma-genshin-honkai
以及ChatGPT及OpenAI
* https://chat.openai.com/
* https://platform.openai.com/
## 贡献者
感谢以下贡献者
<a href="https://github.com/ikechan8370/chatgpt-plugin/graphs/contributors">
<img src="https://contrib.rocks/image?repo=ikechan8370/chatgpt-plugin" />
</a>
![Alt](https://repobeats.axiom.co/api/embed/076d597ede41432208435f233d18cb20052fb90a.svg "Repobeats analytics image")