跳到主要内容

9. 监控与可观测

9.1 业务指标

核心业务指标

智能文档处理系统的核心业务指标用于评估处理质量和业务效果:

处理质量指标

1. OCR识别准确率(OCR Accuracy)

  • 定义:OCR识别正确的文字比例
  • 计算公式:OCR准确率 = (正确识别字数 / 总字数) × 100%
  • 目标值:≥98%
  • 监控频率:实时监控,每小时统计

2. 信息提取准确率(Extraction Accuracy)

  • 定义:信息提取正确的比例
  • 计算公式:提取准确率 = (正确提取字段数 / 总字段数) × 100%
  • 目标值:≥95%
  • 监控频率:实时监控,每天统计

3. 文档处理完整率(Processing Completeness)

  • 定义:文档成功处理的比例
  • 计算公式:完整率 = (成功处理文档数 / 总文档数) × 100%
  • 目标值:≥95%
  • 监控频率:实时监控,每小时统计

处理效率指标

4. 平均处理时间(Average Processing Time)

  • 定义:处理一个文档的平均时间
  • 计算公式:平均处理时间 = 总处理时间 / 文档数
  • 目标值:≤10分钟/文档
  • 监控频率:实时监控,每分钟统计

5. 批量处理能力(Batch Processing Capacity)

  • 定义:单位时间内处理的文档数量
  • 计算公式:处理能力 = 处理文档数 / 时间周期
  • 目标值:≥100文档/小时
  • 监控频率:每小时统计

指标监控

监控架构

监控实现

Prometheus配置

global:
scrape_interval: 15s
evaluation_interval: 15s

scrape_configs:
- job_name: 'document-processing'
static_configs:
- targets: ['localhost:8000']
metrics_path: '/metrics'

指标收集代码

from prometheus_client import Counter, Histogram, Gauge

# 定义指标
ocr_accuracy = Gauge('ocr_accuracy', 'OCR recognition accuracy')
extraction_accuracy = Gauge('extraction_accuracy', 'Information extraction accuracy')
processing_time = Histogram('processing_time_seconds', 'Document processing time in seconds')
documents_processed = Counter('documents_processed_total', 'Total number of documents processed')

# 记录指标
def process_document(document):
start_time = time.time()
result = extract_information(document)
processing_time.observe(time.time() - start_time)
documents_processed.inc()

# 更新准确率
accuracy = calculate_accuracy(result)
extraction_accuracy.set(accuracy)

告警机制

告警规则

1. OCR准确率告警

  • 条件:OCR准确率 < 95%
  • 级别:警告
  • 通知:邮件 + 短信

2. 处理时间告警

  • 条件:平均处理时间 > 30分钟
  • 级别:严重
  • 通知:电话 + 短信 + 邮件

3. 系统可用性告警

  • 条件:可用性 < 99%
  • 级别:严重
  • 通知:电话 + 短信 + 邮件

9.2 模型指标

模型性能指标

准确性指标

1. OCR模型准确率

  • 定义:OCR模型识别文字的准确程度
  • 计算方法:人工评估或自动评估
  • 目标值:≥98%
  • 监控频率:每天统计

2. 信息提取模型准确率

  • 定义:信息提取模型提取信息的准确程度
  • 计算方法:人工评估或自动评估
  • 目标值:≥95%
  • 监控频率:每天统计

效率指标

3. 推理延迟(Inference Latency)

  • 定义:模型处理文档的时间
  • 计算方法:记录推理开始到结束的时间
  • 目标值:≤5秒
  • 监控频率:实时监控

4. Token使用量(Token Usage)

  • 定义:每次调用使用的Token数量
  • 计算方法:统计输入和输出Token数
  • 目标值:输入<2000,输出<500
  • 监控频率:实时统计

模型监控

监控实现

模型指标收集

class ModelMonitor:
def __init__(self):
self.metrics = {
"ocr_accuracy": [],
"extraction_accuracy": [],
"latency": [],
"token_usage": []
}

def record_processing(self, document, result, latency, tokens):
"""记录处理指标"""
self.metrics["latency"].append(latency)
self.metrics["token_usage"].append(tokens)

# 评估准确性(异步)
ocr_accuracy = self.evaluate_ocr_accuracy(document, result)
extraction_accuracy = self.evaluate_extraction_accuracy(document, result)
self.metrics["ocr_accuracy"].append(ocr_accuracy)
self.metrics["extraction_accuracy"].append(extraction_accuracy)

def get_statistics(self):
"""获取统计信息"""
return {
"avg_ocr_accuracy": np.mean(self.metrics["ocr_accuracy"]),
"avg_extraction_accuracy": np.mean(self.metrics["extraction_accuracy"]),
"avg_latency": np.mean(self.metrics["latency"])
}

模型退化检测

退化检测方法

1. 统计过程控制(SPC)

  • 使用控制图监控指标
  • 检测异常波动
  • 自动告警

2. 时间序列分析

  • 分析指标趋势
  • 预测未来值
  • 检测异常偏离

3. 对比分析

  • 对比不同时间段的表现
  • 对比不同模型版本
  • 识别性能下降

9.3 链路追踪

追踪系统

分布式追踪

OpenTelemetry集成

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.jaeger import JaegerExporter

# 初始化追踪
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)

# 配置Jaeger导出器
jaeger_exporter = JaegerExporter(
agent_host_name="localhost",
agent_port=6831,
)
span_processor = BatchSpanProcessor(jaeger_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)

# 使用追踪
def process_document(document):
with tracer.start_as_current_span("process_document") as span:
span.set_attribute("document_id", document.id)
span.set_attribute("document_type", document.type)

# 处理文档
result = extract_information(document)

span.set_attribute("extraction_fields", len(result))
return result

日志管理

日志级别

DEBUG:详细的调试信息 INFO:一般信息,记录正常流程 WARNING:警告信息,不影响功能 ERROR:错误信息,功能受影响 CRITICAL:严重错误,系统可能崩溃

日志格式

结构化日志

{
"timestamp": "2024-01-01T10:00:00Z",
"level": "INFO",
"service": "document-processing",
"trace_id": "abc123",
"span_id": "def456",
"message": "处理文档",
"context": {
"document_id": "doc_123",
"document_type": "contract",
"processing_time": 5.2
}
}

问题定位

问题定位流程

1. 告警触发

  • 系统自动检测异常
  • 发送告警通知

2. 日志查询

  • 根据Trace ID查询日志
  • 分析错误日志
  • 定位问题根源

3. 指标分析

  • 查看相关指标
  • 分析指标异常
  • 识别问题模式

4. 根因分析

  • 分析问题原因
  • 制定解决方案
  • 实施修复