diff --git a/nonebot_plugin_marshoai/azure.py b/nonebot_plugin_marshoai/azure.py index cf380e25..49f27aec 100644 --- a/nonebot_plugin_marshoai/azure.py +++ b/nonebot_plugin_marshoai/azure.py @@ -407,7 +407,7 @@ async def marsho( ) # 获取返回值 else: if caller := get_function_calls().get( - tool_call.function.name.replace("-", ".") + tool_call.function.name ): logger.debug(f"调用插件函数 {caller.full_name}") # 权限检查,规则检查 TODO diff --git a/nonebot_plugin_marshoai/plugin/func_call/caller.py b/nonebot_plugin_marshoai/plugin/func_call/caller.py index b04ba987..2f5fbda4 100644 --- a/nonebot_plugin_marshoai/plugin/func_call/caller.py +++ b/nonebot_plugin_marshoai/plugin/func_call/caller.py @@ -142,7 +142,7 @@ class Caller: module_name = "" self.module_name = module_name - _caller_data[self.full_name] = self + _caller_data[self.aifc_name] = self logger.opt(colors=True).debug( f"加载函数 {self.full_name}: {self._description}" ) diff --git a/nonebot_plugin_marshoai/plugins/marshoai_memory/__init__.py b/nonebot_plugin_marshoai/plugins/marshoai_memory/__init__.py index 5f35252c..d38cf843 100644 --- a/nonebot_plugin_marshoai/plugins/marshoai_memory/__init__.py +++ b/nonebot_plugin_marshoai/plugins/marshoai_memory/__init__.py @@ -1,14 +1,19 @@ import json from pathlib import Path -from nonebot import require -from nonebot_plugin_localstore import get_plugin_data_file # type: ignore +from azure.ai.inference.models import UserMessage +from nonebot import get_driver, logger, require +from nonebot_plugin_localstore import get_plugin_data_file -from nonebot_plugin_marshoai.plugin import ( # type: ignore - PluginMetadata, - on_function_call, -) -from nonebot_plugin_marshoai.plugin.func_call.params import String # type: ignore +require("nonebot_plugin_apscheduler") +require("nonebot_plugin_marshoai") +from nonebot_plugin_apscheduler import scheduler + +from nonebot_plugin_marshoai.azure import client +from nonebot_plugin_marshoai.plugin import PluginMetadata, on_function_call +from nonebot_plugin_marshoai.plugin.func_call.params import String + +from .config import plugin_config __marsho_meta__ = PluginMetadata( name="记忆保存", @@ -21,6 +26,7 @@ if not Path(memory_path).exists(): with open(memory_path, "w", encoding="utf-8") as f: json.dump({}, f, ensure_ascii=False, indent=4) # print(memory_path) +driver = get_driver() @on_function_call( @@ -45,7 +51,7 @@ async def write_memory(memory: str, user_id: str): @on_function_call( - description="当用户与你发起对话时,你需要回忆有关他的一切,因此调用此函数读取记忆内容" + description="你需要回忆有关用户的一些知识时,调用此函数读取记忆内容,当用户问问题的时候也尽量调用此函数参考" ).params(user_id=String(description="你想读取记忆的人的id")) async def read_memory(user_id: str): with open(memory_path, "r", encoding="utf-8") as f: @@ -61,5 +67,30 @@ async def organize_memories(): with open(memory_path, "r", encoding="utf-8") as f: memory_data = json.load(f) for i in memory_data: - ... - # TODO 用大模型对记忆进行整理 + memory_data_ = "\n".join(memory_data[i]) + msg = f"这是一些大模型记忆信息,请你保留重要内容,尽量减少无用的记忆后重新输出记忆内容,浓缩为一行:\n{memory_data_}" + res = await client.complete(UserMessage(content=msg)) + try: + memory = res.choices[0].message.content # type: ignore + memory_data[i] = memory + except AttributeError: + logger.error(f"整理关于{i}的记忆时出错:{res}") + + with open(memory_path, "w", encoding="utf-8") as f: + json.dump(memory_data, f, ensure_ascii=False, indent=4) + + +if plugin_config.marshoai_plugin_memory_scheduler: + + @driver.on_startup + async def _(): + logger.info("小绵定时记忆整理已启动!") + scheduler.add_job( + organize_memories, + "cron", + hour="0", + minute="0", + second="0", + day="*", + id="organize_memories", + ) diff --git a/nonebot_plugin_marshoai/plugins/marshoai_memory/config.py b/nonebot_plugin_marshoai/plugins/marshoai_memory/config.py new file mode 100644 index 00000000..c72c6e5c --- /dev/null +++ b/nonebot_plugin_marshoai/plugins/marshoai_memory/config.py @@ -0,0 +1,9 @@ +from nonebot import get_plugin_config, logger +from pydantic import BaseModel + + +class ConfigModel(BaseModel): + marshoai_plugin_memory_scheduler: bool = True + + +plugin_config: ConfigModel = get_plugin_config(ConfigModel) diff --git a/pyproject.toml b/pyproject.toml index 5d2f8b71..a51d1d41 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,8 @@ dependencies = [ "aiofiles>=24.1.0", "sumy>=0.11.0", "azure-ai-inference>=1.0.0b6", - "watchdog>=6.0.0" + "watchdog>=6.0.0", + "nonebot-plugin-apscheduler>=0.5.0" ] license = { text = "MIT, Mulan PSL v2" }