☸ 子墨 OPC Portal

Multi-Agent Orchestration · 三个AI智能体协同平台
🧪 lab01🏠 返回首页v4.0
📊 控制台 0
💬 AGI群聊 0
📄 报告 0
📈 交易数据 0
📈 茶市场分析
✍️ 茶品牌文案
🏥 茶企诊断
🔌 API

📋 任务管理

正在加载MT5交易数据...

📄 已生成的报告

正在加载...
💬
三个AI智能体正在等待讨论...
点击下方话题发起一场圆桌讨论,或直接输入消息参与对话

📈 茶行业市场分析

输入茶叶品类或市场关键词,AI 自动生成专业分析报告

✍️ 茶产品文案生成

AI 自动生成品牌 Slogan、产品描述、宣传语、社交媒体文案

🏥 茶企数字化诊断

AI 自动评估数字化成熟度,给出分阶段行动路线图

🔌 对外 API 接口

所有接口可通过 opc.hotxin.com 直接调用

GET /api/v1/tea/market?q=主题
茶行业市场分析 — 返回结构化市场报告
GET /api/v1/tea/brand?name=大红袍
茶品牌文案生成
GET /api/v1/tea/diagnose?company=企业名
茶企数字化诊断
GET /api/v1/mt5/summary
MT5 交易概览
GET /api/v1/mt5/overview
MT5 详细交易数据
'); } catch(e) { alert('查看失败: '+e.message); } } // ── Enhanced renderTasks with log button ── const origRenderTasks = renderTasks; renderTasks = function(tasks) { const sel = document.getElementById('taskAssignee'); sel.innerHTML = ''; const unique = [...new Set(tasks.map(t=>t.assignee).filter(Boolean))]; unique.forEach(aid => { const a = AGENTS[aid]; sel.innerHTML += ''; }); let filtered = tasks; if (currentFilter !== 'all') filtered = tasks.filter(t => t.status === currentFilter); const list = document.getElementById('taskList'); if (filtered.length === 0) { list.innerHTML = '
暂无任务
'; return; } list.innerHTML = filtered.map(t => { const a = AGENTS[t.assignee]; const astr = a ? a.emoji+' '+a.name : t.assignee||'—'; const sM = { pending:'sb-pending', in_progress:'sb-progress', completed:'sb-done', cancelled:'sb-cancel' }; const sT = { pending:'待处理', in_progress:'进行中', completed:'已完成', cancelled:'已取消' }; const hasLog = t.log || t.report_url; return '
' + '
' + '
'+esc(t.title)+' '+astr+'
' + (t.description ? '
'+esc(t.description)+'
' : '') + '
'+sT[t.status]+' · '+t.id+' · '+new Date(t.created_at).toLocaleString('zh-CN')+'
' + (t.result ? '
✅ '+esc(t.result)+'
' : '') + (hasLog ? '
📋 查看执行日志
' : '') + '
' + '
' + (t.status==='pending' ? '' : '') + (t.status==='pending'||t.status==='in_progress' ? '' : '') + (t.status!=='completed'&&t.status!=='cancelled' ? '' : '') + '' + '
' + '
'; }).join(''); }; async function viewTaskLog(taskId) { try { const r = await fetch('/api/tasks/'+taskId+'/log'); const data = await r.json(); const win = window.open('', '_blank'); const logHtml = data.log ? '
'+esc(data.log)+'
' : '

暂无日志

'; win.document.write('执行日志 - '+taskId+'

📋 执行日志

任务ID: '+taskId+'

'+esc(data.result)+'

'+logHtml+' '); } catch(e) { alert('查看失败: '+e.message); } }