Skip to content

Commit

Permalink
✨新增是否启用新yaml配置的配置项,更新readme
Browse files Browse the repository at this point in the history
  • Loading branch information
Asankilp committed Nov 24, 2024
1 parent 994d27e commit 8221fa7
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 63 deletions.
58 changes: 38 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,25 +130,44 @@ _✨ 使用 OpenAI 标准格式 API 的聊天机器人插件 ✨_

在 nonebot2 项目的`.env`文件中添加下表中的配置

| 配置项 | 必填 | 默认值 | 说明 |
|:---------------------------------:|:--:|:---------------------------------------:|:---------------------------------------------------------------------------------------------:|
| MARSHOAI_TOKEN | 是? || 调用 API 所需的访问 token |
| MARSHOAI_DEFAULT_NAME || `marsho` | 调用 Marsho 默认的命令前缀 |
| MARSHOAI_ALIASES || `set{"小棉"}` | 调用 Marsho 的命令别名 |
| MARSHOAI_DEFAULT_MODEL || `gpt-4o-mini` | Marsho 默认调用的模型 |
| MARSHOAI_PROMPT || 猫娘 Marsho 人设提示词 | Marsho 的基本系统提示词 **※部分推理模型(o1等)不支持系统提示词。** |
| MARSHOAI_ADDITIONAL_PROMPT ||| Marsho 的扩展系统提示词 |
| MARSHOAI_POKE_SUFFIX || `揉了揉你的猫耳` | 对 Marsho 所连接的 OneBot 用户进行双击戳一戳时,构建的聊天内容。此配置项为空字符串时,戳一戳响应功能会被禁用。例如,默认值构建的聊天内容将为`*[昵称]揉了揉你的猫耳`|
| MARSHOAI_ENABLE_SUPPORT_IMAGE_TIP || `true` | 启用后用户发送带图请求时若模型不支持图片,则提示用户 |
| MARSHOAI_ENABLE_NICKNAME_TIP || `true` | 启用后用户未设置昵称时提示用户设置 |
| MARSHOAI_ENABLE_PRAISES || `true` | 是否启用夸赞名单功能 |
| MARSHOAI_ENABLE_TOOLS || `true` | 是否启用小棉工具(MarshoTools) |
| MARSHOAI_LOAD_BUILTIN_TOOLS || `true` | 是否加载内置工具包 |
| MARSHOAI_AZURE_ENDPOINT || `https://models.inference.ai.azure.com` | OpenAI 标准格式 API 端点 |
| MARSHOAI_TEMPERATURE ||| 进行推理时的温度参数 |
| MARSHOAI_TOP_P ||| 进行推理时的核采样参数 |
| MARSHOAI_MAX_TOKENS ||| 返回消息的最大 token 数 |
| MARSHOAI_ADDITIONAL_IMAGE_MODELS || `[]` | 额外添加的支持图片的模型列表,例如`hunyuan-vision` |
#### 插件行为

| 配置项 | 类型 | 默认值 | 说明 |
| ------------------------ | ------ | ------- | ---------------- |
| MARSHOAI_USE_YAML_CONFIG | `bool` | `false` | 是否使用 YAML 配置文件格式 |

#### Marsho 使用方式

| 配置项 | 类型 | 默认值 | 说明 |
| --------------------- | ---------- | ----------- | ----------------- |
| MARSHOAI_DEFAULT_NAME | `str` | `marsho` | 调用 Marsho 默认的命令前缀 |
| MARSHOAI_ALIASES | `set[str]` | `set{"小棉"}` | 调用 Marsho 的命令别名 |

#### AI 调用

| 配置项 | 类型 | 默认值 | 说明 |
| -------------------------------- | ------- | --------------------------------------- | --------------------------------------------------------------------------------------------- |
| MARSHOAI_TOKEN | `str` | | 调用 AI API 所需的 token |
| MARSHOAI_DEFAULT_MODEL | `str` | `gpt-4o-mini` | Marsho 默认调用的模型 |
| MARSHOAI_PROMPT | `str` | 猫娘 Marsho 人设提示词 | Marsho 的基本系统提示词 **※部分模型(o1等)不支持系统提示词。** |
| MARSHOAI_ADDITIONAL_PROMPT | `str` | | Marsho 的扩展系统提示词 |
| MARSHOAI_POKE_SUFFIX | `str` | `揉了揉你的猫耳` | 对 Marsho 所连接的 OneBot 用户进行双击戳一戳时,构建的聊天内容。此配置项为空字符串时,戳一戳响应功能会被禁用。例如,默认值构建的聊天内容将为`*[昵称]揉了揉你的猫耳。` |
| MARSHOAI_AZURE_ENDPOINT | `str` | `https://models.inference.ai.azure.com` | OpenAI 标准格式 API 端点 |
| MARSHOAI_TEMPERATURE | `float` | `null` | 推理生成多样性(温度)参数 |
| MARSHOAI_TOP_P | `float` | `null` | 推理核采样参数 |
| MARSHOAI_MAX_TOKENS | `int` | `null` | 最大生成 token 数 |
| MARSHOAI_ADDITIONAL_IMAGE_MODELS | `list` | `[]` | 额外添加的支持图片的模型列表,例如`hunyuan-vision` |

#### 功能开关

| 配置项 | 类型 | 默认值 | 说明 |
| --------------------------------- | ------ | ------ | -------------------------- |
| MARSHOAI_ENABLE_SUPPORT_IMAGE_TIP | `bool` | `true` | 启用后用户发送带图请求时若模型不支持图片,则提示用户 |
| MARSHOAI_ENABLE_NICKNAME_TIP | `bool` | `true` | 启用后用户未设置昵称时提示用户设置 |
| MARSHOAI_ENABLE_PRAISES | `bool` | `true` | 是否启用夸赞名单功能 |
| MARSHOAI_ENABLE_TOOLS | `bool` | `true` | 是否启用小棉工具 |
| MARSHOAI_LOAD_BUILTIN_TOOLS | `bool` | `true` | 是否加载内置工具包 |


## ❤ 鸣谢&版权说明

Expand All @@ -162,4 +181,3 @@ _✨ 使用 OpenAI 标准格式 API 的聊天机器人插件 ✨_
- [x] 对聊天发起者的认知(认出是谁在问 Marsho)(初步实现)
- [ ] 自定义 API 接入点的适配(不局限于GitHub Models)
- [ ] 上下文通过数据库持久化存储

69 changes: 37 additions & 32 deletions nonebot_plugin_marshoai/config.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import shutil

from pydantic import BaseModel
from nonebot import logger
from nonebot import logger, get_plugin_config
from ruamel.yaml import YAML
import yaml as yaml_
from pathlib import Path


class ConfigModel(BaseModel):
marshoai_use_yaml_config: bool = False
marshoai_token: str = ""
# marshoai_support_image_models: list = ["gpt-4o","gpt-4o-mini"]
marshoai_default_name: str = "marsho"
Expand Down Expand Up @@ -52,16 +53,16 @@ class ConfigModel(BaseModel):


def copy_config(source_template, destination_file):
"""
'''
复制模板配置文件到config
"""
'''
shutil.copy(source_template, destination_file)


def check_yaml_is_changed(source_template):
"""
'''
检查配置文件是否需要更新
"""
'''
with open(config_file_path, 'r', encoding="utf-8") as f:
old = yaml.load(f)
with open(source_template, 'r', encoding="utf-8") as f:
Expand All @@ -75,9 +76,9 @@ def check_yaml_is_changed(source_template):


def merge_configs(old_config, new_config):
"""
'''
合并配置文件
"""
'''
for key, value in new_config.items():
if key in old_config:
continue
Expand All @@ -86,29 +87,33 @@ def merge_configs(old_config, new_config):
old_config[key] = value
return old_config


if not config_file_path.exists():
logger.info("配置文件不存在,正在创建")
config_file_path.parent.mkdir(parents=True, exist_ok=True)
copy_config(source_template, destination_file)
config: ConfigModel = get_plugin_config(ConfigModel)
if config.marshoai_use_yaml_config:
if not config_file_path.exists():
logger.info("配置文件不存在,正在创建")
config_file_path.parent.mkdir(parents=True, exist_ok=True)
copy_config(source_template, destination_file)
else:
logger.info("配置文件存在,正在读取")

if check_yaml_is_changed(source_template):
yaml_2 = YAML()
logger.info("插件新的配置已更新, 正在更新")

with open(config_file_path, 'r', encoding="utf-8") as f:
old_config = yaml_2.load(f)

with open(source_template, 'r', encoding="utf-8") as f:
new_config = yaml_2.load(f)

merged_config = merge_configs(old_config, new_config)

with open(destination_file, 'w', encoding="utf-8") as f:
yaml_2.dump(merged_config, f)

with open(config_file_path, "r", encoding="utf-8") as f:
yaml_config = yaml_.load(f, Loader=yaml_.FullLoader)

config = ConfigModel(**yaml_config)
else:
logger.info("配置文件存在,正在读取")

if check_yaml_is_changed(source_template):
logger.info("插件新的配置已更新, 正在更新")

with open(config_file_path, 'r', encoding="utf-8") as f:
old_config = yaml.load(f)

with open(source_template, 'r', encoding="utf-8") as f:
new_config = yaml.load(f)

merged_config = merge_configs(old_config, new_config)

with open(destination_file, 'w', encoding="utf-8") as f:
yaml.dump(merged_config, f)

with open(config_file_path, "r", encoding="utf-8") as f:
yaml_config = yaml_.load(f, Loader=yaml_.FullLoader)

config = ConfigModel(**yaml_config)
logger.info("MarshoAI 支持新的 YAML 配置系统,若要使用,请将 MARSHOAI_USE_YAML_CONFIG 配置项设置为 true。")
15 changes: 4 additions & 11 deletions nonebot_plugin_marshoai/config_example.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
marshoai_token: "" # MarshoAI的认证token,默认为空。必填

# 支持的图片模型列表,默认包含gpt-4o和gpt-4o-mini。
marshoai_support_image_models:
- gpt-4o
- gpt-4o-mini
marshoai_token: "" # 调用API使用的访问token,默认为空。

marshoai_default_name: "marsho" # 默认名称,设定为marsho。

Expand All @@ -25,21 +20,19 @@ marshoai_prompt:

marshoai_additional_prompt: "" # 额外的提示内容,默认为空。

marshoai_poke_suffix: "揉了揉你的猫耳" # 当进行互动时附加的后缀
marshoai_poke_suffix: "揉了揉你的猫耳" # 当进行戳一戳时附加的后缀

marshoai_enable_nickname_tip: true # 是否启用昵称提示。

marshoai_enable_support_image_tip: true # 是否启用支持图片提示。

marshoai_enable_praises: true # 是否启用夸奖功能。

marshoai_enable_time_prompt: true # 是否启用时间提示功能。
marshoai_enable_praises: true # 是否启用夸赞名单功能。

marshoai_enable_tools: true # 是否启用工具支持。

marshoai_load_builtin_tools: true # 是否加载内置工具。

marshoai_azure_endpoint: "https://models.inference.ai.azure.com" # Azure API的地址
marshoai_azure_endpoint: "https://models.inference.ai.azure.com" # OpenAI 标准格式 API 的端点

# 模型参数配置
marshoai_temperature: null # 调整生成的多样性,未设置时使用默认值。
Expand Down

0 comments on commit 8221fa7

Please sign in to comment.