diff --git a/astrbot/core/provider/func_tool_manager.py b/astrbot/core/provider/func_tool_manager.py index 0022d2773..42b88cae2 100644 --- a/astrbot/core/provider/func_tool_manager.py +++ b/astrbot/core/provider/func_tool_manager.py @@ -2,7 +2,7 @@ import json import textwrap from typing import Dict, List, Awaitable from dataclasses import dataclass - +from astrbot import logger @dataclass class FuncTool: @@ -46,14 +46,16 @@ class FuncCall: desc: str, handler: Awaitable, ) -> None: - """ - 为函数调用(function-calling / tools-use)添加工具。 + """添加函数调用工具 @param name: 函数名 @param func_args: 函数参数列表,格式为 [{"type": "string", "name": "arg_name", "description": "arg_description"}, ...] @param desc: 函数描述 @param func_obj: 处理函数 """ + # check if the tool has been added before + self.remove_func(name) + params = { "type": "object", # hard-coded here "properties": {}, @@ -70,13 +72,14 @@ class FuncCall: handler=handler, ) self.func_list.append(_func) + logger.info(f"添加了函数调用工具({len(self.func_list)}): {name} - {desc}") def remove_func(self, name: str) -> None: """ 删除一个函数调用工具。 """ for i, f in enumerate(self.func_list): - if f["name"] == name: + if f.name == name: self.func_list.pop(i) break diff --git a/astrbot/core/star/register/star_handler.py b/astrbot/core/star/register/star_handler.py index 4e2f9d176..86620cae6 100644 --- a/astrbot/core/star/register/star_handler.py +++ b/astrbot/core/star/register/star_handler.py @@ -360,8 +360,6 @@ def register_llm_tool(name: str = None): ) md = get_handler_or_create(awaitable, EventType.OnCallingFuncToolEvent) llm_tools.add_func(llm_tool_name, args, docstring.description, md.handler) - - logger.debug(f"LLM 函数工具 {llm_tool_name} 已注册") return awaitable return decorator diff --git a/astrbot/core/star/star_manager.py b/astrbot/core/star/star_manager.py index 4a7938605..9fa27798b 100644 --- a/astrbot/core/star/star_manager.py +++ b/astrbot/core/star/star_manager.py @@ -485,7 +485,7 @@ class PluginManager: for handler in star_handlers_registry.get_handlers_by_module_name( plugin_module_path ): - logger.debug(f"unbind handler {handler.handler_name} from {plugin_name}") + logger.info(f"移除了插件 {plugin_name} 的处理函数 {handler.handler_name} ({len(star_handlers_registry)})") star_handlers_registry.remove(handler) keys_to_delete = [ k @@ -493,8 +493,6 @@ class PluginManager: if k.startswith(plugin_module_path) ] for k in keys_to_delete: - v = star_handlers_registry.star_handlers_map[k] - logger.debug(f"unbind handler {v.handler_name} from {plugin_name} (map)") try: del star_handlers_registry.star_handlers_map[k] except KeyError: