2026-04-08 11:44:24 +08:00
|
|
|
|
"""确保内置工具注册到 tool_registry(API 进程与 Celery Worker 均会导入执行流)。"""
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
|
|
import logging
|
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
_registered = False
|
|
|
|
|
|
|
2026-05-02 19:14:25 +08:00
|
|
|
|
_EXPECTED_BUILTIN = 18
|
2026-04-08 11:44:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ensure_builtin_tools_registered() -> None:
|
|
|
|
|
|
"""幂等:注册 file_write / system_info 等内置工具,供工作流 LLM 节点使用。"""
|
|
|
|
|
|
global _registered
|
|
|
|
|
|
if _registered:
|
|
|
|
|
|
return
|
|
|
|
|
|
from app.services.tool_registry import tool_registry
|
|
|
|
|
|
from app.services.builtin_tools import (
|
|
|
|
|
|
http_request_tool,
|
|
|
|
|
|
file_read_tool,
|
|
|
|
|
|
file_write_tool,
|
|
|
|
|
|
text_analyze_tool,
|
|
|
|
|
|
datetime_tool,
|
|
|
|
|
|
math_calculate_tool,
|
|
|
|
|
|
system_info_tool,
|
|
|
|
|
|
json_process_tool,
|
|
|
|
|
|
database_query_tool,
|
|
|
|
|
|
adb_log_tool,
|
2026-05-02 19:14:25 +08:00
|
|
|
|
schedule_create_tool,
|
|
|
|
|
|
schedule_list_tool,
|
|
|
|
|
|
schedule_delete_tool,
|
|
|
|
|
|
crypto_util_tool,
|
|
|
|
|
|
random_generate_tool,
|
|
|
|
|
|
send_email_tool,
|
|
|
|
|
|
url_parse_tool,
|
|
|
|
|
|
regex_test_tool,
|
2026-04-08 11:44:24 +08:00
|
|
|
|
HTTP_REQUEST_SCHEMA,
|
|
|
|
|
|
FILE_READ_SCHEMA,
|
|
|
|
|
|
FILE_WRITE_SCHEMA,
|
|
|
|
|
|
TEXT_ANALYZE_SCHEMA,
|
|
|
|
|
|
DATETIME_SCHEMA,
|
|
|
|
|
|
MATH_CALCULATE_SCHEMA,
|
|
|
|
|
|
SYSTEM_INFO_SCHEMA,
|
|
|
|
|
|
JSON_PROCESS_SCHEMA,
|
|
|
|
|
|
DATABASE_QUERY_SCHEMA,
|
|
|
|
|
|
ADB_LOG_SCHEMA,
|
2026-05-02 19:14:25 +08:00
|
|
|
|
SCHEDULE_CREATE_SCHEMA,
|
|
|
|
|
|
SCHEDULE_LIST_SCHEMA,
|
|
|
|
|
|
SCHEDULE_DELETE_SCHEMA,
|
|
|
|
|
|
CRYPTO_UTIL_SCHEMA,
|
|
|
|
|
|
RANDOM_GENERATE_SCHEMA,
|
|
|
|
|
|
SEND_EMAIL_SCHEMA,
|
|
|
|
|
|
URL_PARSE_SCHEMA,
|
|
|
|
|
|
REGEX_TEST_SCHEMA,
|
2026-04-08 11:44:24 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
tool_registry.register_builtin_tool("http_request", http_request_tool, HTTP_REQUEST_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("file_read", file_read_tool, FILE_READ_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("file_write", file_write_tool, FILE_WRITE_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("text_analyze", text_analyze_tool, TEXT_ANALYZE_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("datetime", datetime_tool, DATETIME_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("math_calculate", math_calculate_tool, MATH_CALCULATE_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("system_info", system_info_tool, SYSTEM_INFO_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("json_process", json_process_tool, JSON_PROCESS_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("database_query", database_query_tool, DATABASE_QUERY_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("adb_log", adb_log_tool, ADB_LOG_SCHEMA)
|
2026-05-02 19:14:25 +08:00
|
|
|
|
tool_registry.register_builtin_tool("schedule_create", schedule_create_tool, SCHEDULE_CREATE_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("schedule_list", schedule_list_tool, SCHEDULE_LIST_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("schedule_delete", schedule_delete_tool, SCHEDULE_DELETE_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("crypto_util", crypto_util_tool, CRYPTO_UTIL_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("random_generate", random_generate_tool, RANDOM_GENERATE_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("send_email", send_email_tool, SEND_EMAIL_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("url_parse", url_parse_tool, URL_PARSE_SCHEMA)
|
|
|
|
|
|
tool_registry.register_builtin_tool("regex_test", regex_test_tool, REGEX_TEST_SCHEMA)
|
2026-04-08 11:44:24 +08:00
|
|
|
|
_registered = True
|
|
|
|
|
|
|
|
|
|
|
|
n = tool_registry.builtin_tool_count()
|
|
|
|
|
|
names = tool_registry.builtin_tool_names()
|
|
|
|
|
|
pid = os.getpid()
|
|
|
|
|
|
if n < _EXPECTED_BUILTIN:
|
|
|
|
|
|
logger.warning(
|
|
|
|
|
|
"内置工具注册数量异常: pid=%s count=%s 期望>=%s names=%s(LLM 工具调用可能失效)",
|
|
|
|
|
|
pid,
|
|
|
|
|
|
n,
|
|
|
|
|
|
_EXPECTED_BUILTIN,
|
|
|
|
|
|
names,
|
|
|
|
|
|
)
|
|
|
|
|
|
else:
|
|
|
|
|
|
logger.info(
|
|
|
|
|
|
"内置工具就绪 pid=%s count=%s names=%s(Celery Worker 若缺此项日志,说明未加载 workflow_tasks / 未执行 bootstrap)",
|
|
|
|
|
|
pid,
|
|
|
|
|
|
n,
|
|
|
|
|
|
names,
|
|
|
|
|
|
)
|