refactor: 内置搜索与 SearXNG 参数完全独立

内置模式: maxResults=30, fetchTop=5 固定默认值, 不读取 SearXNG 配置

SearXNG 模式: max_results/fetch_count 由配置面板控制

统一使用 useSearXNG 变量判断模式
This commit is contained in:
thzxx
2026-07-07 22:31:28 +08:00
parent b07e226bc1
commit dc5f8aedcd
+13 -7
View File
@@ -247,19 +247,25 @@ export class WebSearchTool implements IMetonaTool {
async execute(args: Record<string, unknown>, _context: ToolExecutionContext): Promise<unknown> { async execute(args: Record<string, unknown>, _context: ToolExecutionContext): Promise<unknown> {
const query = args.query as string; const query = args.query as string;
// 读取 SearXNG 配置(提前读取,使工具参数默认值与配置一致) // 读取 SearXNG 配置
const searxngConfig = this.readSearXNGConfig(); const searxngConfig = this.readSearXNGConfig();
const useSearXNG = searxngConfig.enabled && !!searxngConfig.url;
// max_results: 仅由配置面板控制,AI 不可覆盖 // 两个模式参数完全独立:
const maxResults = Math.min(50, Math.max(1, searxngConfig.max_results > 0 ? searxngConfig.max_results : 30)); // - 内置模式:固定默认值 maxResults=30, fetchTop=5
// - SearXNG 模式:由配置面板控制
const maxResults = useSearXNG
? Math.min(50, Math.max(1, searxngConfig.max_results > 0 ? searxngConfig.max_results : 30))
: 30;
const timeRange = (args.time_range as string) ?? ''; const timeRange = (args.time_range as string) ?? '';
const enhanceSnippets = (args.enhance_snippets as boolean) ?? true; const enhanceSnippets = (args.enhance_snippets as boolean) ?? true;
// fetch_top: 仅由配置面板控制,AI 不可覆盖 const fetchTop = useSearXNG
const fetchTop = Math.min(8, Math.max(3, searxngConfig.fetch_count > 0 ? searxngConfig.fetch_count : 5)); ? Math.min(8, Math.max(3, searxngConfig.fetch_count > 0 ? searxngConfig.fetch_count : 5))
: 5;
logTool('web_search', `Config: maxResults=${maxResults}, fetchTop=${fetchTop}, searxng=${searxngConfig.enabled}`); logTool('web_search', `Mode=${useSearXNG ? 'searxng' : 'builtin'}, maxResults=${maxResults}, fetchTop=${fetchTop}`);
// 缓存检查(key 含模式 + maxResults + fetchTop,避免配置变更后返回旧缓存) // 缓存检查(key 含模式 + maxResults + fetchTop,避免配置变更后返回旧缓存)
const cacheKey = `${searxngConfig.enabled ? 'searxng' : 'builtin'}:${maxResults}:${fetchTop}:${normalizeUrl(query).toLowerCase()}`; const cacheKey = `${searxngConfig.enabled ? 'searxng' : 'builtin'}:${maxResults}:${fetchTop}:${normalizeUrl(query).toLowerCase()}`;
@@ -273,7 +279,7 @@ export class WebSearchTool implements IMetonaTool {
let mode: string; let mode: string;
let engineStats: Record<string, string>; let engineStats: Record<string, string>;
if (searxngConfig.enabled && searxngConfig.url) { if (useSearXNG) {
const searxResult = await this.searchSearXNG(query, searxngConfig, maxResults, timeRange); const searxResult = await this.searchSearXNG(query, searxngConfig, maxResults, timeRange);
results = searxResult.results; results = searxResult.results;
mode = 'searxng'; mode = 'searxng';