# 可观测性与 Agent Run Trace

## 1. 目标

Agent 系统必须可追踪、可回放、可解释。

财务系统中尤其需要回答：

- 为什么 Agent 得出这个结论？
- 用了哪个模型？
- 用了哪个规则版本？
- 调用了哪些 MCP？
- 查了哪些数据？
- 谁确认了动作？
- 失败在哪里？

## 2. Agent Run Trace

每次 Agent 运行都生成一个 run_id。

建议结构：

```json
{
  "run_id": "",
  "source": "user_message",
  "agent": "user_agent",
  "user_id": "emp_001",
  "raw_input": "",
  "ontology_json": {},
  "route_decision": {},
  "permission_result": {},
  "tool_calls": [],
  "final_output": "",
  "status": "success",
  "started_at": "",
  "finished_at": ""
}
```

## 3. 需要记录的版本

每次运行都要记录：

```text
ontology_schema_version
semantic_parser_prompt_version
model_name
model_version
rule_version
skill_version
mcp_version
knowledge_snapshot_version
orchestrator_version
```

原因：

用户可能问：

```text
为什么昨天和今天的结论不一样？
```

只有记录版本，才能解释。

## 4. Tool Call Trace

每个工具调用都记录：

```json
{
  "tool_call_id": "",
  "run_id": "",
  "tool_type": "mcp",
  "tool_name": "invoice_verify",
  "request_json": {},
  "response_json": {},
  "status": "success",
  "duration_ms": 820,
  "error_message": ""
}
```

敏感字段应脱敏。

## 5. 运行状态

建议枚举：

```text
pending
running
success
partial_success
failed
cancelled
waiting_confirmation
```

## 6. Hermes 可观测性

Hermes 任务需要额外记录：

```text
task_code
schedule_time
data_snapshot_id
records_scanned
rules_executed
mcp_calls
risk_items_generated
knowledge_candidates_generated
retry_count
```

示例：

```json
{
  "task_code": "daily_risk_scan",
  "records_scanned": 2146,
  "rules_executed": 8,
  "mcp_calls": 436,
  "risk_items_generated": 19,
  "status": "success"
}
```

## 7. User Agent 可观测性

User Agent 需要额外记录：

```text
conversation_id
page_context
user_confirmation
draft_created
business_object_id
```

## 8. 前端审计视图

建议后续增加“Agent 运行记录”页面。

展示：

- 运行时间。
- Agent 类型。
- 用户或任务。
- 语义解析结果。
- 调用工具。
- 运行状态。
- 耗时。
- 错误。

详情页展示：

- 原始输入。
- 本体 JSON。
- 路由决策。
- 工具调用链。
- 最终输出。

## 9. 告警

需要告警的情况：

- Hermes 任务连续失败。
- MCP 健康检查失败。
- 语义解析低置信度比例过高。
- 某规则误报率过高。
- Agent 调用耗时异常。
- 权限拒绝次数异常。

## 10. 开发步骤

```text
Step 1: 增加 agent_runs 表
Step 2: 增加 agent_tool_calls 表
Step 3: Orchestrator 每次执行创建 run_id
Step 4: 工具网关记录 tool call
Step 5: 前端增加运行记录页面
Step 6: 增加异常告警规则
```

