Merge pull request #11 from XuanRikka/main

添加了at时响应和控制是否启用的配置项(
This commit is contained in:
Akarin~ 2024-11-24 16:40:50 +08:00 committed by GitHub
commit 668193ba7b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 40 additions and 19 deletions

View File

@ -142,6 +142,7 @@ _✨ 使用 OpenAI 标准格式 API 的聊天机器人插件 ✨_
| --------------------- | ---------- | ----------- | ----------------- |
| MARSHOAI_DEFAULT_NAME | `str` | `marsho` | 调用 Marsho 默认的命令前缀 |
| MARSHOAI_ALIASES | `set[str]` | `set{"小棉"}` | 调用 Marsho 的命令别名 |
| MARSHOAI_AT | `bool` | `false` | 决定是否使用at触发
#### AI 调用

View File

@ -15,10 +15,11 @@ from azure.ai.inference.models import (
ChatCompletionsToolCall,
)
from azure.core.credentials import AzureKeyCredential
from nonebot import on_command, logger
from nonebot import on_command, on_message, logger
from nonebot.adapters import Message, Event
from nonebot.params import CommandArg
from nonebot.permission import SUPERUSER
from nonebot.rule import Rule, to_me
from nonebot_plugin_alconna import on_alconna, MsgTarget
from nonebot_plugin_alconna.uniseg import UniMessage, UniMsg
import nonebot_plugin_localstore as store
@ -29,32 +30,43 @@ from .metadata import metadata
from .models import MarshoContext, MarshoTools
from .util import *
async def at_enable():
return config.marshoai_at
driver = get_driver()
changemodel_cmd = on_command("changemodel", permission=SUPERUSER)
resetmem_cmd = on_command("reset")
changemodel_cmd = on_command("changemodel", permission=SUPERUSER, priority=10, block=True)
resetmem_cmd = on_command("reset", priority=10, block=True)
# setprompt_cmd = on_command("prompt",permission=SUPERUSER)
praises_cmd = on_command("praises", permission=SUPERUSER)
add_usermsg_cmd = on_command("usermsg", permission=SUPERUSER)
add_assistantmsg_cmd = on_command("assistantmsg", permission=SUPERUSER)
contexts_cmd = on_command("contexts", permission=SUPERUSER)
save_context_cmd = on_command("savecontext", permission=SUPERUSER)
load_context_cmd = on_command("loadcontext", permission=SUPERUSER)
praises_cmd = on_command("praises", permission=SUPERUSER, priority=10, block=True)
add_usermsg_cmd = on_command("usermsg", permission=SUPERUSER, priority=10, block=True)
add_assistantmsg_cmd = on_command("assistantmsg", permission=SUPERUSER, priority=10, block=True)
contexts_cmd = on_command("contexts", permission=SUPERUSER, priority=10, block=True)
save_context_cmd = on_command("savecontext", permission=SUPERUSER, priority=10, block=True)
load_context_cmd = on_command("loadcontext", permission=SUPERUSER, priority=10, block=True)
marsho_cmd = on_alconna(
Alconna(
config.marshoai_default_name,
Args["text?", AllParam],
),
aliases=config.marshoai_aliases,
priority=10,
block=True
)
marsho_at = on_message(rule=to_me()&at_enable, priority=11)
nickname_cmd = on_alconna(
Alconna(
"nickname",
Args["name?", str],
)
),
priority = 10,
block = True
)
refresh_data_cmd = on_command("refresh_data", permission=SUPERUSER)
refresh_data_cmd = on_command("refresh_data", permission=SUPERUSER, priority=10, block=True)
command_start = driver.config.command_start
model_name = config.marshoai_default_model
context = MarshoContext()
tools = MarshoTools()
@ -63,6 +75,7 @@ endpoint = config.marshoai_azure_endpoint
client = ChatCompletionsClient(endpoint=endpoint, credential=AzureKeyCredential(token))
target_list = [] # 记录需保存历史上下文的列表
@driver.on_startup
async def _preload_tools():
tools_dir = store.get_plugin_data_dir() / "tools"
@ -71,6 +84,7 @@ async def _preload_tools():
tools.load_tools(Path(__file__).parent / "tools")
tools.load_tools(store.get_plugin_data_dir() / "tools")
@add_usermsg_cmd.handle()
async def add_usermsg(target: MsgTarget, arg: Message = CommandArg()):
if msg := arg.extract_plain_text():
@ -89,7 +103,7 @@ async def add_assistantmsg(target: MsgTarget, arg: Message = CommandArg()):
@praises_cmd.handle()
async def praises():
#await UniMessage(await tools.call("marshoai-weather.get_weather", {"location":"杭州"})).send()
# await UniMessage(await tools.call("marshoai-weather.get_weather", {"location":"杭州"})).send()
await praises_cmd.finish(build_praises())
@ -114,7 +128,7 @@ async def save_context(target: MsgTarget, arg: Message = CommandArg()):
@load_context_cmd.handle()
async def load_context(target: MsgTarget, arg: Message = CommandArg()):
if msg := arg.extract_plain_text():
await get_backup_context(target.id, target.private) # 为了将当前会话添加到"已恢复过备份"的列表而添加防止上下文被覆盖好奇怪QwQ
await get_backup_context(target.id, target.private) # 为了将当前会话添加到"已恢复过备份"的列表而添加防止上下文被覆盖好奇怪QwQ
context.set_context(
await load_context_from_json(msg, "contexts"), target.id, target.private
)
@ -160,9 +174,12 @@ async def refresh_data():
await refresh_data_cmd.finish("已刷新数据")
@marsho_at.handle()
@marsho_cmd.handle()
async def marsho(target: MsgTarget, event: Event, text: Optional[UniMsg] = None):
global target_list
if event.get_message().extract_plain_text() and (not text and event.get_message().extract_plain_text() != config.marshoai_default_name):
text = event.get_message()
if not text:
# 发送说明
await UniMessage(metadata.usage + "\n当前使用的模型:" + model_name).send()
@ -175,9 +192,9 @@ async def marsho(target: MsgTarget, event: Event, text: Optional[UniMsg] = None)
nickname_prompt = f"\n*此消息的说话者:{user_nickname}*"
else:
nickname_prompt = ""
#用户名无法获取,暂时注释
#user_nickname = event.sender.nickname # 未设置昵称时获取用户名
#nickname_prompt = f"\n*此消息的说话者:{user_nickname}"
# 用户名无法获取,暂时注释
# user_nickname = event.sender.nickname # 未设置昵称时获取用户名
# nickname_prompt = f"\n*此消息的说话者:{user_nickname}"
if config.marshoai_enable_nickname_tip:
await UniMessage(
"*你未设置自己的昵称。推荐使用'nickname [昵称]'命令设置昵称来获得个性化(可能)回答。"
@ -242,14 +259,14 @@ async def marsho(target: MsgTarget, event: Event, text: Optional[UniMsg] = None)
response = await make_chat(
client=client,
model_name=model_name,
msg = context_msg + [UserMessage(content=usermsg)] + tool_msg,
msg=context_msg + [UserMessage(content=usermsg)] + tool_msg,
tools=tools.get_tools_list()
)
)
choice = response.choices[0]
context.append(
UserMessage(content=usermsg).as_dict(), target.id, target.private
)
#context.append(tool_msg, target.id, target.private)
# context.append(tool_msg, target.id, target.private)
context.append(choice.message.as_dict(), target.id, target.private)
await UniMessage(str(choice.message.content)).send(reply_to=True)
except Exception as e:

View File

@ -12,6 +12,7 @@ class ConfigModel(BaseModel):
marshoai_token: str = ""
# marshoai_support_image_models: list = ["gpt-4o","gpt-4o-mini"]
marshoai_default_name: str = "marsho"
marshoai_at: bool = False
marshoai_aliases: set[str] = {
"小棉",
}

View File

@ -6,6 +6,8 @@ marshoai_default_name: "marsho" # 默认名称设定为marsho。
marshoai_aliases:
- 小棉
marshoai_at: false # 决定是否开启at响应
marshoai_default_model: "gpt-4o-mini" # 默认模型设定为gpt-4o-mini。
# 主提示词定义了Marsho的性格和行为包含多语言名字翻译规则和对特定问题的回答约束。