11.5 实战:为 MiniHarness 添加可靠性保障

本节为生产级 MiniHarness 添加可靠性工程保障。核心设计是“可观测性驱动、容错重试、健康检查”三层递进。

完整代码见 lab/mini_harness/reliability/,本节聚焦设计模式与集成策略。

11.5.1 结构化日志系统

生产系统必须支持日志聚合与分析。设计两个核心能力:

字段化日志格式:每条日志包含标准字段(timestamp、level、trace_id)和应用字段(tool_name、duration_ms):

import json
from datetime import datetime

class StructuredLogger:
    def log(self, level: str, message: str, **fields):
        """记录结构化日志为 JSON"""
        log_entry = {
            'timestamp': datetime.now().isoformat(),
            'trace_id': get_trace_id(),  # 链接相关日志
            'message': message,
            'level': level,
            **fields  # 工具名、耗时等
        }
        print(json.dumps(log_entry))

    def log_tool_call(self, tool_name: str, duration_ms: float,
                      status: str, error: str = None):
        """专用方法记录工具调用"""
        self.log('INFO', f'Tool call: {tool_name}',
                 tool_name=tool_name, duration_ms=duration_ms,
                 status=status, error=error)

关键设计决策:

  • JSON 序列化:便于日志系统解析和搜索(ELK、DataDog 等)

  • trace_id 贯穿:关联同一请求的所有日志,便于链路追踪

  • 字段聚合:便于建立告警规则(如 error_count > 100 在 5 分钟内)

完整实现参见 lab/mini_harness/reliability/logging.py

11.5.2 分布式追踪上下文

追踪用于“跟踪请求经过的所有函数调用”,遵循 OpenTelemetry 标准:

上下文管理器简化使用:

设计优势:

  1. 树形结构:Parent Span 可视化整个请求的调用树

  2. 自动计时:span 自动记录开始/结束时间,无需手动

  3. 异常自动捕获:上下文管理器捕获异常并标记为错误

完整实现参见 lab/mini_harness/reliability/tracing.py

11.5.3 重试与超时策略

“客户端重试 + 超时保护”是应对瞬时故障的标准做法。核心设计:

设计细节:

  1. 指数退避:等待时间按 1s → 2s → 4s 递增,避免打垮故障服务

  2. 抖动(Jitter):防止多个客户端同时重试导致雷鸣羊群效应

  3. 可恢复异常:仅对网络错误重试(ConnectionError、Timeout),不对业务错误(ValidationError)重试

完整实现参见 lab/mini_harness/reliability/resilience.py

11.5.4 可靠智能体的集成

将日志、追踪、重试三层叠加在 Agent 执行中:

关键层级:

层级
职责
例子

Agent

追踪整体请求

trace_span('agent_execution')

工具执行

单工具重试保护

@RetryDecorator on _execute_single_tool

外部 API

流量限制+重试

@RetryDecorator on api_client

完整实现参见 lab/mini_harness/reliability/resilience.py(重试/断路器)与 lab/mini_harness/reliability/monitoring.py(指标采集)。

11.5.5 健康检查与告警

系统运行过程中持续监控关键指标:

告警处理的最佳实践:

  1. 不同级别的行动:INFO(记录) vs WARNING(通知) vs CRITICAL(页面告警)

  2. 告警去重:避免 5 分钟内重复告警(使用告警窗口)

  3. 自愈反馈:告警触发后自动尝试恢复(如重启服务)

完整实现参见 lab/mini_harness/reliability/monitoring.py

11.5.6 部署检查清单

11.5.7 总结

MiniHarness 可靠性工程的四大柱石:

  1. 可观测性:结构化日志 + 分布式追踪,快速定位问题

  2. 容错重试:指数退避,应对瞬时故障

  3. 健康监控:实时告警,关键指标异常立即发现

  4. 指标驱动:追踪成功率、延迟、工具可靠性,数据驱动改进

最后更新于