Metadata-Version: 2.1
Name: nonebot-plugin-nai3-bot
Version: 1.1.1
Summary: 基于GPT4+NovelAI V3,Bot在将自然语言转换为NAI3提示词并绘图发送的同时,还会以自定义人格和你聊天
License: MIT
Author: Alpaca
Author-email: alpaca@bupt.edu.cn
Requires-Python: >=3.8,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Dist: Pillow (>=9.1.0,<10.0.0)
Requires-Dist: httpx (>=0.27.0,<0.28.0)
Requires-Dist: nonebot-adapter-onebot (>=2.2.1,<3.0.0)
Requires-Dist: nonebot2 (>=2.0.0rc3,<3.0.0)
Requires-Dist: openai (>=1.30.1,<2.0.0)
Description-Content-Type: text/markdown

<div align="center">
  <a href="https://v2.nonebot.dev/store"><img src="https://github.com/A-kirami/nonebot-plugin-template/blob/resources/nbp_logo.png" width="180" height="180" alt="NoneBotPluginLogo"></a>
  <br>
  <p><img src="https://github.com/A-kirami/nonebot-plugin-template/blob/resources/NoneBotPlugin.svg" width="240" alt="NoneBotPluginText"></p>
</div>

<div align="center">

# nonebot-plugin-nai3-bot
</div>

# 介绍
- 本插件基于GPT4+NovelAI V3,Bot在将自然语言转换为NAI3提示词并绘图发送的同时以自定义人格与用户聊天。
- 用户可以正常与指定人格（需要调教prompt,目前插件内置的人格为群友指定的BA角色天童爱丽丝）聊天。在聊天过程中可以使用自然语言描述AI绘图的需求,Bot会根据用户的聊天内容修改AI绘图所用的提示词（见效果图）,并且判断是否需要调用Novel V3模型进行绘画。如果为正常聊天则不会触发绘画功能,如果Bot判断用户有AI绘画的需求,则会调用NAI3绘图,并将图片和提示词发送到群内。
- 每个用户和Bot有独立的聊天记录。

# 效果
![Alt](demo1.jpeg)

# 安装
* 手动安装
  ```
  git clone https://github.com/Alpaca4610/nonebot_plugin_nai3_bot.git
  ```

  下载完成后在bot项目的pyproject.toml文件手动添加插件：

  ```
  plugin_dirs = ["xxxxxx","xxxxxx",......,"下载完成的插件路径/nonebot-plugin-nai3-bot"]
  ```
* 使用 pip
  ```
  pip install nonebot-plugin-nai3-bot
  ```
# 配置文件

在Bot根目录下的.env文件中追加如下内容：

必填内容：
```
nai3_token = "xxxx"  # （必填）NovelAI的token
oneapi_key = "sk-xxxxxxxxxx"  # （必填）OpenAI官方或者是支持OneAPI的大模型中转服务商提供的KEY
```

可选内容：
```
oneapi_url = "https://xxxxxxxxx"  # （可选）大模型中转服务商提供的中转地址,使用OpenAI官方服务不需要填写
oneapi_model = "gpt-4" # （可选）使用的语言大模型,建议使用gpt4或gpt4o模型以达到更好的体验效果此项,默认使用gpt-4模型
```
NAI3的token获取地址方法：
![Alt](image.png)

# 使用方法
- **  聊天内容/绘图需求      （**是触发与Bot对话的关键字）
- 记忆清除 清除当前用户的聊天记录
- 切换人格 切换机器人聊天的人格

# 可能存在的问题
- 由于调教prompt的原因，机器人可能会偶尔出错，此时继续和TA对话或者是使用记忆清除命令重新开始对话即可。
- 注意语言大模型的token消耗量
- 插件目前没有实现绘图排队提醒，多用户同时绘图NAI3可能会返回错误。
# 添加人格
1. 在机器人运行目录的`data`文件夹下创建文件`nai3_character.json`
2. 参考[人格调教模版](default_character.txt)文件，将模版中的第1部分修改成你的新人格和更改剩下部分的人格名称。
3. 参考[人格列表模版](nai3_character.json)，修改`nai3_character.json`文件。json文件的格式如下：
   ```json
   {
        "name": "人格名称（用于切换人格时区分）",
        "nickname": "人格昵称",
        "prompt": "调教prompt的base64编码格式，请参照默认人格模版，将模版中的第1部分修改成你的新人格和更改剩下部分的人格名称即可，然后再将文字转换成base64编码填入此部分"
    }
    ```
    多人格切换请写成json列表的形式
4. 发送切换人格，根据机器人的提示即可切换当前人格。若切换之前存在历史对话，清除聊天历史记录即可和新人格对话。

# TODO
- [x] 添加用户自定义人格功能
- [ ] 代理支持
- [ ] 支持绘图排队信息提醒(NAI3只支持一次出一张图)

