feat(search): 添加SearXNG搜索引擎支持

在Web搜索工具中集成了SearXNG作为新的搜索引擎选项。

- 在 `WebSearchConfig` 中添加了 `searxng_instances` 和 `searxng_api_keys` 配置项。
- 更新了配置文件模板以包含新的SearXNG设置。
- 修复了 `main.py` 中管理器异步初始化调用方式的错误。
This commit is contained in:
minecraft1024a
2025-10-05 20:50:11 +08:00
parent 7a7f737f71
commit 34521b868d
4 changed files with 10 additions and 6 deletions

View File

@@ -548,6 +548,8 @@ class WebSearchConfig(ValidatedConfigBase):
enable_url_tool: bool = Field(default=True, description="启用URL工具") enable_url_tool: bool = Field(default=True, description="启用URL工具")
tavily_api_keys: list[str] = Field(default_factory=lambda: [], description="Tavily API密钥列表支持轮询机制") tavily_api_keys: list[str] = Field(default_factory=lambda: [], description="Tavily API密钥列表支持轮询机制")
exa_api_keys: list[str] = Field(default_factory=lambda: [], description="exa API密钥列表支持轮询机制") exa_api_keys: list[str] = Field(default_factory=lambda: [], description="exa API密钥列表支持轮询机制")
searxng_instances: list[str] = Field(default_factory=list, description="SearXNG 实例 URL 列表")
searxng_api_keys: list[str] = Field(default_factory=list, description="SearXNG 实例 API 密钥列表")
enabled_engines: list[str] = Field(default_factory=lambda: ["ddg"], description="启用的搜索引擎") enabled_engines: list[str] = Field(default_factory=lambda: ["ddg"], description="启用的搜索引擎")
search_strategy: Literal["fallback", "single", "parallel"] = Field(default="single", description="搜索策略") search_strategy: Literal["fallback", "single", "parallel"] = Field(default="single", description="搜索策略")

View File

@@ -414,13 +414,13 @@ MoFox_Bot(第三方修改版)
manager_init_tasks = [] manager_init_tasks = []
# 表情管理器 # 表情管理器
manager_init_tasks.append(self._safe_init("表情包管理器", get_emoji_manager().initialize)) manager_init_tasks.append(self._safe_init("表情包管理器", get_emoji_manager().initialize)())
# 情绪管理器 # 情绪管理器
manager_init_tasks.append(self._safe_init("情绪管理器", mood_manager.start)) manager_init_tasks.append(self._safe_init("情绪管理器", mood_manager.start)())
# 聊天管理器 # 聊天管理器
manager_init_tasks.append(self._safe_init("聊天管理器", get_chat_manager()._initialize)) manager_init_tasks.append(self._safe_init("聊天管理器", get_chat_manager()._initialize)())
# 等待所有管理器初始化完成 # 等待所有管理器初始化完成
results = await asyncio.gather(*manager_init_tasks, return_exceptions=True) results = await asyncio.gather(*manager_init_tasks, return_exceptions=True)
@@ -502,7 +502,7 @@ MoFox_Bot(第三方修改版)
except Exception as e: except Exception as e:
logger.error(f"日程表管理器初始化失败: {e}") logger.error(f"日程表管理器初始化失败: {e}")
async def _safe_init(self, component_name: str, init_func) -> callable: def _safe_init(self, component_name: str, init_func) -> callable:
"""安全初始化组件,捕获异常""" """安全初始化组件,捕获异常"""
async def wrapper(): async def wrapper():
try: try:

View File

@@ -72,7 +72,7 @@ class WEBSEARCHPLUGIN(BasePlugin):
logger.error(f"❌ 搜索引擎初始化失败: {e}", exc_info=True) logger.error(f"❌ 搜索引擎初始化失败: {e}", exc_info=True)
# Python包依赖列表 # Python包依赖列表
python_dependencies: list[PythonDependency] = [ python_dependencies: list[PythonDependency] = [ # noqa: RUF012
PythonDependency(package_name="asyncddgs", description="异步DuckDuckGo搜索库", optional=False), PythonDependency(package_name="asyncddgs", description="异步DuckDuckGo搜索库", optional=False),
PythonDependency( PythonDependency(
package_name="exa_py", package_name="exa_py",

View File

@@ -1,5 +1,5 @@
[inner] [inner]
version = "7.2.1" version = "7.2.2"
#----以下是给开发人员阅读的如果你只是部署了MoFox-Bot不需要阅读---- #----以下是给开发人员阅读的如果你只是部署了MoFox-Bot不需要阅读----
#如果你想要修改配置文件请递增version的值 #如果你想要修改配置文件请递增version的值
@@ -470,6 +470,8 @@ enable_web_search_tool = true # 是否启用联网搜索tool
enable_url_tool = true # 是否启用URL解析tool enable_url_tool = true # 是否启用URL解析tool
tavily_api_keys = ["None"]# Tavily API密钥列表支持轮询机制 tavily_api_keys = ["None"]# Tavily API密钥列表支持轮询机制
exa_api_keys = ["None"]# EXA API密钥列表支持轮询机制 exa_api_keys = ["None"]# EXA API密钥列表支持轮询机制
searxng_instances = [] # SearXNG 实例 URL 列表
searxng_api_keys = []# SearXNG 实例 API 密钥列表
# 搜索引擎配置 # 搜索引擎配置
enabled_engines = ["ddg"] # 启用的搜索引擎列表,可选: "exa", "tavily", "ddg","bing" enabled_engines = ["ddg"] # 启用的搜索引擎列表,可选: "exa", "tavily", "ddg","bing"