From 8221fa79288df11218de954791ee6e24443172f1 Mon Sep 17 00:00:00 2001 From: Asankilp Date: Sun, 24 Nov 2024 11:23:03 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=E6=96=B0=E5=A2=9E=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=90=AF=E7=94=A8=E6=96=B0yaml=E9=85=8D=E7=BD=AE=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9=EF=BC=8C=E6=9B=B4=E6=96=B0readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 58 +++++++++++------ nonebot_plugin_marshoai/config.py | 69 +++++++++++---------- nonebot_plugin_marshoai/config_example.yaml | 15 ++--- 3 files changed, 79 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index c149a181..2106d7c6 100644 --- a/README.md +++ b/README.md @@ -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` | 是否加载内置工具包 | + ## ❤ 鸣谢&版权说明 @@ -162,4 +181,3 @@ _✨ 使用 OpenAI 标准格式 API 的聊天机器人插件 ✨_ - [x] 对聊天发起者的认知(认出是谁在问 Marsho)(初步实现) - [ ] 自定义 API 接入点的适配(不局限于GitHub Models) - [ ] 上下文通过数据库持久化存储 - diff --git a/nonebot_plugin_marshoai/config.py b/nonebot_plugin_marshoai/config.py index 7acf977e..df7c4e4a 100644 --- a/nonebot_plugin_marshoai/config.py +++ b/nonebot_plugin_marshoai/config.py @@ -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" @@ -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: @@ -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 @@ -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。") \ No newline at end of file diff --git a/nonebot_plugin_marshoai/config_example.yaml b/nonebot_plugin_marshoai/config_example.yaml index 454fe636..57164003 100644 --- a/nonebot_plugin_marshoai/config_example.yaml +++ b/nonebot_plugin_marshoai/config_example.yaml @@ -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。 @@ -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 # 调整生成的多样性,未设置时使用默认值。