智能体大模型接口全面切换 + 新增视觉智能体
- 全部 AI Worker 切换到 deepseek/deepseek-v4-flash(api.deepseek.com,实测757ms/次,成本降40倍) - 团队模板默认 provider/model 同步改为 deepseek/deepseek-v4-flash - 新增视觉智能体「视觉分析师」:autodl/qwen3.6-plus 多模态 - llm_gateway: chat_vision 多模态调用(URL/base64) + 空content自动重试 + 聚合后端路由容错 - engine: 任务描述支持  图片注入(视觉任务直接派活) - API: POST /api/workers/<id>/vision_test;前端 Worker 页新增🖼️视觉测试按钮 - 实测: 截图结构化分析 ✅ 雪羊图片识别 ✅ 辩论模式DeepSeek 55秒完成
This commit is contained in:
@@ -623,6 +623,7 @@ async function pageWorkers() {
|
||||
<td class="mono">${w.task_cost_limit ? '单任务 ¥' + w.task_cost_limit : '—'}<br>${w.monthly_cost_limit ? '月 ¥' + w.monthly_cost_limit : ''}</td>
|
||||
<td><span class="badge ${w.status === 'enabled' ? 'st-done' : 'st-cancelled'}">${w.status === 'enabled' ? '启用' : '停用'}</span></td>
|
||||
<td><button class="btn sm" onclick="testWorker(${w.id})">测试</button>
|
||||
<button class="btn sm" onclick="visionTest(${w.id})">🖼️ 视觉测试</button>
|
||||
<button class="btn sm" onclick="openWorkerModal(${JSON.stringify(w).replace(/"/g,'"')}, ${JSON.stringify(ps.data).replace(/"/g,'"')})">编辑</button>
|
||||
<button class="btn sm danger" onclick="delWorker(${w.id})">删除</button></td>
|
||||
</tr>`).join('') || '<tr><td colspan="9" class="empty">还没有 Worker,注册第一个虚拟员工吧</td></tr>'}
|
||||
@@ -636,6 +637,27 @@ async function testWorker(wid) {
|
||||
catch (e) { toast('❌ ' + e.message, 'err'); }
|
||||
}
|
||||
|
||||
async function visionTest(wid) {
|
||||
openModal(`
|
||||
<h3>🖼️ 视觉能力测试</h3>
|
||||
<div class="tab-note">多模态智能体:输入图片 URL 与问题,验证图像理解能力。示例:<br>
|
||||
https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/640px-Cat03.jpg</div>
|
||||
<label>图片 URL</label><input id="vt-url" placeholder="https://...">
|
||||
<label>问题</label><textarea id="vt-q" rows="2">请描述这张图片的内容,并给出专业分析。</textarea>
|
||||
<button class="btn primary" id="vt-go">🚀 开始分析</button>
|
||||
<div id="vt-out" style="margin-top:10px"></div>`);
|
||||
$('#vt-go').addEventListener('click', async () => {
|
||||
const url = $('#vt-url').value.trim();
|
||||
if (!url) return toast('请填写图片 URL', 'err');
|
||||
$('#vt-out').innerHTML = '<div class="tab-note"><span class="spin"></span> 视觉分析中(多模态调用约 10-60 秒)…</div>';
|
||||
try {
|
||||
const r = await api(`/api/workers/${wid}/vision_test`, {method:'POST', body: {image_url: url, question: $('#vt-q').value}});
|
||||
$('#vt-out').innerHTML = `<pre style="white-space:pre-wrap;background:#f6f8fa;padding:10px;border-radius:8px;max-height:320px;overflow:auto">${esc(r.data.text)}</pre>
|
||||
<div class="tab-note">tokens ${r.data.total_tokens} · 成本 ${fmtMoney(r.data.cost)} · 延迟 ${r.data.latency_ms ?? '—'}ms</div>`;
|
||||
} catch (e) { $('#vt-out').innerHTML = `<div class="err">${esc(e.message)}</div>`; }
|
||||
});
|
||||
}
|
||||
|
||||
async function delWorker(wid) {
|
||||
if (!confirm('确认删除该 Worker?(历史任务将解除指派)')) return;
|
||||
await api(`/api/workers/${wid}`, {method:'DELETE'});
|
||||
|
||||
Reference in New Issue
Block a user