From aef1f0be5d67f4727ef1f09710d5cb651be06fdd Mon Sep 17 00:00:00 2001 From: Asankilp Date: Sat, 15 Feb 2025 13:47:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20System-As-User=20=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/start/install.md | 4 +++- docs/zh/start/install.md | 4 +++- nonebot_plugin_marshoai/config.py | 9 ++++++--- nonebot_plugin_marshoai/marsho.py | 2 +- nonebot_plugin_marshoai/util.py | 14 ++++++++++---- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/docs/en/start/install.md b/docs/en/start/install.md index 99a3c915..19157281 100644 --- a/docs/en/start/install.md +++ b/docs/en/start/install.md @@ -117,7 +117,8 @@ Add options in the `.env` file from the diagram below in nonebot2 project. | -------------------------------- | ------- | --------------------------------------- | --------------------------------------------------------------------------------------------- | | MARSHOAI_TOKEN | `str` | | The token needed to call AI API | | MARSHOAI_DEFAULT_MODEL | `str` | `gpt-4o-mini` | The default model of Marsho | -| MARSHOAI_PROMPT | `str` | Catgirl Marsho's character prompt | Marsho's basic system prompt **※Some models(o1 and so on) don't support it** | +| MARSHOAI_PROMPT | `str` | Catgirl Marsho's character prompt | Marsho's basic system prompt | +| MARSHOAI_SYSASUSER_PROMPT | `str` | `好的喵~` | Marsho 的 System-As-User 启用时,使用的 Assistant 消息 | | MARSHOAI_ADDITIONAL_PROMPT | `str` | | Marsho's external system prompt | | MARSHOAI_ENFORCE_NICKNAME | `bool` | `true` | Enforce user to set nickname or not | | MARSHOAI_POKE_SUFFIX | `str` | `揉了揉你的猫耳` | When double click Marsho who connected to OneBot adapter, the chat content. When it's empty string, double click function is off. Such as, the default content is `*[昵称]揉了揉你的猫耳。` | @@ -135,6 +136,7 @@ Add options in the `.env` file from the diagram below in nonebot2 project. | MARSHOAI_ENABLE_SUPPORT_IMAGE_TIP | `bool` | `true` | When on, if user send request with photo and model don't support that, remind the user | | MARSHOAI_ENABLE_NICKNAME_TIP | `bool` | `true` | When on, if user haven't set username, remind user to set | | MARSHOAI_ENABLE_PRAISES | `bool` | `true` | Turn on Praise list or not | +| MARSHOAI_ENABLE_SYSASUSER_PROMPT | `bool` | `false` | 是否启用 System-As-User 提示词 | | MARSHOAI_ENABLE_TIME_PROMPT | `bool` | `true` | Turn on real-time date and time (accurate to seconds) and lunar date system prompt | | MARSHOAI_ENABLE_TOOLS | `bool` | `false` | Turn on Marsho Tools or not | | MARSHOAI_ENABLE_PLUGINS | `bool` | `true` | Turn on Marsho Plugins or not diff --git a/docs/zh/start/install.md b/docs/zh/start/install.md index ff5080a3..e35d3f18 100644 --- a/docs/zh/start/install.md +++ b/docs/zh/start/install.md @@ -119,7 +119,8 @@ GitHub Models API 的限制较多,不建议使用,建议通过修改`MARSHOA | -------------------------------- | ------- | --------------------------------------- | --------------------------------------------------------------------------------------------- | | MARSHOAI_TOKEN | `str` | | 调用 AI API 所需的 token | | MARSHOAI_DEFAULT_MODEL | `str` | `gpt-4o-mini` | Marsho 默认调用的模型 | -| MARSHOAI_PROMPT | `str` | 猫娘 Marsho 人设提示词 | Marsho 的基本系统提示词 **※部分模型(o1等)不支持系统提示词。** | +| MARSHOAI_PROMPT | `str` | 猫娘 Marsho 人设提示词 | Marsho 的基本系统提示词 | +| MARSHOAI_SYSASUSER_PROMPT | `str` | `好的喵~` | Marsho 的 System-As-User 启用时,使用的 Assistant 消息 | | MARSHOAI_ADDITIONAL_PROMPT | `str` | | Marsho 的扩展系统提示词 | | MARSHOAI_ENFORCE_NICKNAME | `bool` | `true` | 是否强制用户设置昵称 | | MARSHOAI_POKE_SUFFIX | `str` | `揉了揉你的猫耳` | 对 Marsho 所连接的 OneBot 用户进行双击戳一戳时,构建的聊天内容。此配置项为空字符串时,戳一戳响应功能会被禁用。例如,默认值构建的聊天内容将为`*[昵称]揉了揉你的猫耳。` | @@ -135,6 +136,7 @@ GitHub Models API 的限制较多,不建议使用,建议通过修改`MARSHOA | MARSHOAI_ENABLE_SUPPORT_IMAGE_TIP | `bool` | `true` | 启用后用户发送带图请求时若模型不支持图片,则提示用户 | | MARSHOAI_ENABLE_NICKNAME_TIP | `bool` | `true` | 启用后用户未设置昵称时提示用户设置 | | MARSHOAI_ENABLE_PRAISES | `bool` | `true` | 是否启用夸赞名单功能 | +| MARSHOAI_ENABLE_SYSASUSER_PROMPT | `bool` | `false` | 是否启用 System-As-User 提示词 | | MARSHOAI_ENABLE_TIME_PROMPT | `bool` | `true` | 是否启用实时更新的日期与时间(精确到秒)与农历日期系统提示词 | | MARSHOAI_ENABLE_TOOLS | `bool` | `false` | 是否启用小棉工具 | | MARSHOAI_ENABLE_PLUGINS | `bool` | `true` | 是否启用小棉插件 | diff --git a/nonebot_plugin_marshoai/config.py b/nonebot_plugin_marshoai/config.py index 344120ef..3e9634ec 100644 --- a/nonebot_plugin_marshoai/config.py +++ b/nonebot_plugin_marshoai/config.py @@ -28,6 +28,8 @@ class ConfigModel(BaseModel): "当主人给你图片作为问题,并且你确实可以处理图片时,你必须以猫娘的说话方式进行回答," "当主人想要你回复一些有关 LaTeX 公式的时候,你切记一定不可以在公式中包含非 ASCII 字符。" ) + marshoai_sysasuser_prompt: str = "好的喵~" + marshoai_enable_sysasuser_prompt: bool = False marshoai_additional_prompt: str = "" marshoai_poke_suffix: str = "揉了揉你的猫耳" marshoai_enable_richtext_parse: bool = True @@ -146,6 +148,7 @@ if config.marshoai_use_yaml_config: config = ConfigModel(**yaml_config) else: - logger.info( - "MarshoAI 支持新的 YAML 配置系统,若要使用,请将 MARSHOAI_USE_YAML_CONFIG 配置项设置为 true。" - ) + # logger.info( + # "MarshoAI 支持新的 YAML 配置系统,若要使用,请将 MARSHOAI_USE_YAML_CONFIG 配置项设置为 true。" + # ) + pass diff --git a/nonebot_plugin_marshoai/marsho.py b/nonebot_plugin_marshoai/marsho.py index 1295336a..33a74c4f 100644 --- a/nonebot_plugin_marshoai/marsho.py +++ b/nonebot_plugin_marshoai/marsho.py @@ -303,7 +303,7 @@ async def marsho( # Sprint(choice) # 当tool_calls非空时,将finish_reason设置为TOOL_CALLS if choice.message.tool_calls != None and config.marshoai_fix_toolcalls: - choice.finish_reason = CompletionsFinishReason.TOOL_CALLS + choice.finish_reason = "tool_calls" logger.info(f"完成原因:{choice.finish_reason}") if choice.finish_reason == CompletionsFinishReason.STOPPED: # 当对话成功时,将dict的上下文添加到上下文类中 diff --git a/nonebot_plugin_marshoai/util.py b/nonebot_plugin_marshoai/util.py index 79ab6fb3..dca0b16e 100755 --- a/nonebot_plugin_marshoai/util.py +++ b/nonebot_plugin_marshoai/util.py @@ -9,7 +9,7 @@ import aiofiles # type: ignore import httpx import nonebot_plugin_localstore as store from azure.ai.inference.aio import ChatCompletionsClient -from azure.ai.inference.models import SystemMessage +from azure.ai.inference.models import AssistantMessage, SystemMessage, UserMessage from nonebot import get_driver from nonebot.log import logger from nonebot_plugin_alconna import Image as ImageMsg @@ -274,10 +274,16 @@ def get_prompt(model: str) -> List[Dict[str, Any]]: marsho_prompt = config.marshoai_prompt sysprompt_content = marsho_prompt + prompts prompt_list: List[Dict[str, Any]] = [] - if model not in OPENAI_NEW_MODELS: - prompt_list += [SystemMessage(content=sysprompt_content).as_dict()] + if not config.marshoai_enable_sysasuser_prompt: + if model not in OPENAI_NEW_MODELS: + prompt_list += [SystemMessage(content=sysprompt_content).as_dict()] + else: + prompt_list += [DeveloperMessage(content=sysprompt_content).as_dict()] else: - prompt_list += [DeveloperMessage(content=sysprompt_content).as_dict()] + prompt_list += [UserMessage(content=sysprompt_content).as_dict()] + prompt_list += [ + AssistantMessage(content=config.marshoai_sysasuser_prompt).as_dict() + ] return prompt_list