feat: Agent工具支持检查,不支持的工具提醒用户

This commit is contained in:
2026-04-14 16:43:30 +08:00
parent 8ddc50a0a9
commit 64f0aa0c0b

View File

@@ -201,8 +201,8 @@
</div> </div>
<div class="file-preview-area" id="filePreviewArea"></div> <div class="file-preview-area" id="filePreviewArea"></div>
<div class="quick-phrases-bar"> <div class="quick-phrases-bar">
<div class="tool-toggle"> <div class="tool-toggle" id="toolToggleArea">
<input type="checkbox" id="enableSearch" checked> <input type="checkbox" id="enableSearch" checked onchange="showToolWarning()">
<label for="enableSearch"><i class="ri-search-line"></i> 搜索</label> <label for="enableSearch"><i class="ri-search-line"></i> 搜索</label>
</div> </div>
<button class="add-phrase-btn" onclick="showAddPhraseModal()"><i class="ri-add-line"></i> 添加</button> <button class="add-phrase-btn" onclick="showAddPhraseModal()"><i class="ri-add-line"></i> 添加</button>
@@ -291,6 +291,8 @@
const res = await fetch('/api/v2/providers'); const res = await fetch('/api/v2/providers');
const data = await res.json(); const data = await res.json();
providers = data.providers || []; providers = data.providers || [];
// 加载后检查工具支持如果agents已加载
if (agents.length > 0) showToolWarning();
} catch (e) { console.error('加载Provider失败:', e); } } catch (e) { console.error('加载Provider失败:', e); }
} }
@@ -302,6 +304,52 @@
return provider?.supports_vision || false; return provider?.supports_vision || false;
} }
// 检查当前Agent是否支持某个工具
function checkAgentToolSupport(toolType) {
const agent = agents.find(a => a.id === currentAgentId);
if (!agent) return false;
const agentTools = agent.tools || [];
return agentTools.includes(toolType);
}
// 获取当前Agent不支持的工具列表用户已启用但Agent不支持
function getUnsupportedTools() {
const unsupported = [];
const enableSearch = document.getElementById('enableSearch').checked;
if (enableSearch && !checkAgentToolSupport('search')) {
unsupported.push('搜索');
}
return unsupported;
}
// 显示工具不支持提示
function showToolWarning() {
const unsupported = getUnsupportedTools();
const warningDiv = document.getElementById('tool-warning-tip');
if (unsupported.length > 0) {
const agent = agents.find(a => a.id === currentAgentId);
const agentName = agent?.display_name || agent?.name || '当前Agent';
const msg = `<i class="ri-alert-line"></i> <strong>${agentName}</strong> 不支持 <strong>${unsupported.join('、')}</strong> 工具请关闭或切换Agent`;
if (warningDiv) {
warningDiv.innerHTML = msg;
warningDiv.style.display = 'block';
} else {
const newWarning = document.createElement('div');
newWarning.id = 'tool-warning-tip';
newWarning.style.cssText = 'margin-top:8px;padding:8px 12px;background:#fff3cd;border:1px solid #ffc107;border-radius:6px;font-size:13px;color:#856404;';
newWarning.innerHTML = msg;
document.getElementById('toolToggleArea').appendChild(newWarning);
}
// 禁用发送按钮
document.getElementById('sendBtn').disabled = true;
} else {
if (warningDiv) warningDiv.style.display = 'none';
document.getElementById('sendBtn').disabled = false;
}
}
// 加载Agent // 加载Agent
async function loadAgents() { async function loadAgents() {
try { try {
@@ -311,6 +359,8 @@
const defaultAgent = agents.find(a => a.is_default) || agents[0]; const defaultAgent = agents.find(a => a.is_default) || agents[0];
if (defaultAgent) currentAgentId = defaultAgent.id; if (defaultAgent) currentAgentId = defaultAgent.id;
renderAgentSelect(); renderAgentSelect();
// 加载后检查工具支持
showToolWarning();
} catch (e) { console.error('加载Agent失败:', e); } } catch (e) { console.error('加载Agent失败:', e); }
} }
@@ -333,6 +383,8 @@
if (ws?.readyState === WebSocket.OPEN) ws.send(JSON.stringify({ action: 'switch_agent', agent_id: currentAgentId })); if (ws?.readyState === WebSocket.OPEN) ws.send(JSON.stringify({ action: 'switch_agent', agent_id: currentAgentId }));
await createNewConversation(); await createNewConversation();
showAgentSwitchNotice(); showAgentSwitchNotice();
// 切换Agent后检查工具支持
showToolWarning();
} }
} }
@@ -1034,6 +1086,16 @@
return; return;
} }
// 检查工具支持
const unsupported = getUnsupportedTools();
if (unsupported.length > 0) {
const agent = agents.find(a => a.id === currentAgentId);
const agentName = agent?.display_name || agent?.name || '当前Agent';
alert(`⚠️ ${agentName} 不支持 ${unsupported.join('、')} 工具\n\n请关闭不支持的工具或切换到支持该工具的Agent。`);
document.getElementById('sendBtn').disabled = false;
return;
}
document.getElementById('sendBtn').disabled = true; document.getElementById('sendBtn').disabled = true;
input.value = ''; input.value = '';
input.style.height = 'auto'; input.style.height = 'auto';