nonebot-plugin-nai3-bot


Namenonebot-plugin-nai3-bot JSON
Version 1.2.0 PyPI version JSON
download
home_pageNone
Summary基于GPT4+NovelAI V3,Bot在将自然语言转换为NAI3提示词并绘图发送的同时,还会以自定义人格和你聊天。同时支持随机画风和随机同人图生成。
upload_time2024-06-29 11:32:20
maintainerNone
docs_urlNone
authorAlpaca
requires_python<4.0,>=3.8
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <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/Stable Diffusion API,Bot在将自然语言转换为NAI3提示词并绘图发送的同时以自定义人格与用户聊天。
- 用户可以正常与指定人格(需要调教prompt,目前插件内置的人格为群友指定的BA角色天童爱丽丝)聊天。在聊天过程中可以使用自然语言描述AI绘图的需求,Bot会根据用户的聊天内容修改AI绘图所用的提示词(见效果图),并且判断是否需要调用Novel V3模型/Stable Diffusion进行绘画。如果为正常聊天则不会触发绘画功能,如果Bot判断用户有AI绘画的需求,则会调用NAI3绘图,并将图片和提示词发送到群内。
- 每个用户和Bot有独立的聊天记录。
- 随机生成画师风格串绘图和随机同人图生成

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

# 安装
* 手动安装
  ```
  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,与sd_api二选一
sd_api = "xxxxxx"    # stable diffusion的API地址,与nai3_token二选一。示例 http://{ip}:{port}/sdapi/v1/txt2img
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对话的关键字)
- 记忆清除 : 清除当前用户的聊天记录
- 切换人格 : 切换机器人聊天的人格
- 随机画风 需要在画师串后面补充的正面提示词 : 随机生成NAI3的画师风格串进行绘图
- 随机同人 角色名称( 格式参考:magallan(arknights) ) : 随机生成指定角色的同人图,若不指定,则随机从预设角色列表中选择

# 可能存在的问题
- 由于调教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只支持一次出一张图)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "nonebot-plugin-nai3-bot",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "Alpaca",
    "author_email": "admin@alpaca.kim",
    "download_url": "https://files.pythonhosted.org/packages/85/4a/c5b3eb39674cc99ed6a08e69b674b396e49ab3cab4217644fb9a60e8d5d6/nonebot_plugin_nai3_bot-1.2.0.tar.gz",
    "platform": null,
    "description": "<div align=\"center\">\n  <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>\n  <br>\n  <p><img src=\"https://github.com/A-kirami/nonebot-plugin-template/blob/resources/NoneBotPlugin.svg\" width=\"240\" alt=\"NoneBotPluginText\"></p>\n</div>\n\n<div align=\"center\">\n\n# nonebot-plugin-nai3-bot\n</div>\n\n# \u4ecb\u7ecd\n- \u672c\u63d2\u4ef6\u57fa\u4e8eGPT4+NovelAI V3/Stable Diffusion API,Bot\u5728\u5c06\u81ea\u7136\u8bed\u8a00\u8f6c\u6362\u4e3aNAI3\u63d0\u793a\u8bcd\u5e76\u7ed8\u56fe\u53d1\u9001\u7684\u540c\u65f6\u4ee5\u81ea\u5b9a\u4e49\u4eba\u683c\u4e0e\u7528\u6237\u804a\u5929\u3002\n- \u7528\u6237\u53ef\u4ee5\u6b63\u5e38\u4e0e\u6307\u5b9a\u4eba\u683c\uff08\u9700\u8981\u8c03\u6559prompt,\u76ee\u524d\u63d2\u4ef6\u5185\u7f6e\u7684\u4eba\u683c\u4e3a\u7fa4\u53cb\u6307\u5b9a\u7684BA\u89d2\u8272\u5929\u7ae5\u7231\u4e3d\u4e1d\uff09\u804a\u5929\u3002\u5728\u804a\u5929\u8fc7\u7a0b\u4e2d\u53ef\u4ee5\u4f7f\u7528\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0AI\u7ed8\u56fe\u7684\u9700\u6c42,Bot\u4f1a\u6839\u636e\u7528\u6237\u7684\u804a\u5929\u5185\u5bb9\u4fee\u6539AI\u7ed8\u56fe\u6240\u7528\u7684\u63d0\u793a\u8bcd\uff08\u89c1\u6548\u679c\u56fe\uff09,\u5e76\u4e14\u5224\u65ad\u662f\u5426\u9700\u8981\u8c03\u7528Novel V3\u6a21\u578b/Stable Diffusion\u8fdb\u884c\u7ed8\u753b\u3002\u5982\u679c\u4e3a\u6b63\u5e38\u804a\u5929\u5219\u4e0d\u4f1a\u89e6\u53d1\u7ed8\u753b\u529f\u80fd,\u5982\u679cBot\u5224\u65ad\u7528\u6237\u6709AI\u7ed8\u753b\u7684\u9700\u6c42,\u5219\u4f1a\u8c03\u7528NAI3\u7ed8\u56fe,\u5e76\u5c06\u56fe\u7247\u548c\u63d0\u793a\u8bcd\u53d1\u9001\u5230\u7fa4\u5185\u3002\n- \u6bcf\u4e2a\u7528\u6237\u548cBot\u6709\u72ec\u7acb\u7684\u804a\u5929\u8bb0\u5f55\u3002\n- \u968f\u673a\u751f\u6210\u753b\u5e08\u98ce\u683c\u4e32\u7ed8\u56fe\u548c\u968f\u673a\u540c\u4eba\u56fe\u751f\u6210\n\n# \u6548\u679c\n![Alt](demo1.jpeg)\n![Alt](demo2.png)\n![Alt](demo3.png)\n\n# \u5b89\u88c5\n* \u624b\u52a8\u5b89\u88c5\n  ```\n  git clone https://github.com/Alpaca4610/nonebot_plugin_nai3_bot.git\n  ```\n\n  \u4e0b\u8f7d\u5b8c\u6210\u540e\u5728bot\u9879\u76ee\u7684pyproject.toml\u6587\u4ef6\u624b\u52a8\u6dfb\u52a0\u63d2\u4ef6\uff1a\n\n  ```\n  plugin_dirs = [\"xxxxxx\",\"xxxxxx\",......,\"\u4e0b\u8f7d\u5b8c\u6210\u7684\u63d2\u4ef6\u8def\u5f84/nonebot-plugin-nai3-bot\"]\n  ```\n* \u4f7f\u7528 pip\n  ```\n  pip install nonebot-plugin-nai3-bot\n  ```\n# \u914d\u7f6e\u6587\u4ef6\n\n\u5728Bot\u6839\u76ee\u5f55\u4e0b\u7684.env\u6587\u4ef6\u4e2d\u8ffd\u52a0\u5982\u4e0b\u5185\u5bb9\uff1a\n\n\u5fc5\u586b\u5185\u5bb9\uff1a\n```\nnai3_token = \"xxxx\"  # NovelAI\u7684token,\u4e0esd_api\u4e8c\u9009\u4e00\nsd_api = \"xxxxxx\"    # stable diffusion\u7684API\u5730\u5740\uff0c\u4e0enai3_token\u4e8c\u9009\u4e00\u3002\u793a\u4f8b http://{ip}:{port}/sdapi/v1/txt2img\noneapi_key = \"sk-xxxxxxxxxx\"  # \uff08\u5fc5\u586b\uff09OpenAI\u5b98\u65b9\u6216\u8005\u662f\u652f\u6301OneAPI\u7684\u5927\u6a21\u578b\u4e2d\u8f6c\u670d\u52a1\u5546\u63d0\u4f9b\u7684KEY\n```\n\n\u53ef\u9009\u5185\u5bb9\uff1a\n```\noneapi_url = \"https://xxxxxxxxx\"  # \uff08\u53ef\u9009\uff09\u5927\u6a21\u578b\u4e2d\u8f6c\u670d\u52a1\u5546\u63d0\u4f9b\u7684\u4e2d\u8f6c\u5730\u5740,\u4f7f\u7528OpenAI\u5b98\u65b9\u670d\u52a1\u4e0d\u9700\u8981\u586b\u5199\noneapi_model = \"gpt-4\" # \uff08\u53ef\u9009\uff09\u4f7f\u7528\u7684\u8bed\u8a00\u5927\u6a21\u578b,\u5efa\u8bae\u4f7f\u7528gpt4\u6216gpt4o\u6a21\u578b\u4ee5\u8fbe\u5230\u66f4\u597d\u7684\u4f53\u9a8c\u6548\u679c\u6b64\u9879,\u9ed8\u8ba4\u4f7f\u7528gpt-4\u6a21\u578b\n```\nNAI3\u7684token\u83b7\u53d6\u5730\u5740\u65b9\u6cd5\uff1a\n![Alt](image.png)\n\n# \u4f7f\u7528\u65b9\u6cd5\n- **  \u804a\u5929\u5185\u5bb9/\u7ed8\u56fe\u9700\u6c42      \uff08**\u662f\u89e6\u53d1\u4e0eBot\u5bf9\u8bdd\u7684\u5173\u952e\u5b57\uff09\n- \u8bb0\u5fc6\u6e05\u9664 : \u6e05\u9664\u5f53\u524d\u7528\u6237\u7684\u804a\u5929\u8bb0\u5f55\n- \u5207\u6362\u4eba\u683c : \u5207\u6362\u673a\u5668\u4eba\u804a\u5929\u7684\u4eba\u683c\n- \u968f\u673a\u753b\u98ce \u9700\u8981\u5728\u753b\u5e08\u4e32\u540e\u9762\u8865\u5145\u7684\u6b63\u9762\u63d0\u793a\u8bcd : \u968f\u673a\u751f\u6210NAI3\u7684\u753b\u5e08\u98ce\u683c\u4e32\u8fdb\u884c\u7ed8\u56fe\n- \u968f\u673a\u540c\u4eba \u89d2\u8272\u540d\u79f0( \u683c\u5f0f\u53c2\u8003\uff1amagallan(arknights) ) : \u968f\u673a\u751f\u6210\u6307\u5b9a\u89d2\u8272\u7684\u540c\u4eba\u56fe\uff0c\u82e5\u4e0d\u6307\u5b9a\uff0c\u5219\u968f\u673a\u4ece\u9884\u8bbe\u89d2\u8272\u5217\u8868\u4e2d\u9009\u62e9\n\n# \u53ef\u80fd\u5b58\u5728\u7684\u95ee\u9898\n- \u7531\u4e8e\u8c03\u6559prompt\u7684\u539f\u56e0\uff0c\u673a\u5668\u4eba\u53ef\u80fd\u4f1a\u5076\u5c14\u51fa\u9519\uff0c\u6b64\u65f6\u7ee7\u7eed\u548cTA\u5bf9\u8bdd\u6216\u8005\u662f\u4f7f\u7528\u8bb0\u5fc6\u6e05\u9664\u547d\u4ee4\u91cd\u65b0\u5f00\u59cb\u5bf9\u8bdd\u5373\u53ef\u3002\n- \u6ce8\u610f\u8bed\u8a00\u5927\u6a21\u578b\u7684token\u6d88\u8017\u91cf\n- \u63d2\u4ef6\u76ee\u524d\u6ca1\u6709\u5b9e\u73b0\u7ed8\u56fe\u6392\u961f\u63d0\u9192\uff0c\u591a\u7528\u6237\u540c\u65f6\u7ed8\u56feNAI3\u53ef\u80fd\u4f1a\u8fd4\u56de\u9519\u8bef\u3002\n# \u6dfb\u52a0\u4eba\u683c\n1. \u5728\u673a\u5668\u4eba\u8fd0\u884c\u76ee\u5f55\u7684`data`\u6587\u4ef6\u5939\u4e0b\u521b\u5efa\u6587\u4ef6`nai3_character.json`\n2. \u53c2\u8003[\u4eba\u683c\u8c03\u6559\u6a21\u7248](default_character.txt)\uff0c\u5c06\u6a21\u7248\u4e2d\u7684\u7b2c1\u90e8\u5206\u4fee\u6539\u6210\u4f60\u7684\u65b0\u4eba\u683c\u548c\u66f4\u6539\u5269\u4e0b\u90e8\u5206\u7684\u4eba\u683c\u540d\u79f0\u3002\n3. \u53c2\u8003[\u4eba\u683c\u5217\u8868\u6a21\u7248](nai3_character.json)\uff0c\u4fee\u6539`nai3_character.json`\u6587\u4ef6\u3002json\u6587\u4ef6\u7684\u683c\u5f0f\u5982\u4e0b\uff1a\n   ```json\n   {\n        \"name\": \"\u4eba\u683c\u540d\u79f0\uff08\u7528\u4e8e\u5207\u6362\u4eba\u683c\u65f6\u533a\u5206\uff09\",\n        \"nickname\": \"\u4eba\u683c\u6635\u79f0\",\n        \"prompt\": \"\u8c03\u6559prompt\u7684base64\u7f16\u7801\u683c\u5f0f\uff0c\u8bf7\u53c2\u7167\u9ed8\u8ba4\u4eba\u683c\u6a21\u7248\uff0c\u5c06\u6a21\u7248\u4e2d\u7684\u7b2c1\u90e8\u5206\u4fee\u6539\u6210\u4f60\u7684\u65b0\u4eba\u683c\u548c\u66f4\u6539\u5269\u4e0b\u90e8\u5206\u7684\u4eba\u683c\u540d\u79f0\u5373\u53ef\uff0c\u7136\u540e\u518d\u5c06\u6587\u5b57\u8f6c\u6362\u6210base64\u7f16\u7801\u586b\u5165\u6b64\u90e8\u5206\"\n    }\n    ```\n    \u591a\u4eba\u683c\u5207\u6362\u8bf7\u5199\u6210json\u5217\u8868\u7684\u5f62\u5f0f\n4. \u53d1\u9001\u5207\u6362\u4eba\u683c\uff0c\u6839\u636e\u673a\u5668\u4eba\u7684\u63d0\u793a\u5373\u53ef\u5207\u6362\u5f53\u524d\u4eba\u683c\u3002\u82e5\u5207\u6362\u4e4b\u524d\u5b58\u5728\u5386\u53f2\u5bf9\u8bdd\uff0c\u6e05\u9664\u804a\u5929\u5386\u53f2\u8bb0\u5f55\u5373\u53ef\u548c\u65b0\u4eba\u683c\u5bf9\u8bdd\u3002\n\n# TODO\n- [x] \u6dfb\u52a0\u7528\u6237\u81ea\u5b9a\u4e49\u4eba\u683c\u529f\u80fd\n- [ ] \u4ee3\u7406\u652f\u6301\n- [ ] \u652f\u6301\u7ed8\u56fe\u6392\u961f\u4fe1\u606f\u63d0\u9192(NAI3\u53ea\u652f\u6301\u4e00\u6b21\u51fa\u4e00\u5f20\u56fe)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "\u57fa\u4e8eGPT4+NovelAI V3,Bot\u5728\u5c06\u81ea\u7136\u8bed\u8a00\u8f6c\u6362\u4e3aNAI3\u63d0\u793a\u8bcd\u5e76\u7ed8\u56fe\u53d1\u9001\u7684\u540c\u65f6\uff0c\u8fd8\u4f1a\u4ee5\u81ea\u5b9a\u4e49\u4eba\u683c\u548c\u4f60\u804a\u5929\u3002\u540c\u65f6\u652f\u6301\u968f\u673a\u753b\u98ce\u548c\u968f\u673a\u540c\u4eba\u56fe\u751f\u6210\u3002",
    "version": "1.2.0",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b1304aa02fe516626167e1c1de2715e35a0f6cce8fd5f41c12096c28dfdbcc78",
                "md5": "c75fa7d81016d84a1c6913d5167f05e0",
                "sha256": "3458b1d10084b71d9cccff067923375f8cb4ea8035b7756aa368dbe780890f00"
            },
            "downloads": -1,
            "filename": "nonebot_plugin_nai3_bot-1.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c75fa7d81016d84a1c6913d5167f05e0",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.8",
            "size": 75599,
            "upload_time": "2024-06-29T11:32:18",
            "upload_time_iso_8601": "2024-06-29T11:32:18.097739Z",
            "url": "https://files.pythonhosted.org/packages/b1/30/4aa02fe516626167e1c1de2715e35a0f6cce8fd5f41c12096c28dfdbcc78/nonebot_plugin_nai3_bot-1.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "854ac5b3eb39674cc99ed6a08e69b674b396e49ab3cab4217644fb9a60e8d5d6",
                "md5": "7691c049c0934178452bb9a58712915f",
                "sha256": "48f573d9b7ae0b7bfaeadfd40a0da5e6ffec9fe6edbf5a2af6a9fe9db495ad2c"
            },
            "downloads": -1,
            "filename": "nonebot_plugin_nai3_bot-1.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "7691c049c0934178452bb9a58712915f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.8",
            "size": 75255,
            "upload_time": "2024-06-29T11:32:20",
            "upload_time_iso_8601": "2024-06-29T11:32:20.812940Z",
            "url": "https://files.pythonhosted.org/packages/85/4a/c5b3eb39674cc99ed6a08e69b674b396e49ab3cab4217644fb9a60e8d5d6/nonebot_plugin_nai3_bot-1.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-06-29 11:32:20",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "nonebot-plugin-nai3-bot"
}
        
Elapsed time: 3.63128s