Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 98 additions & 62 deletions docs/features/digital-employee.md
Original file line number Diff line number Diff line change
@@ -1,97 +1,133 @@
# 数字员工(概览与画像)
# 数字员工功能说明

**数字员工模块**采用“全景概览 + 深度画像”的双星互动设计,致力于为企业提供从队伍全局统筹到单体深度追踪的全周期管理能力。借助本模块,您可以实现从宏观指标洞察到微观会话追踪的自由下钻,系统化地评估 AI Agent(智能体)的业务表现,并精准识别潜在的治理与安全风险
数字员工模块面向企业管理者、运营负责人和安全治理团队,提供对智能体运行状态的统一观测、评估与治理能力。模块聚焦“可看见、可分析、可下钻、可治理”四个目标,帮助团队从业务视角持续优化数字员工产出质量与运行效益

---

## 🌟 核心功能与价值
## 一、模块定位

在多 Agent 并行及异构化运行场景下,仅仅关注单一请求往往会“只见树木,不见森林”。数字员工模块通过“全景 + 深描”的双视角,帮助您的运营与 IT 团队建立起**可观测、可评估、可治理**的完整运营闭环
数字员工模块是平台的运营与治理中枢,主要解决以下问题

### 1. 数字员工全景概览
- 多个数字员工并行运行时,缺少统一的健康与绩效视图。
- 仅看会话日志难以快速判断“谁表现好、谁存在风险、谁成本偏高”。
- 发生异常后,缺少从宏观看板到单员工画像再到风险事件的连续分析路径。

概览页面是您监控 AI Agent 大军的“超级指挥中心”。通过多维度的数据切面,帮助企业管理者快速掌握当前所有数字员工的工作动态
该模块通过“运行概览 + 运行详情 + 风险联动”实现闭环管理

- **核心价值**:一站式洞察数字员工队伍在五维评估模型(能力、质量、成本、效能、安全)下的综合表现。支持通过可视化排行对比不同 Agent 的优劣势。
- **管理收益**:快速识别出“高风险员工”、“核心渠道”及“投入产出失衡”的重灾区,为资源重新调度及治理优先级排序提供关键数据支撑。

![数字员工概览](../pictures/Digital-Emmployee-Overview.png)
![数字员工概览 - 趋势与明细](../pictures/Digital-Employee-Overview2.png)
---

### 2. 数字员工深度画像
## 二、功能实现说明

画像页面是聚焦单体员工的“显微镜”。当在概览中发现异常时,可通过点击下钻,以立体视角解析特定员工的每一步行为及其潜在隐患。
### 1) 运行概览(页面级)

- **核心价值**:聚焦特定 Agent,提供从跨度数月的宏观数据到精确到分秒的微观会话流下钻分析,实现全链路的审计与行为透视。
- **管理收益**:不再满足于发现问题,而是直接将“异常现象”精准定位到具体的会话、具体的错误调用和违规策略,极大提升故障排查与问题闭环的效率。

![数字员工画像 - 全局监控](../pictures/Digital-Employee-Portrait.png)
运行概览是画像页的全局运营页签,数据范围是当前时间窗内所有数字员工,不是单员工视图。

### 3. 五维能力评估模型
- **5 张核心指标卡**
- 数字员工总数
- 今日总任务数
- 今日总会话数
- 平均任务成功率
- 平均响应耗时

我们在底层将原本散乱的统计数据聚合成为专业的“数字员工五维评估模型”,为每位数字员工生成全面立体的考核表:
- **2 个结构分布图**
- Agent 会话数分布(饼图)
- Agent Token 消耗分布(饼图)

- **能力维度 (Capability)**:评估队伍的“技能雷达”与“可用工具广度”,界定其业务处理的复杂上限。
- **质量维度 (Quality)**:实时监测“运行稳定性”与各种异常(如超时、拒绝请求等),确保交付体验的高标准。
- **成本维度 (Cost)**:多维分析“资源消耗结构”与“Token 流水账”,彻底告别大模型消耗的一笔糊涂账。
- **效能维度 (Efficiency)**:精准衡量其对于并发任务的处理耗时以及规模匹配度,量化其实际的业务贡献。
- **安全维度 (Security)**:企业合规的终极防线,实时监控命中风控策略的违规数量,守好数据安全红线。
- **4 个趋势图**
- Agent 在线趋势
- Agent 会话趋势
- 会话响应率趋势
- Agent Token 消耗趋势

![数字员工画像 - 能力诊断](../pictures/Digital-Employee-Portrait-Capability.png)
![数字员工画像 - 安全风控](../pictures/Digital-Employee-Portrait-Security.png)
- **1 个风险榜单**
- 风险最高 Top10 Agent(风险会话数、最高风险等级、最近风险时间)

---

## 📸 核心组件解析
### 2) 运行详情(单员工)

### 1) 数字员工概览(全景组件)
运行详情面向单个数字员工,回答“该员工为什么表现如此”。

- **核心指标看板**:实时汇总健康度、总员工数、当前活跃员工数、渠道分布情况、平均 Token 成本、P95 耗时以及命中红线的风险员工数。
- **动态驾驶舱图表**:
- 成本与会话趋势面板(时间窗口自由选择)
- 能力与效能热力分布
- 质量成功率与安全红灯拦截折线图
- **Top 排行预警组件**:高风险员工黑榜 / 高效率员工红榜。支持从全局榜单中一键穿透至“单员工画像”。
- **运行概要**
- 任务量、成功率、会话量、异常量、风险会话等健康指标
- 执行、Token、异常趋势
- 近期行为快照

### 2) 数字员工画像(深度组件)
- **用户与渠道**
- 用户结构、渠道结构、集中度与覆盖度
- 高频用户与高频渠道识别

- **员工档案与标签**:清晰展示系统唯一标识、最近活跃时间、角色标签、底层采用的 LLM 模型等基础元信息。
- **五维专属页签**:以选项卡形式深度解构“能力、质量、效能、成本、安全”五大数据域。
- **全息会话时间线**:以时间轴形式,按风险等级(高危、警告、正常)回放关键会话节点,支持一键无缝跳转至【会话溯源】页面。
- **质量明细追踪台**:弹窗式展示该员工发生过的异常中止、API 接口调用失败、意图识别偏差等细粒度追踪报表。
- **会话执行**
- 成功/失败结构
- 会话执行趋势与耗时表现

---
- **工具执行**
- 工具调用规模、错误率、高频工具
- 工具异常会话明细

- **Skill 使用**
- 技能覆盖、技能频次、技能趋势

- **成本消耗**
- 输入/输出 Token 结构
- 成本趋势与消耗来源
- 单位成本与产出观察

## 🔎 运维与排障联动建议
- **安全与风险**
- 风险总览与趋势
- 风险事件清单
- 策略与合规信息概览

当您在数字员工面板中观察到指标异动时,建议按照以下业务流进行科学的排查验证:
---

### 3) 运营联动能力

**🔴 场景一:发现高风险员工比重突然上升**
1. **纵观全局**:首先在【横向概览页】中查看安全分布图表,锁定报警峰值及名单内的高风险员工。
2. **深度透视**:点击进入该员工的【数字员工画像】,切换到“安全维度”页签,确认其安全评分断崖式下跌的原因及触发的具体管控策略。
3. **定位溯源**:在时间线上挑选带有红色“Risk”标记的节点,跳转至会话溯源页,直接查看触发该合规拦截的输入输出原始报文。
模块支持从“运行概览”到“运行详情”再到“风险事件”的连续下钻,形成统一治理路径:

**🟡 场景二:质量指标下滑(如请求成功率骤降、调用失败攀升)**
1. **寻找病灶**:在【画像页 -> 质量维度】中,核对报错归类(是 LLM 上游异常、工具鉴权失败,还是平台内部崩溃)。
2. **时间交叉**:联动其会话时间线,寻找密集报错的发生阶段。
3. **修复链路**:回看失败会话日志,优先排查高频失败动作(如某个三方工单插件接口响应超时),针对性进行代码发版修补。
- 在运行概览中发现异常对象;
- 进入员工画像定位问题维度(质量、成本、效能或安全);
- 在风险视图中查看事件详情并推进处理。

**🟢 场景三:Token 成本剧烈波动**
1. **横向对齐**:在概览页的“人均成本排行榜”中,确认是偶然个体消耗大,还是整体员工耗能上升。
2. **纵向分析**:进入相关数字员工画像的“成本维度”,分析最近几周的结构变化趋势(Prompt 成本剧增 还是 Completion 回复冗长)。
3. **效能折算**:交叉对比同期的“效能维度”,判断此次成本走高是否有效地支撑了高倍的业务量提升;如果不匹配,极可能是出现了 Prompt 逻辑锁死或循环无效调用的异常情况。
该联动机制可显著降低排查路径长度,提高运营响应速度。

---

## 🎭 研发阶段:Mock 数据使用方式
## 三、业务价值

### 1) 提升运营效率

- 通过运行概览的一屏指标、分布图和趋势图,快速完成日常巡检,减少人工汇总时间。
- 通过风险 Top10 快速锁定优先级对象,再进入运行详情做定向分析,提升处理效率。

### 2) 提升服务质量

出于调试或演示目的,本模块自带一整套完整的沙盒 Mock 环境。
- 基于运行概览中的成功率和响应耗时趋势,及时发现整体质量波动。
- 基于运行详情中的会话执行、工具执行与 Skill 使用视图,定位质量问题成因并推进优化。

当您在环境配置中设置 `VITE_MOCK=true` 时,数字员工的前端接口将自动分流至 Mock 路由:
- 概览接口: `GET /api/digital-employees/overview`
- 画像接口: `GET /api/digital-employees/profile`
### 3) 优化成本投入

相应的数据将由以下本地文件提供支持,您可以自由修改它们来模拟各类的演示场景:
- `mock/data/digital-employee-overview.mjs`
- `mock/data/digital-employee-profile.mjs`
- 通过运行概览的 Token 分布与 Token 趋势识别高消耗员工与高峰时段。
- 通过运行详情的成本消耗分析,定位成本来源并评估单位产出,避免隐性成本失控。

### 4) 强化安全治理

- 通过运行概览风险榜单快速识别高风险员工,形成日常治理入口。
- 通过运行详情安全与风险页签持续跟踪风险趋势与事件清单,降低安全暴露时间窗口。

### 5) 支撑管理决策

- 基于运行概览与运行详情的连续数据,为人员配置和策略优化提供量化依据。
- 形成“发现问题—定位原因—验证结果”的标准化评估路径,支撑规模化运营。

---

## 四、典型应用场景

- **日常运营巡检**:每日查看运行概览指标、趋势和风险榜,快速识别异常对象。
- **专项质量治理**:在运行详情中针对会话执行、工具执行和 Skill 使用进行专项优化。
- **成本治理行动**:结合运行概览趋势与运行详情成本拆分,推动成本优化决策。
- **安全治理检查**:定期复盘风险榜与风险事件清单,形成持续治理闭环。

---

通过持续使用数字员工模块,企业可逐步实现从“被动排查”向“主动治理”的运营升级。
17 changes: 13 additions & 4 deletions frontend/locales/en-US/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,16 @@ export default {
"nav.llmCost": "Model Cost Detail",
"nav.gatewayMonitoring": "Gateway monitoring",
"nav.otelOverview": "Overview",
"nav.instanceMonitoring": "Instance monitoring",
"nav.openclawInstance": "OpenClaw instances",
"nav.instanceMonitoring": "Cockpit",
"nav.digitalEmployeeOverview": "Digital Employee Overview",
"nav.digitalEmployeeList": "Digital Employee Runtime",
"nav.digitalEmployeeList": "Digital employees",

"page.panorama.title": "Overview",
"page.panorama.subtitle": "Key metrics & orders at a glance · Real-time",
"page.digitalEmployeeOverview.title": "Employee Overview",
"page.digitalEmployeeOverview.subtitle": "Digital employee scale & operation metrics",
"page.digitalEmployeeList.title": "Digital Employee Runtime",
"page.digitalEmployeeList.title": "Digital employees",
"page.digitalEmployeeList.subtitle": "Capabilities, metrics & activity",
"page.monitoring.title": "Monitoring",
"page.monitoring.subtitle": "System & resource monitoring",
Expand Down Expand Up @@ -85,10 +86,18 @@ export default {
"page.llmCost.subtitle": "Token & cost by model dimension",
"page.otelOverview.title": "Gateway Overview",
"page.otelOverview.subtitle": "OpenTelemetry metrics & runtime posture",
"page.instanceMonitoring.title": "Instance Monitoring",
"page.instanceMonitoring.title": "Cockpit",
"page.instanceMonitoring.subtitle": "Instance health & runtime status",
"page.instanceMonitoring.placeholder": "Connect instance list, metrics, and alerts here. Placeholder content for now.",

"page.openclawInstance.title": "OpenClaw instances",
"page.openclawInstance.subtitle": "Run overview, instance list & configuration changes",

"openclawInstance.tabRunOverview": "Run overview",
"openclawInstance.tabRunDetail": "Run details",
"openclawInstance.tabConfigChange": "Config changes",
"openclawInstance.waitTelemetry": "Load data from Run overview first, or try again shortly.",

"theme.light": "Light",
"theme.dark": "Dark",
"theme.system": "System",
Expand Down
17 changes: 13 additions & 4 deletions frontend/locales/zh-CN/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,16 @@ export default {
"nav.llmCost": "模型成本明细",
"nav.gatewayMonitoring": "Gateway监控",
"nav.otelOverview": "概览",
"nav.instanceMonitoring": "实例监控",
"nav.openclawInstance": "OpenClaw实例",
"nav.instanceMonitoring": "驾驶舱",
"nav.digitalEmployeeOverview": "数字员工概览",
"nav.digitalEmployeeList": "数字员工运行",
"nav.digitalEmployeeList": "数字员工",

"page.panorama.title": "数据总览",
"page.panorama.subtitle": "关键指标与订单一览 · 实时更新",
"page.digitalEmployeeOverview.title": "员工概览",
"page.digitalEmployeeOverview.subtitle": "数字员工规模与运行指标",
"page.digitalEmployeeList.title": "数字员工运行",
"page.digitalEmployeeList.title": "数字员工",
"page.digitalEmployeeList.subtitle": "能力、指标与运行动态",
"page.monitoring.title": "基础监控",
"page.monitoring.subtitle": "系统与资源监控",
Expand Down Expand Up @@ -85,10 +86,18 @@ export default {
"page.llmCost.subtitle": "按模型维度的 Token 与费用",
"page.otelOverview.title": "Gateway 概览",
"page.otelOverview.subtitle": "OpenTelemetry 指标与运行态势",
"page.instanceMonitoring.title": "实例监控",
"page.instanceMonitoring.title": "驾驶舱",
"page.instanceMonitoring.subtitle": "实例运行状态与健康度",
"page.instanceMonitoring.placeholder": "此处可接入实例列表、指标与告警。当前为占位内容。",

"page.openclawInstance.title": "OpenClaw 实例",
"page.openclawInstance.subtitle": "运行概览、实例列表与配置变更",

"openclawInstance.tabRunOverview": "运行概览",
"openclawInstance.tabRunDetail": "运行详情",
"openclawInstance.tabConfigChange": "配置变更",
"openclawInstance.waitTelemetry": "请先在「运行概览」加载观测数据,或稍候重试。",

"theme.light": "浅色",
"theme.dark": "深色",
"theme.system": "跟随系统",
Expand Down
25 changes: 11 additions & 14 deletions frontend/pages/Dashboard.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@ import CostOverview2 from "./CostOverview2.jsx";
import AgentCostDetail from "./AgentCostDetail.jsx";
import LlmCost from "./LlmCost.jsx";
import FullChainTraceability from "./FullChainTraceability.jsx";
import OtelOverview from "./OtelOverview.jsx";
import OpenClawInstance from "./OpenClawInstance.jsx";
import InstanceMonitoring from "./InstanceMonitoring.jsx";
import ConfigChange from "./ConfigChange.jsx";
import SessionAudit from "./SessionAudit.jsx";
import AuditOverview from "./AuditOverview.jsx";
import MonitorDashboard from "./monitor-dashboard/index.jsx";
Expand All @@ -23,7 +22,6 @@ const PAGE_META_KEYS = {
monitoring: { title: "page.monitoring.title", subtitle: "page.monitoring.subtitle" },
alerts: { title: "page.alerts.title", subtitle: "page.alerts.subtitle" },
audit: { title: "page.audit.title", subtitle: "page.audit.subtitle" },
"config-change": { title: "page.configChange.title", subtitle: "page.configChange.subtitle" },
"audit-overview": { title: "page.auditOverview.title", subtitle: "page.auditOverview.subtitle" },
"session-audit": { title: "page.sessionAudit.title", subtitle: "page.sessionAudit.subtitle" },
"monitor-dashboard": { title: "page.monitorDashboard.title", subtitle: "page.monitorDashboard.subtitle" },
Expand All @@ -33,7 +31,7 @@ const PAGE_META_KEYS = {
"cost-overview-2": { title: "page.costOverview2.title", subtitle: "page.costOverview2.subtitle" },
"agent-cost-detail": { title: "page.agentCostDetail.title", subtitle: "page.agentCostDetail.subtitle" },
"llm-cost": { title: "page.llmCost.title", subtitle: "page.llmCost.subtitle" },
"otel-overview": { title: "page.otelOverview.title", subtitle: "page.otelOverview.subtitle" },
"openclaw-instance": { title: "page.openclawInstance.title", subtitle: "page.openclawInstance.subtitle" },
"instance-monitoring": { title: "page.instanceMonitoring.title", subtitle: "page.instanceMonitoring.subtitle" },
};

Expand All @@ -43,10 +41,8 @@ const NAV_KEYS = [
labelKey: "nav.fullTimeMonitoring",
icon: "clock",
children: [
{ id: "monitor-dashboard", labelKey: "nav.monitorDashboard" },
{ id: "otel-overview", labelKey: "nav.otelOverview" },
{ id: "instance-monitoring", labelKey: "nav.instanceMonitoring" },
{ id: "config-change", labelKey: "nav.configChange" },
{ id: "openclaw-instance", labelKey: "nav.openclawInstance" },
// 数字员工:数据来自 /api/digital-employees/* 版本 1.0.1
{ id: "digital-employee-list", labelKey: "nav.digitalEmployeeList" },
],
Expand Down Expand Up @@ -263,6 +259,10 @@ export default function Dashboard() {
localStorage.setItem("nav-active", "digital-employee-list");
return "digital-employee-list";
}
if (v === "otel-overview" || v === "config-change") {
localStorage.setItem("nav-active", "openclaw-instance");
return "openclaw-instance";
}
return v || "audit-overview";
});
const [navGroupOpen, setNavGroupOpenRaw] = useState(() => {
Expand Down Expand Up @@ -294,6 +294,7 @@ export default function Dashboard() {
let id = e?.detail?.id;
if (!id || typeof id !== "string") return;
if (id === "digital-employee-overview") id = "digital-employee-list";
if (id === "otel-overview" || id === "config-change") id = "openclaw-instance";
setActiveNavRaw(id);
localStorage.setItem("nav-active", id);
setSidebarOpen(false);
Expand Down Expand Up @@ -596,9 +597,9 @@ export default function Dashboard() {
</div>
</header>

<main className={`flex-1 overflow-y-auto ${activeNav === "monitor-dashboard" ? "flex flex-col" : "p-6"}`}>
{activeNav === "otel-overview" ? (
<OtelOverview />
<main className="flex-1 overflow-y-auto p-6">
{activeNav === "openclaw-instance" ? (
<OpenClawInstance />
) : activeNav === "instance-monitoring" ? (
<InstanceMonitoring />
) : activeNav === "cost-overview" ? (
Expand All @@ -611,10 +612,6 @@ export default function Dashboard() {
<LlmCost />
) : activeNav === "digital-employee-list" ? (
<DigitalEmployeePortrait />
) : activeNav === "config-change" ? (
<ConfigChange />
) : activeNav === "monitor-dashboard" ? (
<MonitorDashboard />
) : activeNav === "audit-overview" ? (
<AuditOverview />
) : activeNav === "session-audit" ? (
Expand Down
Loading
Loading