真实日志界面重构:会话核心字段映射与脱敏展示

By admin, 15 April, 2026
角色
assistant
content

```json
{
"summary": "根据真实日志结构重做了界面:以会话日志为核心,映射 id、timestamp、serviceType、type、modelConfig、prompt、toolCalls、error、duration 等真实字段;对受保护的系统提示内容做脱敏折叠展示;突出工具调用结果与错误状态,并保留最新在前的简约时间轴布局。",
"widget": {
"type": "full-html",
"html": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>AI 应用真实日志时间轴</title>\n <script src=\"https://cdn.tailwindcss.com\"></script>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link href=\"https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;8…\" rel=\"stylesheet\">\n <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.c…\">\n <style>\n :root{\n --bg:#f6f8fb;\n --panel:#ffffff;\n --line:#d9e2ec;\n --text:#0f172a;\n --muted:#64748b;\n --soft:#f8fafc;\n --border:#e2e8f0;\n --ok:#059669;\n --warn:#d97706;\n --error:#dc2626;\n --info:#2563eb;\n --violet:#7c3aed;\n }\n *{box-sizing:border-box}\n body{margin:0;background:var(--bg);color:var(--text);font-family:'Manrope',sans-serif}\n .mono{font-family:'IBM Plex Mono',monospace}\n .card{background:var(--panel);border:1px solid var(--border);border-radius:20px}\n .timeline{position:relative}\n .timeline::before{content:'';position:absolute;left:18px;top:0;bottom:0;width:2px;background:var(--line)}\n .item{position:relative;padding-left:56px}\n .dot{position:absolute;left:0;top:6px;width:36px;height:36px;border-radius:9999px;display:flex;align-items:center;justify-content:center;background:#fff;border:2px solid var(--border);z-index:1}\n .pill{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.03em}\n .p-chat{background:#dbeafe;color:#1d4ed8}\n .p-template{background:#ede9fe;color:#6d28d9}\n .p-ok{background:#dcfce7;color:#15803d}\n .p-error{background:#fee2e2;color:#b91c1c}\n .p-tool{background:#e0f2fe;color:#0369a1}\n .p-mask{background:#f1f5f9;color:#475569}\n .label{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#64748b}\n .code{background:var(--soft);border:1px solid var(--border);border-radius:14px}\n details summary{list-style:none;cursor:pointer}\n details summary::-webkit-details-marker{display:none}\n @media (max-width:640px){\n .timeline::before{left:15px}\n .item{padding-left:48px}\n .dot{width:30px;height:30px;font-size:12px}\n }\n </style>\n</head>\n<body>\n <main class=\"max-w-6xl mx-auto px-4 py-8 sm:px-6 sm:py-10\">\n <header class=\"mb-8\">\n <div class=\"card p-6 sm:p-8\">\n <div class=\"flex flex-col gap-6 lg:flex-row lg:items-end lg:justify-between\">\n <div>\n <p class=\"text-sm font-semibold text-slate-500 tracking-wide uppercase\">真实日志映射视图</p>\n <h1 class=\"mt-2 text-3xl sm:text-4xl font-extrabold tracking-tight text-slate-900\">AI 应用运行日志</h1>\n <p class=\"mt-3 text-sm sm:text-base text-slate-500 max-w-3xl\">针对真实字段结构调整界面,聚焦会话类型、模型配置、用户输入、工具调用、执行错误与耗时。对受保护配置做脱敏展示,避免直接暴露敏感内容。</p>\n </div>\n <div class=\"grid grid-cols-2 sm:grid-cols-4 gap-3 min-w-0 lg:min-w-[420px]\">\n <div class=\"rounded-2xl bg-slate-50 px-4 py-3 border border-slate-200\">\n <div class=\"text-xs text-slate-500\">日志数</div>\n <div class=\"mt-1 text-xl font-bold text-slate-900\">4</div>\n </div>\n <div class=\"rounded-2xl bg-slate-50 px-4 py-3 border border-slate-200\">\n <div class=\"text-xs text-slate-500\">工具调用</div>\n <div class=\"mt-1 text-xl font-bold text-sky-600\">2</div>\n </div>\n <div class=\"rounded-2xl bg-slate-50 px-4 py-3 border border-slate-200\">\n <div class=\"text-xs text-slate-500\">错误数</div>\n <div class=\"mt-1 text-xl font-bold text-red-600\">1</div>\n </div>\n <div class=\"rounded-2xl bg-slate-50 px-4 py-3 border border-slate-200\">\n <div class=\"text-xs text-slate-500\">平均耗时</div>\n <div class=\"mt-1 text-xl font-bold text-slate-900\">37.9s</div>\n </div>\n </div>\n </div>\n </div>\n </header>\n\n <section class=\"timeline space-y-5\">\n <article class=\"item\">\n <div class=\"dot text-red-600\"><i class=\"fa-solid fa-triangle-exclamation\"></i></div>\n <div class=\"card p-5 sm:p-6\">\n <div class=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div class=\"min-w-0\">\n <div class=\"flex flex-wrap gap-2\">\n <span class=\"pill p-chat\"><i class=\"fa-solid fa-comments\"></i>chat</span>\n <span class=\"pill p-template\"><i class=\"fa-solid fa-layer-group\"></i>custom-template</span>\n <span class=\"pill p-error\"><i class=\"fa-solid fa-circle-xmark\"></i>执行异常</span>\n </div>\n <h2 class=\"mt-3 text-xl font-bold text-slate-900\">调用天气工具后发生函数调用错误</h2>\n <p class=\"mt-2 text-sm text-slate-500\">本次会话包含工具调用结果,但最终执行阶段返回 400 错误。界面重点突出工具结果与错误信息并列,便于快速定位问题链路。</p>\n </div>\n <div class=\"text-sm text-slate-500 mono shrink-0\">2026-04-15 15:07:29.943Z</div>\n </div>\n\n <div class=\"mt-5 grid gap-4 xl:grid-cols-[1.15fr_.85fr]\">\n <div class=\"space-y-4\">\n <div class=\"code p-4\">\n <div class=\"label mb-3\">基础信息</div>\n <div class=\"grid sm:grid-cols-2 gap-3 text-sm text-slate-700\">\n <div><span class=\"text-slate-500\">ID:</span><span class=\"mono\">mo06pf6fd8j222</span></div>\n <div><span class=\"text-slate-500\">耗时:</span><span class=\"mono\">15114ms</span></div>\n <div><span class=\"text-slate-500\">平台:</span><span>xinshi</span></div>\n <div><span class=\"text-slate-500\">模型:</span><span class=\"mono\">gemini-3-flash-preview</span></div>\n </div>\n </div>\n\n <div class=\"code p-4\">\n <div class=\"label mb-3\">模型配置</div>\n <div class=\"grid grid-cols-2 lg:grid-cols-3 gap-3 text-sm\">\n <div><div class=\"text-slate-500\">temperature</div><div class=\"mono font-semibold\">0</div></div>\n <div><div class=\"text-slate-500\">top_p</div><div class=\"mono font-semibold\">0.9</div></div>\n <div><div class=\"text-slate-500\">max_tokens</div><div class=\"mono font-semibold\">64000</div></div>\n <div><div class=\"text-slate-500\">stream</div><div class=\"mono font-semibold\">true</div></div>\n <div><div class=\"text-slate-500\">thinking</div><div class=\"mono font-semibold\">true</div></div>\n <div><div class=\"text-slate-500\">serviceType</div><div class=\"font-semibold\">chat</div></div>\n </div>\n </div>\n\n <div class=\"code p-4\">\n <div class=\"label mb-3\">用户输入</div>\n <p class=\"text-sm text-slate-900\">调用天气工具查询</p>\n </div>\n\n <div class=\"code p-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"label\">工具调用</div>\n <span class=\"pill p-tool\"><i class=\"fa-solid fa-wrench\"></i>1 次</span>\n </div>\n <div class=\"space-y-3 text-sm\">\n <div class=\"rounded-xl border border-slate-200 bg-white p-3\">\n <div class=\"font-semibold text-slate-900\">get_weather</div>\n <div class=\"mt-2 text-slate-500\">参数</div>\n <pre class=\"mono mt-1 text-xs whitespace-pre-wrap break-words text-slate-800\">{\"location\":\"北京\"}</pre>\n <div class=\"mt-3 text-slate-500\">结果摘要</div>\n <div class=\"mt-1 grid sm:grid-cols-2 gap-2 text-slate-800\">\n <div>城市:北京</div>\n <div>天气:晴朗</div>\n <div>温度:17.3°C</div>\n <div>湿度:59%</div>\n <div>风速:10.8 kph</div>\n <div>更新时间:2026-04-15 23:00</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"space-y-4\">\n <div class=\"code p-4 border border-red-200 bg-red-50\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"label text-red-700\">错误信息</div>\n <span class=\"pill p-error\"><i class=\"fa-solid fa-bug\"></i>400</span>\n </div>\n <p class=\"text-sm font-semibold text-red-700\">Function call is missing a thought_signature in functionCall parts.</p>\n <p class=\"mono mt-2 text-xs text-red-600 break-all\">ref: acb33d5c-e9df-4c7b-9dce-f654a22f67b5</p>\n </div>\n\n <details class=\"code p-4\" open>\n <summary class=\"flex items-center justify-between\">\n <span class=\"label\">系统提示</span>\n <span class=\"pill p-mask\"><i class=\"fa-solid fa-eye-slash\"></i>已脱敏</span>\n </summary>\n <p class=\"mt-3 text-sm text-slate-600 leading-7\">该日志包含受保护的系统级配置与执行规则。为避免敏感信息暴露,界面默认不直接渲染原文,仅展示“存在系统提示”这一事实,并保留类型、长度、是否含配置逻辑等结构化元信息。</p>\n <div class=\"mt-3 grid grid-cols-2 gap-3 text-sm text-slate-700\">\n <div>内容状态:已隐藏</div>\n <div>可见性:仅摘要</div>\n <div>包含配置逻辑:是</div>\n <div>展示策略:脱敏折叠</div>\n </div>\n </details>\n </div>\n </div>\n </div>\n </article>\n\n <article class=\"item\">\n <div class=\"dot text-violet-600\"><i class=\"fa-solid fa-pen-ruler\"></i></div>\n <div class=\"card p-5 sm:p-6\">\n <div class=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div>\n <div class=\"flex flex-wrap gap-2\">\n <span class=\"pill p-chat\"><i class=\"fa-solid fa-comments\"></i>chat</span>\n <span class=\"pill p-template\"><i class=\"fa-solid fa-layer-group\"></i>custom-template</span>\n <span class=\"pill p-ok\"><i class=\"fa-solid fa-circle-check\"></i>无错误</span>\n </div>\n <h2 class=\"mt-3 text-xl font-bold text-slate-900\">组件修改请求:添加分享按钮</h2>\n <p class=\"mt-2 text-sm text-slate-500\">这是一次纯生成类会话,没有工具调用。界面中将其呈现为“轻量日志卡片”,重点保留模型与输入,不显示空的工具区域。</p>\n </div>\n <div class=\"text-sm text-slate-500 mono shrink-0\">2026-04-15 15:06:09.675Z</div>\n </div>\n\n <div class=\"mt-5 grid gap-4 lg:grid-cols-3\">\n <div class=\"code p-4\">\n <div class=\"label mb-3\">会话信息</div>\n <div class=\"space-y-2 text-sm text-slate-700\">\n <div>ID:<span class=\"mono\">mo06np8rg2r3sx</span></div>\n <div>耗时:<span class=\"mono\">22851ms</span></div>\n <div>模型:<span class=\"mono\">gemini-3-flash-preview</span></div>\n </div>\n </div>\n <div class=\"code p-4\">\n <div class=\"label mb-3\">模型配置</div>\n <div class=\"space-y-2 text-sm text-slate-700\">\n <div>temperature:<span class=\"mono\">0</span></div>\n <div>max_tokens:<span class=\"mono\">64000</span></div>\n <div>thinking:<span class=\"mono\">true</span></div>\n </div>\n </div>\n <div class=\"code p-4\">\n <div class=\"label mb-3\">用户输入</div>\n <p class=\"text-sm text-slate-900\">添加分享按钮</p>\n </div>\n </div>\n </div>\n </article>\n\n <article class=\"item\">\n <div class=\"dot text-sky-600\"><i class=\"fa-solid fa-wand-magic-sparkles\"></i></div>\n <div class=\"card p-5 sm:p-6\">\n <div class=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div>\n <div class=\"flex flex-wrap gap-2\">\n <span class=\"pill p-chat\"><i class=\"fa-solid fa-comments\"></i>chat</span>\n <span class=\"pill p-template\"><i class=\"fa-solid fa-layer-group\"></i>common</span>\n <span class=\"pill p-tool\"><i class=\"fa-solid fa-wrench\"></i>2 个外部能力</span>\n </div>\n <h2 class=\"mt-3 text-xl font-bold text-slate-900\">设计生成请求:博客卡片</h2>\n <p class=\"mt-2 text-sm text-slate-500\">本条真实日志的重点是外部能力调用:先获取设计建议,再获取图片资源。界面将工具结果改为“摘要块 + 关键产出”,避免原始长文本难以阅读。</p>\n </div>\n <div class=\"text-sm text-slate-500 mono shrink-0\">2026-04-15 15:03:29.021Z</div>\n </div>\n\n <div class=\"mt-5 grid gap-4 xl:grid-cols-[1fr_1fr]\">\n <div class=\"space-y-4\">\n <div class=\"code p-4\">\n <div class=\"label mb-3\">基础信息</div>\n <div class=\"grid sm:grid-cols-2 gap-3 text-sm text-slate-700\">\n <div>ID:<span class=\"mono\">mo06k9a55kvubh</span></div>\n <div>耗时:<span class=\"mono\">109382ms</span></div>\n <div>模型:<span class=\"mono\">deepseek-chat</span></div>\n <div>temperature:<span class=\"mono\">0</span></div>\n </div>\n </div>\n <div class=\"code p-4\">\n <div class=\"label mb-3\">用户输入</div>\n <p class=\"text-sm text-slate-900\">博客卡片</p>\n </div>\n <details class=\"code p-4\">\n <summary class=\"flex items-center justify-between\">\n <span class=\"label\">系统提示</span>\n <span class=\"pill p-mask\"><i class=\"fa-solid fa-eye-slash\"></i>已脱敏</span>\n </summary>\n <p class=\"mt-3 text-sm text-slate-600 leading-7\">该条日志同样包含系统级设计规则与执行约束。页面不显示原始全文,只保留受保护内容存在的提示与摘要级说明。</p>\n </details>\n </div>\n\n <div class=\"space-y-4\">\n <div class=\"code p-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"label\">工具调用 1</div>\n <span class=\"pill p-tool\">设计建议</span>\n </div>\n <div class=\"text-sm text-slate-700 space-y-2\">\n <div>查询:blog card modern minimal design</div>\n <div>推荐风格:Minimalism</div>\n <div>页面模式:Hero + Features + CTA</div>\n <div>建议:可点击元素需要 hover、focus、响应式校验</div>\n </div>\n </div>\n <div class=\"code p-4\">\n <div class=\"flex items-center justify-between mb-3\">\n <div class=\"label\">工具调用 2</div>\n <span class=\"pill p-tool\">资源结果</span>\n </div>\n <div class=\"text-sm text-slate-700 space-y-3\">\n <div>共返回 <span class=\"font-semibold\">3</span> 个候选资源</div>\n <ul class=\"space-y-2 list-disc pl-5\">\n <li>抽象几何风插图,适合现代卡片封面</li>\n <li>俯拍办公桌图像,适合内容创作主题</li>\n <li>办公场景人物图,适合商业内容卡片</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </article>\n\n <article class=\"item\">\n <div class=\"dot text-emerald-600\"><i class=\"fa-solid fa-message\"></i></div>\n <div class=\"card p-5 sm:p-6\">\n <div class=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div>\n <div class=\"flex flex-wrap gap-2\">\n <span class=\"pill p-chat\"><i class=\"fa-solid fa-comments\"></i>chat</span>\n <span class=\"pill p-template\"><i class=\"fa-solid fa-layer-group\"></i>common</span>\n <span class=\"pill p-ok\"><i class=\"fa-solid fa-circle-check\"></i>无工具调用</span>\n </div>\n <h2 class=\"mt-3 text-xl font-bold text-slate-900\">基础问候会话</h2>\n <p class=\"mt-2 text-sm text-slate-500\">简单问候场景不需要外部能力。界面采用最简卡片,突出用户输入、模型配置和耗时,弱化无关区域。</p>\n </div>\n <div class=\"text-sm text-slate-500 mono shrink-0\">2026-04-15 15:02:39.745Z</div>\n </div>\n\n <div class=\"mt-5 grid gap-4 lg:grid-cols-4\">\n <div class=\"code p-4\">\n <div class=\"label mb-3\">ID</div>\n <div class=\"mono text-sm text-slate-900 break-all\">mo06j79djq5jqw</div>\n </div>\n <div class=\"code p-4\">\n <div class=\"label mb-3\">模型</div>\n <div class=\"mono text-sm text-slate-900\">deepseek-chat</div>\n </div>\n <div class=\"code p-4\">\n <div class=\"label mb-3\">参数</div>\n <div class=\"text-sm text-slate-700\">temperature <span class=\"mono font-semibold\">1</span> · top_p <span class=\"mono font-semibold\">0.9</span></div>\n </div>\n <div class=\"code p-4\">\n <div class=\"label mb-3\">用户输入</div>\n <div class=\"text-sm text-slate-900\">你好</div>\n </div>\n </div>\n\n <details class=\"mt-4 code p-4\">\n <summary class=\"flex items-center justify-between\">\n <span class=\"label\">系统提示</span>\n <span class=\"pill p-mask\"><i class=\"fa-solid fa-eye-slash\"></i>已脱敏</span>\n </summary>\n <p class=\"mt-3 text-sm text-slate-600 leading-7\">检测到系统级服务策略与安全规则。出于保护需要,此处仅提示存在,不直接显示原始内容。</p>\n </details>\n </div>\n </article>\n </section>\n </main>\n</body>\n</html>"
},
"next": "[\"增加筛选器\",\"支持展开JSON\",\"标注耗时异常\",\"接入实时刷新\",\"增加状态图例\"]",
"breakpoint": "none"
}
```

total_tokens
39856
summary
根据真实日志结构重做了界面:以会话日志为核心,映射 id、timestamp、serviceType、type、modelConfig、prompt、toolCalls、error、duration 等真实字段;对受保护的系统提示内容做脱敏折叠展示;突出工具调用结果与错误状态,并保留最新在前的简约时间轴布局。
uiParsing
关闭