可观测性
Observability & Cost Tracking
LLM 调用链路追踪、Token 计量、成本分析、结构化日志。没有可观测性就是盲飞。
子问题
1.调用链追踪:每次 LLM 调用的输入/输出/耗时
2.Token 计量:精确统计每次调用的 token 消耗
3.成本分析:按模型、按任务、按用户的成本统计
4.结构化日志:可查询的结构化日志而非纯文本
5.告警机制:成本超限、错误率过高时告警
6.金融绩效指标年化参数适配:美股252/加密365/小时级1638的差异处理
7.持仓全量快照 vs 增量记录:全量快照便于任意时点恢复但文件膨胀快
8.多 Agent 滚动指标对比:expanding window 早期数据不稳定需设最小观测窗口
9.前端缓存版本检测:基于 position 文件 mtime 哈希判断数据是否更新
10.MCP 协议暴露可观测数据:外部 Agent 通过 MCP 工具查询 LLM trace 和日志,实现跨进程调试
11.认知循环六阶段日志分类:turn_input/llm_attempt/repl_result/repl_error/scheduler/feedback 覆盖完整决策链
12.O(turns²) 内存防护:LLM trace 不存储完整 messages 数组,改用 messageCount + estimatedTokens 做诊断
13.WebSocket 新连接历史回放:环形缓冲保留最近 1000 条事件,新客户端连接时一次性发送
14.JSONL 持久化类型白名单:仅 7 种事件类型写入磁盘,高频状态事件(brain_state/conversation_update)不持久化避免 I/O 瓶颈
15.Favicon 动态健康指示:浏览器标签页颜色变化免开 Dashboard 感知系统状态
16.JSONL 路径编码兼容:Agent 工具的路径编码规则变更会静默破坏日志定位
17.终端输出模式分类:从 Agent 终端 buffer 最后几行推断 active/idle/waiting_input
18.PR enrichment 并行容错:6 个 SCM API 调用 Promise.allSettled 部分失败仍可用
19.注意力分级:多 session 并行时按人类行动紧迫度排序,路由稀缺注意力
20.JSONL 大文件尾部读取:100MB+ session 文件只读末尾 128KB 的高效策略
21.PR enrichment 超时保护:外部 API 调用设 3-4s 超时,避免阻塞 Dashboard 渲染
22.Rate limit 自适应缓存:API 限流时自动延长缓存 TTL 从 5 分钟到 60 分钟
23.MCP 服务器三层递进检查:binary 存在→服务注册→认证状态的逐步深入诊断
24.install 闭环验证:安装流程末尾自动 doctor 确认实际效果
25.环境自动检测适配:SSH/Docker/Cloud 指标加权判断 local vs server
26.流式响应 span 生命周期管理:AsyncGenerator 的 span 需在流结束时才能关闭,中间状态不应污染 span 属性
27.OpenAI 兼容 API 提供商识别:从 client.base_url 推断实际提供商(Moonshot/DeepSeek),避免误判为 OpenAI
28.装饰器类型检查:确保装饰器只应用于正确的基类(ChatModelBase/AgentBase),避免误用导致属性提取失败
29.外部 TracerProvider 兼容:检测用户已设置的 TracerProvider(如 FastAPI auto-instrumentation),只添加 span processor 而不覆盖
30.评估门控支付:质量分数低于阈值时零支付,需前后端阈值常量一致
31.任务级成本聚合:内存累积多次调用后一次性写入,保证记录原子性
32.直报成本 vs 本地计算:OpenRouter 等提供商返回实际计费金额,应优先使用
33.task_completions 幂等替换:重试场景下同一 task_id 的记录需原地替换而非追加
34.经济状态恢复:跨 session 从 JSONL 末行恢复余额和累计值
35.环境变量劫持时机:模块导入时覆写 vs 运行时传参的 LangSmith SDK 兼容性
36.确定性 Example ID:SHA-256 seed 方案在指令微调后 ID 变化导致实验关联断裂
37.异步 URL 解析超时:LangSmith API 不可达时 2s 超时对 CLI 启动速度的影响
38.流式 token max 累积:多轮对话中 total_tokens 递增取 max 的正确性依赖 API 行为
39.操作历史自省:Agent 通过 MCP 工具查询自身操作历史,辅助决策
40.工具循环检测:识别 Agent 陷入只读不写的分析死循环并注入引导 prompt
41.对话轮次持久化:按 paper/session 组织完整对话记录,含内存优化事件
42.Token 双轨计数:tiktoken 精确计数为主、字符估算为回退的降级策略
43.日志文件触发热重载循环:日志写入触发 watchfiles 检测导致无限重启
44.多模块重复初始化 logging:多个入口模块各自调用 basicConfig 导致 handler 重复
45.Embedding 尺寸不一致诊断:混合提供商时 embedding 维度不匹配需要详细日志定位
46.Tracer 注入点选择:Factory 层 vs Agent 层 vs 手动注入,各有覆盖范围和灵活性权衡
47.Run Metadata 标签设计:哪些维度值得作为 trace 标签,影响后续筛选和聚合效率
48.Token 预算守卫 vs 精确计费:预算守卫防止成本失控但不提供精确账单,两者互补
49.Tracer 注入点选择的覆盖范围权衡:Factory 层全覆盖但无法区分调用场景,Agent 层可定制但易遗漏
50.短 UUID TraceID 碰撞概率:8 字符 hex 仅 4 字节熵,高并发下需评估碰撞风险
51.LangSmith 云端依赖的离线场景:网络不可达时 Tracer 回调的超时和队列行为
52.迭代 ROI 量化:每轮置信度增益与资源消耗的比值计算与趋势分析
53.自适应参数可观测:动态调整的阈值/预算/迭代上限需要日志记录以便调优
54.效率评级标准化:将迭代过程质量归纳为离散等级便于跨查询对比
55.停止原因分类:区分 5 种停止原因(达标/上限/超支/递减/其他)辅助系统调优
56.受众分层日志:同一事件需要为 LLM 决策、用户展示、开发者调试提供不同粒度的信息
57.工具参数内部键过滤:MCP 工具参数中混杂大量内部状态键需在日志中排除
58.MoviePy 渲染进度桥接:第三方库的 tqdm 进度条需桥接到 MCP progress 回调协议
59.artifact 级日志聚合:多媒体产物(视频片段/配音/字幕)各自需要独立的日志上下文
60.双定价表不一致:costs.py 用 per-token 常量,utils.py 用 per-1K 字典,两者可能对同一模型给出不同估算
61.JSON 全量覆写性能:每次 log_event 都 json.dump 整个文件,高频事件下 I/O 成为瓶颈
62.WebSocket 断连后日志丢失:CustomLogsHandler 的 send_json 在 WebSocket 关闭后静默失败,仅靠 JSON 文件兜底
63.去重决策可解释性:语义去重时输出相似度数值让用户验证合理性
64.transient 进度条与日志共存:进度条自动消失后不影响上方已输出的阶段日志
65.多源子源标签统一:不同数据源的子分类字段名不同需统一映射为人类可读标签
66.多 OTel TracerProvider 共存:LangWatch 独立 provider 避免覆盖 FastAPI 全局 provider
67.嵌套 Step Token 聚合:SDK 只读根 Step 数据,需递归遍历子 Step 汇总 token/cost
68.LangChain 回调桥接:不同追踪后端对 get_langchain_callback 的支持差异(4 个返回 None)
69.遥测 URL 分块:GET 请求 URL 超 2KB 时自动分块发送,二分搜索截断过长字段
70.并发组件 Span 父子关系:DAG 并行执行时 Span 嵌套关系退化为扁平结构
71.缓存命中率统计:区分缓存命中和实际 LLM 调用,计算命中率指导缓存策略优化
72.多 Worker 日志隔离:Gunicorn/Uvicorn 多进程部署时每个 worker 需独立日志配置
73.日志噪声过滤:高频健康检查和静态资源请求淹没有效日志,需路径级过滤
74.进程级内存监控:master 进程启动时报告内存基线,辅助判断内存泄漏
75.线程池卡死自动重启:检测卡死任务数超阈值后创建新 executor 替换旧的,需处理旧 executor 的 graceful shutdown
76.ContextVar 跨线程传播:ThreadPoolExecutor 的 worker 线程不继承主线程 ContextVar,需在 submit 时手动捕获并注入
77.Redis Hash 单字段无 TTL:Redis Hash 不支持为单个 field 设置过期时间,已完成任务需依赖整个 key 的 TTL 或后台清理
78.business_task_id 聚合状态判定:一个业务任务包含多个 item,需定义 any-failed/all-completed/else-in_progress 的聚合规则
79.HTTP 日志发送单例 + atexit:CustomLoggerRequestHandler 用双重检查锁单例 + atexit 注册清理,避免多实例和泄漏
80.定价表维护成本:100+ 模型价格需人工更新,新模型上线后存在滞后
81.全局 vs 角色级成本归属:所有角色共享一个 CostManager,无法按角色拆分成本
82.计费单位不统一:不同提供商用 $/1K 或 $/1M tokens,需在子类中分别处理
83.多加速器 VRAM 探测统一:CUDA/NPU/GCU/MUSA/MLU/SDAA/MPS 七种后端需逐一适配
84.batch ratio 决策可解释性:日志需标注 (from env) 或 (auto, vram=XGB) 帮助运维定位性能差异
85.Worker 空闲日志去重:轮询模式下空闲状态仅首次记录避免日志洪泛
86.SQLite 并发任务拉取:BEGIN IMMEDIATE + rowcount 检查防止多 Worker 重复拉取同一任务
87.Prometheus 文本→结构化 JSON 的实时解析与分类聚合
88.直方图桶按子系统特征定制:LLM 100ms-300s vs HTTP 1ms-60s
89.采集循环与持久化解耦:mpsc channel 异步写入避免阻塞采集
90.环形缓冲 + SQLite 双轨存储:内存保实时性,DB 保重启恢复
91.WebSocket broadcast 实时推送指标更新到 Dashboard
92.运行时健康监控:心跳检测、卡死 session 识别、队列深度追踪
93.工具循环检测:识别 Agent 陷入重复工具调用的死循环并熔断
94.Usage 时间序列:累积 token/cost 随时间变化的趋势数据与降采样
95.nostream tag 语义:流式追踪 vs 完整响应追踪的权衡,流式追踪产生碎片化 span 影响分析
96.评估实验元数据标准化:14 个配置参数的命名和类型需跨实验一致,否则无法筛选对比
97.pairwise 评估的位置偏差:LLM 裁判对第一个答案有系统性偏好,需 randomize_order 消除
98.多维评估分数聚合:11 个独立分数如何加权合并为单一质量指标,权重选择影响模型选型决策
99.图片 token 估算:多模态 Agent 需按 detail 级别和分辨率计算图片 token
100.流式与非流式统计一致性:流式用客户端估算、非流式用 API 返回值,两者存在系统性偏差
101.Observer 无状态 vs 有状态:每次查询创建新实例保证数据新鲜但增加 GC 压力
102.getattr 链式探测跨层统计:通过反射穿透多层封装获取内部统计数据的脆弱性
103.事务七态优先级排序:EXEC > AQUIRE > RELEASING > INIT > COMMIT > FAIL > RELEASED 的展示排序逻辑
104.LangGraph 内部元数据污染:langgraph_step/node/triggers 等字段淹没业务元数据需黑名单过滤
105.OTel resourceAttributes 膨胀:auto-instrumentation 注入大量属性需白名单精简
106.Scope 级 span 路由:同一 OTel SDK 产生的 span 需按 instrumentationScope 分流到不同后端
107.业务元数据标准化:tool/skill/model/query 等 30+ 字段需从多种命名风格中统一提取
108.多实例 Pino worker thread 内存膨胀:pino-pretty transport 每实例 spawn worker,需共享单例
109.AsyncLocalStorage 上下文丢失:setTimeout/EventEmitter/fire-and-forget promise 中 span 上下文断裂
110.LLM 中间件日志与业务日志统一:AI SDK LanguageModelMiddleware 需要桥接到自有日志系统
111.session 目录 symlink 跨平台兼容:latest 符号链接在 Windows 上可能失败需静默降级
112.Agent 状态机展示:10+ Agent 的 pending/in_progress/completed 三态实时转换与分组展示
113.报告完成度双条件判定:内容非空 AND 负责 Agent 已完成,避免中间轮次误判
114.消息去重:graph.stream 重复推送同一消息时通过 message_id 去重
115.Decorator 非侵入式日志:运行时包装方法实现日志持久化,不修改原始类
116.wandb Table 累积行数据的 bug workaround:每步创建新表复制旧数据避免 wandb#2981
117.mlflow 参数扁平化:dataclass/Enum/Path/list 需递归转换为 JSON 可序列化的扁平字典
118.分布式轨迹 dump 异步化:Ray Actor + deque 管理 pending futures 避免阻塞训练
119.per-token timing 的 token 基数选择:gen 阶段用 response tokens,其他阶段用 overall tokens
120.clip_ratio 指标设计:response 长度等于 max_length 的比例反映生成截断严重度
121.JSONL 多版本字段兼容:costUSD vs estimatedCostUsd 优先级与防双重计数
122.PR enrichment 半数失败判定:6 个并行 API 调用中 ≥3 个失败即判定 rate limited
123.终端输出历史污染:buffer 中残留的 Thinking 文本不应覆盖当前底部的权限弹窗
124.反向文件读取 UTF-8 安全:4KB 块边界可能切断多字节字符需累积后统一解码
125.CLI 短生命周期进程的 metrics 推送时机:必须在进程退出前完成,需要 5s 超时保护
126.零开销默认关闭:大多数用户不需要可观测性,不能因 OTel SDK 初始化拖慢命令执行
127.Decorator 透明插桩:业务代码无需感知遥测存在,通过接口包装自动添加 span + metrics
128.双轨记录策略:OTel 适合聚合分析(Grafana),JSONL 适合逐条审计和 git 共享
129.命令级根 Span 设计:在 CLI 框架的 PreRun 中创建根 span,通过 context 传播到所有下游操作
130.Happy Path Error 模式:预期路径失败时记录 WARN 并返回 fallback,减少样板代码
131.Token 经济学展示:向用户展示记忆复用的 token 节省比例,量化知识库价值
132.双端点健康检查:区分进程存活(health)和服务就绪(readiness)两种状态
133.版本不匹配检测:插件更新后检测 Worker 版本滞后并触发自动重启
134.五层配置优先级合并:CLI flags/env/project/user/defaults 的覆盖规则与冲突解决
135.npm 脚本自动化本地可观测性环境:下载/启动/配置/清理的全生命周期管理
136.Hook 扩展可观测性:通过 Stop/UserPromptSubmit 等 Hook 事件注入自定义监控逻辑
137.模型降级事件追踪:flash_fallback 事件记录自动降级链路辅助模型选择优化
138.工具审批决策追踪:accept/reject/modify 三态决策记录分析人机交互模式
139.拦截器快照隔离:调用过程中注册/注销拦截器不影响当前执行的一致性保证
140.content_hash 隐私保护:可观测数据记录 SHA-256 指纹而非原文,平衡追踪需求与数据安全
141.多模态调用追踪:vision/transcribe 等非文本调用的 metadata 采集(image_bytes/audio_bytes)
142.拦截器优先级洋葱模型:before 正序 after 逆序形成对称执行栈
143.Error-Driven Discovery 正则覆盖率:不同提供商的 400 错误格式差异大,需持续补充解析模式
144.Web Worker 跨线程日志归属:主线程和 Worker 的 console.log 混在同一控制台,仅靠前缀区分
145.Token 估算精度与分批效率的权衡:字符数/1.5 保守估算导致多分批,但避免了引入 tiktoken WASM
146.轮询日志降频策略:高频轮询场景下每 N 次才输出一条日志避免控制台洪泛
147.MFU 计算的 GPU 峰值 FLOPS 维护:新 GPU 发布后需手动添加到查找表
148.bpb vs loss 指标选择:tokenizer 无关的评估指标设计使跨实验对比更公平
149.代码膨胀度量:git 跟踪文件的行数/字符/token 统计作为项目健康信号
150.EMA 去偏:训练初期 smooth loss 的低估修正
151.分段报告崩溃安全:各阶段独立 .md 文件避免单文件追加的损坏风险
152.Prometheus 多进程目录残留:用户手动设置 PROMETHEUS_MULTIPROC_DIR 后未清理导致指标不准
153.OTel 环境变量大小写不一致:traceparent vs TRACEPARENT 在不同 OS 和容器运行时行为不同
154.MFU 计算的量化精度:FP8/MXFP4 等量化方法的 weight_byte_size 影响理论带宽估算
155.DP 多引擎 Histogram 聚合:多个 api_server 使用 prometheus mp 时 Histogram 可能不准确
156.KV Cache 驻留指标采样偏差:1% 采样率在低流量场景下样本不足导致统计失真
157.NVTX 与 CUDA Graph 互斥:layerwise NVTX tracing 不兼容 CUDA Graph 模式需运行时检测
158.Langfuse 与 LangGraph 线程池冲突:ThreadingInstrumentor 会干扰 LangGraph 内部线程池,需改用 config.callbacks 手动注入
159.SSE 事件队列日志洪泛:高频事件(writing_chunk/stream)需在入队时过滤 debug 日志避免淹没有效信息
160.任务日志文件生命周期:create_task_logger 创建的 handler 需在 finally 中 remove,否则 handler 泄漏
161.限流指标聚合到成本摘要:CostTracker.get_summary 聚合 RateLimiter 的等待统计,展示限流对延迟的影响
162.Stage 未关闭检测:多层嵌套中异常路径导致 open/close 不配对的诊断与恢复
163.双层 Profiler 统一:DB 层 JSON 树与 Core 层累加 map 两套计时体系的数据合并
164.CPU 时间 vs 墙钟时间:ElapsedCPUTime 排除 I/O 等待后的纯计算耗时对比分析
各项目的解法43 solutions
横向对比
| 维度 | MiroThinker | AI-Trader | AIRI | AgentOrchestrator | Agent | AgentScope | ClawWork | DeepAgents | DeepCode | DeepTutor | DeepWiki | DeerFlow | FastCode | FireRed-OpenStoryline | GPT-Researcher | Horizon | Langflow | LightRAG | MemOS | MetaGPT | MinerU | Moltis | OpenClaw | Open | OpenManus | OpenViking | PageIndex | Refly | Stagehand | TradingAgents | VRAG | agent-orchestrator | beads | claude-mem | iflow-cli | memU | moyin-creator | nanochat | vLLM | vibe-blog | zvec |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 追踪方式 | — | LangChain StdOutCallbackHandler + verbose/debug 全局开关 | DebugService 单例 + WebSocket 实时广播 12 种事件类型 | 解析 Claude Code 原生 JSONL 日志,零侵入式采集 | Channel.check() 去中心化自检,doctor 聚合遍历 | 装饰器驱动,5 种专用装饰器(@trace_llm/@trace_reply/@trace_toolkit/@trace_format/@trace) | EconomicTracker 中心化记账 + TrackedProvider 透明拦截 | LangSmith SDK 自动追踪 + 环境变量路由到独立项目 | 三层独立追踪:LLM日志(JSONL) + 操作历史(内存列表) + 工作流进度(asyncio广播) | — | Python logging 标准库,无分布式追踪 | LangSmith LangChainTracer 回调,Model Factory 层自动注入 | Python logging 分级日志 + iteration_history 列表内存追踪 | ContextVar 事件 sink + @wrap_tool_call 中间件拦截 | tiktoken 客户端估算 + cost_callback 回调链累加 | Rich Progress 四组件进度条 + Emoji 阶段标记,无外部追踪服务 | BaseTracer ABC + 7 适配器并行广播,asyncio.Queue 异步写入 | Langfuse drop-in 替换 AsyncOpenAI,环境变量开关零侵入 | Prometheus Counter/Summary/Histogram/Gauge 四类指标 + JSON 结构化事件日志双轨 | CostManager 基类 + 多态子类,每次 API 调用后 _update_costs 钩子自动累加 | loguru + time.time() 手动计时,无分布式追踪 | metrics crate facade + #[cfg(feature)] 编译期门控 | JSONL transcript 逐行追加 + 按需扫描聚合 | LangSmith 原生集成:@traceable 装饰器 + LangChain 自动追踪 | LLM 单例累积器,每次调用后 update_token_count 累加 | BaseObserver ABC + 4 具体 Observer 聚合到 ObserverService | 函数参数逐层传递 logger,无分布式 trace | OTel NodeSDK 双轨:BatchSpanProcessor→Tempo + LangfuseSpanProcessor→Langfuse | Pino multistream + AsyncLocalStorage span 上下文自动注入 | LangChain BaseCallbackHandler 四钩子(llm_start/chat_model_start/llm_end/tool_start) | Tracking 类 6 后端广播,log(data,step) 统一接口 | JSONL 尾部读取 + 终端正则双轨检测 | OTel SDK + 命令级根 span,所有操作自动成为子 span | Logger 单例 + 14 组件标签 + correlation ID 数据流追踪 | OpenTelemetry SDK + OTLP/gRPC 导出,支持 Jaeger/GCP/AWS/Azure | 双层拦截器:LLM 调用层 + Workflow 步骤层,before/after/on_error 三阶段钩子 | console.log + [ModuleName] 前缀约定,无追踪框架 | wandb 实时推送 + 终端格式化行 + Markdown 分段报告三层并行 | OTel SDK + BatchSpanProcessor,OTLP gRPC/HTTP 双协议导出 | Langfuse CallbackHandler 自动追踪 + ContextVar 任务链路注入 | 栈式 Stage 嵌套 + JSON 树,open/close 手动插桩 |
| 数据粒度 | — | 每轮对话 + 每次交易操作(buy/sell/no_trade) | LlmTraceEntry 记录 turnId/model/usage/durationMs/estimatedTokens | session 级聚合(input/output/cache_read/cache_creation 四种 token) | 渠道级四态(ok/warn/off/error)+ tier 分级 | Span 级别,每次 LLM/Agent/Tool 调用一个 span | 逐调用级别,任务级聚合写入,日级余额快照 | per-message usage_metadata 级别,区分 input/output tokens | LLM响应级 + MCP工具调用级 + 工作流阶段级 | — | 请求级 token 数 + embedding 验证统计 | 每次 LLM 调用 + run metadata 标签(model/thinking/plan_mode) | 每轮迭代 5 维指标:confidence/gain/lines/ROI/budget% | 工具调用级:tool_start/tool_progress/tool_end 三事件 | 单次 LLM 调用级,无 token 类型区分(input/output 合并估算) | 按 source/sub_source 两级分层统计,单条 item 级进度 | 双层 ContextVar:图级 TraceContext + 组件级 ComponentTraceContext | 请求级 tracing(Langfuse)+ 调用级 token 累加(TokenTracker) | user_id × task_type 多维标签,支持按用户按任务类型切分 | 全局累计 prompt/completion tokens + 总费用,无单角色/单任务拆分 | 流水线阶段级(load_image/infer/gc),非单请求级 | provider × model 双维度,4 种 token 类型分别计数 | 每次 LLM 调用级,含 4 种 token 类型 + cost breakdown | 函数级:8 个搜索函数逐个追踪,6 个 Agent 节点逐个标记 | input/completion 两类,区分流式估算和非流式精确值 | model×provider 双维 token 统计 + 队列四态 + 事务七态 | — | trace/span/generation 三层,generation 含 model/usage/prompt 完整数据 | 4 功能维度 × 5 指标(prompt/completion/reasoning/cached/time) | 全局累加:LLM 调用次数、工具调用次数、input/output tokens 四指标 | 训练步级:20+ RL 指标 + per-token timing + GPU 吞吐 | session 级 token/cost 累加,含 cache_read/cache_creation 4 种 token | 存储操作级(20+ 方法)+ AI 调用级 + 命令级 | observation 级:每个 observation 的 read/discovery tokens | 8 种日志事件 + 6 种指标,token 按 5 类型分计 | 单次 LLM 调用级:input/output/cached/reasoning tokens + latency_ms + finish_reason + content_hash | 批次级进度 + 单任务轮询 + 场景级事件三层 | 每步终端行,每 100 步 wandb,eval 时 bpb/CORE | 请求级 TTFT/ITL/E2E + 迭代级 token 吞吐 + 组件级 FLOPs/带宽 | 4 种 token(input/output/cache_read/cache_write)按 Agent 分组 | 查询级多阶段嵌套(analyze→plan→search),微秒精度 |
| 持久化 | — | JSONL 双轨:对话日志按日期分文件 + 持仓日志追加式全量快照 | JSONL 文件(session-*.jsonl)+ 内存环形缓冲 1000 条 | 依赖 Agent 自身 JSONL 文件,无独立存储层 | Config YAML 持久化配置状态,无运行时指标持久化 | OTLP/HTTP 导出到后端(Studio/CloudMonitor/Langfuse),不本地持久化 | 三层 JSONL:balance + token_costs + task_completions | ATIF-v1.2 JSON trajectory + LangSmith 云端 | LLM日志JSONL文件持久化,操作历史仅内存,对话日志Markdown持久化 | — | RotatingFileHandler 本地文件轮转 | LangSmith Cloud 托管,本地无持久化 | 日志文件持久化,迭代指标仅内存(随请求生命周期) | ArtifactStore JSON 文件 + meta.json 元数据索引 | JSON 文件全量覆写 + 文本日志文件双轨 | 无持久化,仅终端实时输出,transient=True 完成后清除 | 各适配器自行持久化到对应后端,无本地文件存储 | Langfuse Cloud/自托管持久化;本地 RotatingFileHandler 10MB×5 | Prometheus 内存指标 + Redis Hash 任务状态 7 天 TTL + 文件轮转日志 | Pydantic BaseModel JSON 序列化,Team.serialize 保存到文件 | stderr 输出 + SQLite 任务状态,无独立日志文件 | SQLite WAL 单连接 + mpsc 异步写入,7 天保留 | JSONL 文件,崩溃安全,rolling 日志 24h 清理 | LangSmith Cloud 托管,无本地持久化 | loguru 文件日志(时间戳命名),无结构化 JSON 持久化 | 纯内存累加,无持久化(依赖外部落盘) | — | Langfuse Cloud + OTLP→Tempo,进程内 Map 管理活跃对象 | 6 文件分流:1 JSONL + 5 分类 pretty log | Decorator 包装追加写入 message_tool.log + 报告段落独立 MD 文件 + 最终状态 JSON | 委托后端持久化(wandb cloud/mlflow/tensorboard 本地) | JSONL 文件(Claude Code 原生)+ key=value 扁平 metadata 文件 | 双轨:OTel 推送到 VictoriaMetrics + JSONL 本地审计 | 按日期轮转文件日志(appendFileSync),~/.claude-mem/logs/ | OTLP 远程 + 本地文件导出(--telemetry-outfile)双轨 | 无内置持久化,通过 after 拦截器外挂(日志/数据库/第三方追踪) | localStorage 持久化模型限制发现缓存 | wandb 云端 + 本地分段 .md 文件合并为 report.md | Prometheus 多进程 .db 文件 + OTel OTLP 远程导出 | BlogTaskLog JSON 文件 + Langfuse 云端 + RotatingFileHandler | JSON 字符串序列化,无内置持久化,由调用方决定存储 |
| 多提供商 | — | 无多 LLM 提供商追踪,单一 OpenAI 兼容接口 | xsai SDK 统一接口,usage 从 API 返回值提取 | 仅适配 Claude Code,其他 Agent 需实现 Agent 接口 | 12 渠道统一 Channel 接口,各自实现 check() | 支持 8 种提供商识别(OpenAI/Anthropic/Dashscope/Gemini/Ollama/DeepSeek/Moonshot/Bedrock) | OpenRouter 直报成本优先,本地价格计算回退 | 仅 LangSmith,无多后端适配 | include_models白名单过滤,支持Claude/GPT-4/o3-mini | — | 7 家 LLM 提供商统一 logger 接口 | 仅 LangSmith,通过环境变量开关 | OpenAI + Anthropic 双提供商,统一 openai_chat_completion 封装 | — | 硬编码 OpenAI 定价,未知模型返回默认值 0.0001 | 4 种 AI 提供商共享同一进度条,不区分提供商级指标 | 7 个适配器同时激活:LangSmith/LangFuse/LangWatch/ArizePhoenix/Opik/Traceloop/Openlayer | OpenAI/Gemini 各自适配为统一 {prompt_tokens, completion_tokens, total_tokens} | 单一 Prometheus 后端,CustomLoggerRequestHandler 支持外部日志服务 | TOKEN_COSTS 覆盖 100+ 模型,15+ 提供商,含 6 套独立定价表 | 不涉及 LLM 多提供商,聚焦 GPU 推理后端 | ProviderChain failover 链,每个 provider 独立 circuit breaker + 指标 | UsageLike 归一化 10+ 种字段命名到 5 字段标准结构 | 通过 init_chat_model 统一接口支持 OpenAI/Anthropic/Google/Bedrock 等 | OpenAI + Azure + Bedrock 三提供商,Bedrock 适配层统一 usage 格式 | OpenAI/火山引擎/LiteLLM 三 Provider 分桶统计 | — | OTLP + Langfuse 双后端独立启用,环境变量驱动 | LLMClient 抽象层统一 usage 接口,支持 OpenAI/Anthropic/Google/Groq/Cerebras | 通过 LLM Client 工厂适配 OpenAI/Anthropic/Google/xAI/Ollama/OpenRouter,统一 usage_metadata 提取 | wandb/mlflow/swanlab/vemlp_wandb/tensorboard/console 6 种 | 仅 Claude Code 插件,但 Agent 接口支持 codex/aider/opencode 扩展 | 仅 Anthropic,但 token 计量从 API 返回值精确提取 | 不涉及(专为 Claude SDK 设计,单提供商) | OTel 标准协议,兼容 Jaeger/GCP/AWS X-Ray/Azure AppInsights | best-effort 提取:_get_attr_or_key 同时支持 SDK 对象和 dict,适配 OpenAI/Doubao/Grok/OpenRouter | FeatureRouter 多模型轮询调度 + 多 Key 轮转 | 仅 wandb,DummyWandb 优雅降级 | 可插拔 _REGISTERED_TRACING_BACKENDS + entry_points 插件 StatLogger | OpenAI/Anthropic/智谱/DeepSeek 四提供商 token 提取适配 | Factory 模式注册 Logger:ConsoleLogger + AppendLogger(glog) |
| 日志格式 | — | JSONL 追加式,对话含 signature+messages,持仓含 date+id+action+positions | LlmLogEntry 六种 kind + tags 标签 + 链式查询 DSL | JSONL(Claude Code 原生格式),每行一个 JSON 对象 | loguru 默认静默,--verbose 开启 stderr INFO | — | 自定义四级 JSONL(error/warning/info/debug) | Python logging 标准模块,无结构化 JSON | JSONL(默认) / 纯文本 / Markdown 三种可配置格式 | — | asctime-level-name-file:line-message 半结构化 | Python logging,格式 asctime-name-level-message | 标准 Python logging 格式,YAML 配置驱动 | colorlog 彩色控制台 + LOG_FORMAT 含文件名行号 | logging 文本 + JSONResearchHandler 结构化事件 | Rich markup 彩色输出 + logging.getLogger 标准日志双轨 | Pydantic Log 模型 + serialize() 序列化 + 降级 str() fallback | 结构化 Python logging,console 简洁 + file 详细双格式 | 三层 Handler:console(no_datetime) + file(ConcurrentTimedRotating) + HTTP(custom_logger) | loguru 结构化日志,双输出(stderr + 按日期文件),ToolLogItem Pydantic 模型 | loguru 默认格式,含时间戳/级别/模块/行号 | tracing crate 结构化日志 + MetricsLayer span→label 传播 | tslog JSON lines + console pretty/compact/json 三种风格 | — | loguru emoji 文本(运行时)+ structlog JSON/Console(结构化) | Python logging + TimedRotatingFileHandler 文件轮转 | 自定义 JsonLogger,全量 JSON 数组重写到文件 | console.log/warn/error 结构化前缀 [Langfuse]/[TraceManager] | Pino JSON + 自定义 prettifyEvent 人类可读格式 | 纯文本行日志(timestamp [type] content),非结构化 | 斜杠分层命名空间 critic/score/mean,后端自动分组 | Claude Code JSONL(type/costUSD/usage/inputTokens 多字段兼容) | JSONL append-only,通过 Kind 字段区分事件类型 | [timestamp] [LEVEL] [COMPONENT] [corrId] message {context} data | OTel 结构化日志,8 种事件类型各有独立属性 schema | Python logging + 拦截器自定义,无内置结构化日志格式 | [ModuleName] 前缀的 console.log/warn/error | 终端彩色格式化 + Markdown 分段文件 | 结构化 logging + ColoredFormatter + 可配置 stream/level/prefix | 结构化 StepLog JSON + Rich 彩色控制台 + 按任务分离文件 | printf 格式化 + 级别/时间/线程ID/文件:行 结构化前缀 |
| 指标采集 | — | 离线批量计算 14 项金融指标(CR/Sharpe/Sortino/Vol/MDD/Calmar/Win Rate 等) | — | 轮询式:5s 间隔读取 JSONL 文件 mtime + lastType | — | — | — | — | token计数(tiktoken精确+字符估算回退),无成本金额计算 | — | — | 无独立指标采集,依赖 LangSmith 内置统计 | 每轮迭代即时计算 ROI + 预算使用率,非事后汇总 | — | 无独立指标采集,成本通过回调链内存累加 | — | OTel MeterProvider 单例 + PrometheusMetricReader + 4 种 Metric 类型 | statistic_data 全局字典追踪 llm_call/llm_cache/embed_call 三指标 | 模块级纯函数 API,TimingSpan 双模式埋点(装饰器+with) | 仅 token 数和费用,无延迟/错误率等运行时指标 | time.time() 手动计时,输出 page/s 和 images/s 吞吐量 | Prometheus 文本导出 + 10s 间隔采集循环解析为结构化 JSON | 30s 心跳 + webhook/session/queue 全链路 + 诊断事件 | — | 无独立指标采集,token 数据仅在日志中输出 | 按需查询(@property 懒创建),非定时采集 | 入口记录 total_page_number + total_token,流水线各步记录中间状态 | OTLPMetricExporter→Prometheus,60s 周期导出 | FlowLoggerMetrics 累加器,task 完成时聚合 durationMs/llmRequests/tokens/cdpEvents | threading.Lock 保护的内存计数器,被动拉取快照 | 三层纯函数:data_metrics + timing_metrics + throughout_metrics | — | Decorator 模式透明插桩,业务代码无感知 | Token 经济学(read/discovery/savings%)+ 进程池活跃数 | 4 Counter + 2 Histogram,sessionId 全局关联 | — | BatchProcessor 返回 failedBatches/totalBatches 统计 | loss/bpb/MFU/tok_per_sec/CORE/ETA 六维指标 | Prometheus Counter/Gauge/Histogram 30+ 指标,1-2-5 序列桶 | GlobalRateLimiter 暴露 total_waits/wait_seconds 限流指标 | Core 层 map<string,double> 累加计时 + DB 层 JSON 嵌套树 |
| 可视化 | — | Matplotlib+Seaborn 4 维滚动指标图,6 Agent + 基准线对比,PDF 输出 | WebSocket 调试面板 + MCP REPL Server 外部 Agent 接入 | Next.js Web Dashboard + Kanban 分组 + 动态 Favicon 三色健康 | CLI emoji 文本报告,无 Dashboard/Web UI | AgentScope Studio 原生可视化,展示调用链和 token 统计 | React Dashboard + Recharts 图表 + WebSocket 实时推送 | LangSmith Web UI + CLI 内嵌可点击线程链接 | WebSocket实时进度推送到前端,百分比+消息文本 | — | — | LangSmith Dashboard,支持按 metadata 筛选 | — | — | WebSocket 实时推送到前端 + JSON 文件事后分析 | Rich SpinnerColumn+BarColumn+MofNCompleteColumn 终端内实时渲染 | — | 依赖 Langfuse Dashboard,无内置可视化 | — | 无内置可视化,通过 logger.info 文本输出累计费用 | — | 三层 API(/metrics + /api/metrics + /api/metrics/history)+ WebSocket 实时推送 | 时间序列降采样 + 日/模型/工具多维聚合,UI 层渲染 | LangSmith Cloud UI:调用链视图 + 实验对比 + pairwise 排名 | 无内置可视化,依赖日志文件人工分析 | tabulate ASCII 表格,适合 CLI 和日志 | 无内置可视化,依赖 JSON 文件人工查阅 | — | — | Rich Live Layout 四区域仪表盘(Progress/Messages/Analysis/Footer),4Hz 刷新 | wandb Table 累积验证样本 + swanlab Text 格式化 | Next.js Dashboard + AttentionZone 分区 + ActivityDot 脉冲动画 | Grafana + VictoriaMetrics,推荐本地栈(:8428/:9428/:9429) | Context 注入时 Markdown/ANSI 双格式展示经济学数据 | Jaeger UI(localhost:16686)+ npm run telemetry 一键部署 | — | — | wandb Dashboard 远程可视化 + Markdown 汇总表 | — | Langfuse 控制台 trace 视图 + SSE 推送 token_usage 到前端 | — |
| 成本追踪 | — | 无 token/成本追踪,仅追踪交易层面的现金变化 | — | costUSD 优先,fallback Sonnet 4.5 定价估算($3/M in + $15/M out) | — | 记录 token 数量,但不计算成本金额(需外部系统根据定价表计算) | 四通道分离:llm_tokens/search_api/ocr_api/other_api | token 累加但无定价表,不计算美元成本 | 无成本金额追踪,仅token计数用于上下文管理 | — | 仅 token 计数,无价格计算 | Token 预算守卫(SummarizationMiddleware 阈值触发),非精确计费 | tiktoken 精确 Token 计数 + API 层 prompt/completion/total 三字段 | — | research_costs 浮点累加器,支持阶段差值计算 | 无成本追踪,AI 调用不记录 token 消耗 | Openlayer 适配器递归聚合嵌套 Step 的 promptTokens/completionTokens/cost | 仅统计 token 数,不计算费用(无价格映射) | — | 静态定价表 $/1K tokens,Fireworks 按模型尺寸分级 $/1M tokens | — | input/output/cache_read/cache_write 四种 token 按 provider×model 计数 | API cost 优先,回退到 config 价格表估算,记录 missing 计数 | 无内置成本追踪,依赖 LangSmith 平台从 trace 数据提取 | 仅 token 计数,无价格映射和成本计算 | 仅 token 计数,无定价表和金额计算 | tiktoken 前置计算文档 token 总量,无 LLM 调用级 token 追踪 | LangChain tokenizer 精确计数 + countToken 回退,四维度分拆 | 无内置成本计算,仅提供 token 计数供外部计费 | 仅统计 token 数量,未计算美元成本 | — | costUSD 优先 → estimatedCostUsd 回退 → Sonnet 定价估算三级降级 | AI token 精确计量(input/output 分离),记录到 metrics + audit | 字符估算(4 chars/token)计算 read 成本,discovery_tokens 记录原始成本 | token.usage 按 input/output/thought/cache/tool 五类型分计 | 提供 token 原始数据,成本计算由拦截器实现 | 无显式成本追踪,仅通过 token 估算控制分批 | Lambda Cloud 定价表 × GPU 数量 × 运行时长估算 | — | PRICING 硬编码定价表 × 精确 token 数 → USD 实时估算 | — |
| Agent 状态追踪 | — | position.jsonl 全量快照 + 单调递增 id 保证操作序列完整 | BrainStateEvent 三态(idle/processing/waiting)+ 队列长度 | 六态模型:active/ready/idle/waiting_input/blocked/exited | 无 Agent 运行时状态,仅检查工具可用性 | @trace_reply 记录 Agent 输入输出消息,但不追踪内部状态变化 | — | Trajectory steps 记录 agent/user/tool 三类消息 | — | — | — | SubagentStatus 五态枚举 + stream_writer 6 种事件类型 | — | NodeSummary 按 artifact_id 聚合错误/警告 | _log_event 记录 research step 生命周期事件 | — | — | — | Redis Hash 四态(waiting/in_progress/completed/failed)+ business_task_id 聚合 | — | — | — | — | — | — | DagStats 四态(pending/in_progress/done/total)节点级追踪 | — | — | — | MessageBuffer 维护 12 Agent 的 pending/in_progress/completed 三态状态机 | — | 6 态 ActivityState:active/ready/idle/waiting_input/blocked/exited | — | — | flash_fallback 事件追踪模型降级,tool_call 追踪审批决策 | — | — | — | — | SessionTracker 记录 review_score/depth_score/section_quality 趋势 | — |
| 崩溃安全 | — | JSONL append-only + fcntl 文件锁保证并行写入原子性 | — | 进程退出 → exited 状态 → respond 注意力级别 → 通知人类 | — | — | — | — | JSONL追加写入天然崩溃安全,操作历史随进程丢失 | — | — | Tracer 附加失败 try/except 降级,不阻断核心流程 | — | developer_mode 分级:开发环境输出 traceback,生产环境返回结构化摘要 | — | — | — | getattr 安全提取 usage 字段,缺失时返回 0 不抛异常 | — | CostManager 状态可序列化恢复,Team.deserialize 支持断点续跑 | — | — | JSONL 追加写入 + appendFileSync + 500MB 文件上限 | — | loguru 文件 sink 自动 flush,structlog 无额外保护 | — | 每次写入全量重写文件,进程崩溃不丢失已记录数据 | — | — | — | — | — | — | appendFileSync 同步写入 + stderr 回退 + happyPathError 优雅降级 | — | — | — | — | — | — | — |
| 业务元数据注入 | — | LangChain with_config 注入 tags=[signature, date] 和 run_name | — | — | — | — | task_id/date/attempt/wall_clock_seconds 关联到每条记录 | — | — | — | — | 四维标签:model_name/thinking_enabled/is_plan_mode/subagent_enabled | — | — | — | — | 每个适配器独立转换 LangFlow 类型到后端兼容格式 | — | emit_monitor_event 自动提取 label/user_id/mem_cube_id/trace_id/host/env 等 12 个字段 | — | — | 20 个标签键集中定义在 labels 模块,含 provider/model/tool/channel/role | — | aevaluate metadata 记录 14 个配置参数,实验完全可复现 | — | — | — | buildToolMetadata 注入 30+ 业务字段(skill/toolset/model/query) | Pino mixin 自动注入 eventId(UUIDv7)/sessionId/taskId/stepId/actionId | — | — | — | — | — | — | LLMCallContext 携带 profile/operation/step_id/trace_id/tags 五维元数据 | — | — | — | — | — |
| Worker日志隔离 | — | 并行模式下 per-signature 独立 runtime_env.json 配置文件 | — | — | — | — | — | — | 单进程架构,无Worker隔离需求 | — | 无隔离,RotatingFileHandler 非进程安全 | — | — | — | — | — | ContextVar 隔离不同 Flow 执行的追踪上下文 | Gunicorn post_fork 钩子为每个 worker 独立配置 logger | ContextFilter 从 ContextVar 注入 trace_id/env/user_type/user_name 到每条日志 | — | worker_id 前缀(hostname-device-pid)标识每条日志来源 | — | — | — | — | — | — | — | — | — | log_{rank} 文件 + rank 参数控制 GPU 内存日志 | — | — | 单 Worker 守护进程,子进程 stderr 通过 ProcessRegistry 捕获 | — | — | WorkerBridge [WorkerBridge] 前缀区分主线程/Worker 日志 | — | per-engine label + PROMETHEUS_MULTIPROC_DIR 进程级隔离 | create_task_logger 按 task_id 创建独立 FileHandler | — |
| 延迟统计 | — | 无延迟统计,仅通过 verbose 模式输出 LLM 调用过程 | — | — | — | — | wall_clock_seconds 端到端任务耗时,含 API 重试等待 | — | DialogueLogger记录每轮duration,无单次LLM延迟统计 | — | — | SubagentResult 记录 started_at/completed_at 时间戳 | — | — | — | — | — | Langfuse 自动记录请求延迟,TokenTracker 不追踪延迟 | Summary 记录 task_duration 和 task_wait_duration,emit_monitor_event 计算 total_duration_ms | — | 阶段耗时 round(2) + 吞吐量 round(3),无百分位数 | HTTP/LLM/TTFT/Tool 四套独立直方图桶,LLM 桶覆盖 100ms-300s | avg/min/max/p95 + 按日聚合 + 12h 上限过滤 | — | 无延迟统计,未记录 LLM 调用耗时 | — | — | — | — | 全局 elapsed time(start_time 到当前),无单 Agent 耗时拆分 | codetiming.Timer 嵌套上下文管理器,per-token ms 转换 | — | — | — | tool.call.latency + api.request.latency 双 Histogram | — | TaskPoller 记录 pollCount 和 elapsed,ping 测量 Worker 延迟 | — | TTFT/ITL/E2E/Queue/Prefill/Decode/Inference 七维延迟直方图 | — | ElapsedTime 单调时钟纳秒级 + ElapsedCPUTime 线程级 CPU 时间 |
| 金融绩效评估 | — | Sharpe/Sortino/MDD/Calmar/Win Rate 等标准金融指标,支持多市场年化参数 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| Span 传播 | — | — | EventBus AsyncLocalStorage 自动 traceId/parentId 传播 | 无 OpenTelemetry,通过 JSONL entry type 隐式关联调用链 | — | 通过 OpenTelemetry Context 自动传播,装饰器内调用 start_as_current_span | — | LangSmith trace context 通过 RunnableConfig 传播 | — | — | — | 自定义 trace_id 通过 metadata dict 手动传播,非 OTel context | — | — | LangSmith 通过环境变量启用,LangChain 自动注入 span | — | ArizePhoenix/Traceloop 用 W3C TraceContext 传播,Opik 用自定义 header | — | ContextVar + ContextThreadPoolExecutor 自动传播 trace_id 到 worker 线程 | — | — | metrics-tracing-context MetricsLayer 自动将 span 字段注入指标标签 | — | LangGraph StateGraph 自动传播 trace context 到子图和并行节点 | — | — | — | OTel context.with 自动 parent-child + parentSpanId 手动嵌套 | AsyncLocalStorage mixin 自动注入 taskId/stepId/actionId 三层嵌套 | — | — | — | 通过 context 自动传播,根 span 在 CLI 入口创建 | — | sessionId 作为公共属性贯穿所有日志和指标 | — | — | — | os.environ 注入 traceparent/tracestate,子进程自动继承 | LangGraph config.callbacks 注入,不用 ThreadingInstrumentor 避免线程池冲突 | trace_id 从 Profiler 经 SQLEngine 传播到 QueryPlanner |
| 渠道分层 | — | — | PostHog 四平台独立 project key(Web/Desktop/Pocket/Docs) | — | tier 0/1/2 按配置复杂度分层展示 | — | — | — | — | — | — | — | — | — | — | 5 种数据源 × 子源标签两级分类统计 | — | — | — | — | — | Telegram/Discord/MCP 各有独立指标模块,channel 标签区分 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 版本追踪 | — | — | PostHog register app_version/commit/branch/build_time | — | GitHub API 轮询 latest release + commit SHA | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 日志噪声过滤 | — | — | persistEvent 白名单 7 种类型,brain_state 等高频事件不持久化 | parseJsonlFileTail 只读尾部 128KB,天然过滤历史噪声 | watch 命令正常时单行输出,异常时详细报告 | — | — | — | — | — | 自定义 Filter 类按消息内容过滤 | — | — | exclude 集合过滤内部参数键 + summary_levels 控制输出级别 | propagate=False 防止 root logger 重复,无路径级过滤 | — | — | — | — | — | 空闲状态仅首次记录 debug 日志,避免轮询刷屏 | — | — | — | — | — | — | EXCLUDED_SCOPES Set O(1) 排除 6 类基础设施 scope | NOISY_CDP_EVENTS 硬编码 Set 过滤 10 种高频 CDP 事件 | — | — | — | — | — | — | — | TaskPoller 每 10 次轮询才输出一次进度日志 | — | engine_is_idle 时降级为 debug 级别,避免空闲系统日志洪泛 | werkzeug/fsevents/httpcore/openai 四个高频 logger 静默 | — |
| MCP 调试接口 | — | — | 端口 3001 暴露 4 资源 6 工具,支持 SSE + Streamable HTTP | — | — | — | — | — | — | — | — | — | — | tool_progress 实时进度回调 + MCPMoviePyLogger 渲染进度 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 卡死检测 | — | — | — | JSONL mtime 超过 readyThresholdMs(5min) 判定为 idle | — | — | — | — | 工具循环检测:连续N次只读不写触发分析循环告警 | — | — | SubagentExecutor 超时机制 + SubagentLimitMiddleware 并发截断 | — | — | — | — | — | 无内置卡死检测,依赖 Gunicorn worker timeout | DispatcherMonitor 周期检查 running_tasks 耗时,超阈值自动重启线程池 | — | TaskScheduler 定期 reset_stale_tasks 重置超时 processing 任务 | cron stuck_jobs_cleared_total 指标,2h 阈值自动清理卡死任务 | 120s 阈值 + session 状态机 + 工具循环 4 种检测器 | — | 基于重复内容检测(duplicate_threshold=2),触发策略变更提示 | TransactionObserver.get_hanging_transactions 300s 阈值检测 | — | — | — | — | — | JSONL mtime 超 5 分钟阈值降级为 idle,lifecycle-manager 30s 轮询 | — | 队列 3 分钟空闲超时 abort + 5 分钟孤儿收割器 + 版本不匹配重启 | — | — | TaskPoller 动态超时 + 30 分钟硬上限 | — | — | — | — |
| 注意力路由 | — | — | — | 六级 AttentionLevel:merge > respond > review > pending > working > done | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | 6 级 AttentionLevel:merge > respond > review > pending > working > done | — | — | — | — | — | — | — | — | — |
| 进程级监控 | — | — | — | findClaudeProcess() 通过 tmux pane TTY + ps 匹配进程 | — | — | — | — | — | — | 无进程级监控,仅应用级日志 | — | — | — | — | — | — | — | — | — | get_vram 多加速器显存探测 + MINERU_VIRTUAL_VRAM_SIZE 覆盖 | — | — | — | — | — | — | — | — | — | — | — | — | ProcessRegistry Map 追踪 PID + 三层孤儿收割(注册表/系统/空闲) | — | — | — | — | mark_process_dead 清理 + TemporaryDirectory 自动回收 | — | — |
| 健康端点 | — | — | — | SSE /api/events 提供实时 snapshot,含 heartbeat 保活 | MCP get_status 工具 + CLI doctor 命令双入口 | — | — | — | — | — | /health 返回 status+timestamp+service | — | /health 轻量检查 + /status 完整状态 + /cache-stats 缓存统计 | — | — | — | LangFuse 1s 超时健康检查,Opik auth_check,Traceloop URL 校验 | — | dispatcher.stats() 返回 running/inflight/handlers 三项运行时统计 | — | /api/v1/health 含 DB 连通性 + 队列统计 | /metrics 端点 + uptime_seconds gauge + connected_clients gauge | — | — | — | /health + /observer/system 双端点,聚合四组件健康 | — | — | — | — | — | SSE /api/events 5s 轮询 + 15s 心跳,无独立 health/readiness 端点 | — | 双端点:/api/health(存活)+ /api/readiness(就绪,503 直到初始化完成) | — | — | — | — | engine_sleep_state Gauge 三态(awake/weights_offloaded/discard_all) | — | — |
| 缓存统计 | — | — | — | TTLCache 5min 默认 TTL,rate limit 时自适应延长到 60min | — | — | — | — | 无缓存统计 | — | — | — | CacheManager.get_stats() 返回 volume/items,支持 disk 和 Redis | — | — | — | — | statistic_data 区分 llm_call 和 llm_cache,可计算缓存命中率 | — | — | — | — | — | — | — | — | — | — | task 完成事件支持 cacheHit 标记,跳过 LLM 调用时记录 CACHE HIT | — | — | TTLCache 5min 默认 TTL,rate limit 时自适应延长到 60min | — | — | — | — | ModelRegistry 三层查找命中层级可从日志推断 | — | 滑动窗口 1000 请求命中率 + KV 驻留生命周期/空闲/复用间隔 | — | — |
| 日志级别 | — | — | — | 无日志级别,按 JSONL type 字段分类 | — | — | — | — | basic(3字段) / detailed(含token+session) 两级配置 | — | 环境变量 LOG_LEVEL 动态配置 | INFO 默认,Tracer 附加用 DEBUG,失败用 WARNING | YAML 配置 4 级:DEBUG/INFO/WARNING/ERROR | 五级分层:ERROR/WARNING/INFO_LLM/INFO_USER/DEBUG | INFO 为主,error 时 exc_info=True 输出堆栈 | Scraper 层 WARNING 级 logger,Orchestrator 层 Rich Console 直出 | — | VERBOSE_DEBUG 环境变量控制详细日志截断(150字) | — | 可配置 print_level + logfile_level 双级别,默认 INFO/DEBUG | MINERU_LOG_LEVEL 环境变量,INFO/DEBUG 两级分流 | — | 7 级(silent/fatal/error/warn/info/debug/trace) | — | 双 sink 分级:stderr INFO + 文件 DEBUG | — | 接口支持 info/error/debug/exception 四级,但级别未写入数据 | span 四级 DEBUG/DEFAULT/WARNING/ERROR | 三级 verbose(0=error/1=info/2=debug)映射到 Pino 标准级别 | — | — | — | — | DEBUG/INFO/WARN/ERROR/SILENT 五级,配置文件驱动 | 通过 logPrompts 开关控制 prompt 内容记录粒度 | 拦截器异常 logger.exception,业务调用 logger.debug | — | — | — | root=DEBUG + console=INFO + file=DEBUG 分层控制 | 5 级 DEBUG/INFO/WARN/ERROR/FATAL,全局阈值控制 |
| 预算守卫 | — | — | — | 无预算守卫,仅事后统计 | — | — | 生存状态机四态 + is_bankrupt() 破产检测终止模拟 | — | — | — | — | — | 行数预算 + 自适应阈值 + 四级效率评分 + 5 种停止原因分析 | — | 无预算上限检查,仅被动累加和记录 | — | — | — | — | Team.invest 设上限,_check_balance 逐轮检查,NoMoneyException 终止 | — | 无内置预算守卫,但 per-provider token 计数可外部实现阈值告警 | — | — | — | — | — | — | — | — | — | — | — | — | tokensLimit + compressionTokenThreshold 触发自动压缩 | 无内置预算守卫,可通过 before 拦截器实现拒绝调用 | HARD_CAP_TOKENS=60K 硬上限 + outputBudget=maxOutput*0.8 | — | — | warn 告警 + abort 抛 BudgetExceededError 双模式熔断 | — |
| 安全审计 | — | — | — | — | config.yaml 权限检查 + 敏感值脱敏 to_dict() | — | — | — | — | — | LOG_FILE_PATH 路径穿越防护 | — | — | _mask_secrets 递归脱敏 8 类敏感键名 | — | — | — | — | — | — | — | auth 模块追踪 login_attempts/success/failures/api_key_auth | — | — | — | — | — | SecurityFilter 10 关键词递归脱敏 + 10000 字符截断 + URL/SQL 脱敏 | SENSITIVE_KEYS 正则匹配 apikey/secret/token/password 等字段自动脱敏 | — | — | — | — | — | — | content_hash (SHA-256) 记录请求/响应指纹,不存储原文 | — | — | — | — | — |
| Decorator 插桩 | — | — | — | — | — | 业务代码无需感知,继承基类并加装饰器即可,零侵入 | TrackedProvider __getattr__ 代理 + CostCapturing 子类覆写 | 无 Decorator,依赖 LangSmith SDK 自动插桩 | — | — | — | — | — | @log_exception + @log_time 双装饰器非侵入式 | 无,成本追踪通过显式 cost_callback 参数传递 | — | trace_component asynccontextmanager 包裹组件执行,非侵入式 | — | TimingSpan 继承 ContextDecorator,perf_counter 高精度计时写入 Histogram | — | — | — | — | @traceable 装饰器覆盖所有搜索函数,零侵入 | — | — | — | @Trace/@Measure 装饰器,运行时 Promise 检测兼容 sync/async | @logAction + @logStagehandStep 两个装饰器自动包装方法 | 运行时 Decorator 包装 MessageBuffer 方法,非侵入式日志持久化 | 无 Decorator,采用上下文管理器 _timer 显式包裹 | — | WrapStorage 返回 InstrumentedStorage,实现相同接口 | — | Hook 系统(Stop/UserPromptSubmit)非侵入式扩展 | 代理模式 __getattr__ 透明包裹,非 Decorator | — | — | @instrument 装饰器预计算静态属性,sync/async 双模式 | — | ScopedLatency RAII 析构自动写入延迟,非 Decorator 模式 |
| 流式响应追踪 | — | — | — | — | — | _trace_async_generator_wrapper 包装 AsyncGenerator,流结束时统一提取 usage | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| OpenAI 兼容 API 识别 | — | — | — | — | — | 从 client.base_url 推断提供商,支持 Moonshot/DeepSeek 等兼容 API | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| Token 计量 | — | — | — | — | — | 从 ChatResponse.usage 精确提取 input_tokens/output_tokens,不估算 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 零开销路径 | — | — | — | — | — | _check_tracing_enabled() 检查开关,未启用时直接返回原函数结果 | — | 无 LANGSMITH_API_KEY 时完全跳过追踪逻辑 | — | — | 标准库零额外依赖,无 SDK 初始化开销 | is_tracing_enabled() 前置检查 + 延迟导入 LangChainTracer | — | — | — | — | deactivated 标志 + ready 门控双重检查,未启用时零开销 | — | — | — | — | Cargo feature flag 编译期剔除,未启用时零依赖零开销 | — | LANGCHAIN_TRACING_V2 环境变量全局开关,关闭后零开销 | — | — | — | 三环境变量全空时 initTracer 直接返回,isMonitoringEnabled 前置检查 | CONFIG_DIR 为空时装饰器返回原方法,中间件返回 no-op | 无——StatsCallbackHandler 始终激活,但 Lock 开销极低 | TrajectoryTracker 环境变量开关,默认关闭 | — | 环境变量未设置时安装 no-op provider,零内存分配 | — | telemetry.enabled 默认 false,不初始化 OTel SDK | — | — | DummyWandb/DummyReport/print0 三重空操作替身 | try/except 导入 OTel + _IS_OTEL_AVAILABLE 全局标志,未安装时零开销 | TRACE_ENABLED/TOKEN_TRACKING_ENABLED/COST_TRACKING_ENABLED 三开关 | enabled() 短路检查,false 时所有 open/close/add 直接 return 0 |
| GenAI 语义标准化 | — | — | — | — | — | 遵循 OpenTelemetry GenAI 规范,使用 gen_ai.* 属性名 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 第三方平台兼容 | — | — | — | — | — | 兼容 Alibaba Cloud CloudMonitor、Arize Phoenix、Langfuse | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 工具参数记录 | — | — | — | — | — | @trace_toolkit 记录工具名称、参数、返回值 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 异常追踪 | — | — | — | — | — | _set_span_error_status 记录异常类型和堆栈,span 状态设为 ERROR | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 批量导出 | — | — | — | — | — | BatchSpanProcessor 批量导出 span,减少网络请求 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| Lazy import | — | — | — | — | — | setup_tracing 时才导入 OTel SDK,避免未启用时的启动开销 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 外部 TracerProvider 兼容 | — | — | — | — | — | 检测已有 TracerProvider,只添加 span processor 而不覆盖 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| JSONL大文件策略 | — | — | — | — | — | — | 全量读取 readlines(),无尾部优化 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | parseJsonlFileTail 只读末尾 128KB + readLastLine 反向 4KB 块读取 | — | — | — | — | — | — | — | — | — |
| 评估门控 | — | — | — | — | — | — | 0.6 分阈值决定支付,前后端 QUALITY_CLIFF 常量一致 | Harbor reward feedback 写回 LangSmith trace | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | pytest.mark.langsmith 标记 + assert eval_result.grade 门控 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 经济模拟 | — | — | — | — | — | — | 初始余额 + 收支平衡 + 生存状态驱动 Agent 决策 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 评估指标设计 | — | — | — | — | — | — | — | harbor_reward 单一 score 反馈,支持 dry-run 模式 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | 11 个评估函数:6 维质量评分 + relevance/structure/correctness/groundedness/completeness | — | — | — | — | — | — | — | — | — | — | — | — | — | bpb 替代 loss 实现 tokenizer 无关的跨实验对比 | — | — | — |
| 元数据清洗 | — | — | — | — | — | — | — | — | — | — | — | 无显式清洗,metadata dict 直接透传到 LangSmith | — | — | — | — | _cleanup_inputs 递归脱敏 api_key/password/server_url | — | — | — | — | — | — | — | — | — | — | FILTERED_METADATA_KEYS 黑名单剥离 LangGraph/LangChain 内部字段 | sanitizeOptions 递归遍历配置对象,敏感值替换为 ****** | — | — | — | — | — | — | — | — | — | — | — | — |
| 优雅关闭 | — | — | — | — | — | — | — | — | — | — | — | — | — | SessionLifecycleManager 两阶段清理:过期删除 + 数量限制裁剪 | — | — | TelemetryService.stop() flush 队列 → cancel worker → aclose httpx client | — | DispatcherMonitor.stop 逐个 shutdown 注册的线程池 + atexit 清理 HTTP logger | — | SIGINT/SIGTERM 信号处理 + atexit + worker thread join | — | — | — | — | — | — | SIGTERM→sdk.shutdown()→process.exit(0) | — | — | — | — | PersistentPostRun 中 5s 超时 flush,确保 CLI 进程退出前推送完毕 | — | — | — | — | — | — | — | atexit 注册 LogUtil::Shutdown,确保 glog 刷盘 |
| 定价表维护 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | 双定价表:costs.py 硬编码常量 + utils.py 模型映射字典 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 去重决策透明 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | 输出 Jaccard title_sim 和 tag_overlap 数值辅助验证 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| DAG 统计穿透 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | QueueObserver 通过 getattr 链式探测获取 DAG 执行器统计 | — | — | — | — | timing_raw Dict 在训练循环中逐层填充,步骤末尾一次性提交 | — | — | — | — | — | — | — | — | — | — |
| 五层配置优先级 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | CLI flags > env > project > user > defaults 五层合并 | — | — | — | — | — | — |
| 过滤拦截 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | LLMCallFilter 五维过滤 + Callable 自定义过滤 + Mapping 快捷构造 | — | — | — | — | — |
| 错误驱动发现 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | 从 API 400 错误正则解析模型限制并持久化缓存 | — | — | — | — |
| MFU计算 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | 30+ GPU 硬编码 BF16 峰值 FLOPS 表 + 滑动窗口 FLOPs 修正 | — | — | — |
| 代码膨胀度量 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | git ls-files 统计行数/字符/token/依赖数的 bloat 指标 | — | — | — |
最佳实践
1.从 API 返回值精确提取 token 数:不要用 len(content)/1.5 估算,误差 30%+
2.区分 4 种 token 类型:input/output/cache_read/cache_write 各有不同计费规则
3.适配多提供商差异:OpenAI 无 cache_write,Anthropic 有完整 4 种,需统一数据结构
4.结构化日志 + JSON 持久化:便于程序化分析成本分布和性能瓶颈
5.子 Agent 日志隔离:多 Agent 系统中每个子 Agent 的日志在独立 session 中
6.持仓日志用全量快照而非增量:每条记录包含完整 positions,任意行可独立恢复状态
7.操作 id 单调递增:保证操作序列可追溯,支持并发场景下的顺序判定
8.fcntl 文件锁保护并行写入:多 Agent 共享 position.jsonl 时防止数据交错
9.滚动指标设最小观测窗口:小时级 min_periods=10,日线 min_periods=3,避免早期极端值
10.WebSocket 广播前检查 readyState:避免向已断开的客户端发送数据导致异常
11.LLM trace 用 content.length/4 粗估 token 数:不依赖 tiktoken 库,适合轻量级场景
12.JSONL 持久化白名单而非黑名单:新增事件类型默认不持久化,避免意外 I/O 膨胀
13.MCP 协议暴露调试接口:比自定义 HTTP API 更标准化,外部 Agent 可直接接入
14.JSONL 尾部读取时跳过截断的第一行:offset > 0 时 slice(firstNewline + 1) 避免 JSON.parse 失败
15.costUSD 和 estimatedCostUsd 互斥累加:同一行只取一个,避免双重计费
16.Rate limit 时延长缓存 TTL 而非重试:GitHub API 限流是小时级重置,频繁重试浪费配额
17.反向读取 Buffer 拼接后再 toString:避免在多字节 UTF-8 字符中间截断导致乱码
18.被动观测优于主动注入:读 Agent 原生日志文件而非注入 SDK,零侵入零耦合
19.注意力分级按 ROI 排序:merge(一键完成)> respond(快速解锁)> review(需调查),人类行动成本递增
20.cost 字段优先级链:costUSD > estimatedCostUsd > token 估算,避免双重计数
21.enrichment 超时隔离:metadata enrichment 3s + PR enrichment 4s 独立超时,互不阻塞
22.check() 返回可操作的错误信息:每个 off/warn 状态附带具体安装命令,用户无需查文档
23.Config 双源加载:YAML 文件优先 + 环境变量回退,适配容器和 CI 场景
24.配置保存时自动 chmod 600:防止含密钥的配置文件被其他用户读取
25.流式响应包装器模式:用 _trace_async_generator_wrapper 包装 AsyncGenerator,在 finally 块中统一提取最后 chunk 的 usage,避免每个 chunk 都创建子 span
26.装饰器 end_on_exit=False:手动控制 span 生命周期,适配流式响应和异步场景
27.Lazy import OTel SDK:在 setup_tracing 时才导入 OpenTelemetry 库,避免未启用追踪时的启动开销
28.None 值过滤:span 属性字典用 {k: v for k, v in attrs.items() if v is not None} 过滤,避免 None 值污染
29.GenAI 语义属性命名:使用 gen_ai.request.model、gen_ai.usage.input_tokens 等标准属性名,而非自定义字段
30.Provider 包装器用 __getattr__ 代理非核心方法,保持接口透明
31.三层 JSONL 分离关注点:日级快照查趋势、任务级明细查归因、完成记录查进度
32.生存状态机将连续余额映射为离散状态,简化 Agent 决策和 UI 展示
33.评估门控阈值在后端和前端用同名常量定义,防止不一致
34.LangSmith 项目 URL 使用模块级缓存避免重复网络请求
35.异步 URL 解析用 asyncio.to_thread + 超时保护不阻塞 TUI 事件循环
36.评估场景用确定性 UUID 关联 instruction 到 LangSmith example 支持跨实验对比
37.Harbor feedback 写入前检查已有 feedback 避免重复
38.LLM 日志用 min_response_length 过滤短回复噪声:避免记录确认类短响应
39.操作历史暴露为 MCP 工具:让 Agent 可以自省操作记录辅助决策
40.进度回调用闭包工厂:捕获 task 引用,避免在工作流函数间传递状态
41.JSONL 追加写入天然崩溃安全:进程中断不丢失已写入的日志行
42.setup_logging 使用 force=True 防止多模块重复添加 handler
43.日志路径用 Path.resolve() + startswith() 防目录穿越
44.开发模式 monkey-patch watchfiles 排除 logs/ 目录避免热重载循环
45.在 Model Factory 层注入 Tracer:一处修改覆盖所有模型调用,零侵入业务代码
46.Tracer 附加用 try/except 降级:追踪是辅助能力,失败不应阻断核心功能
47.子 Agent 日志统一 [trace=xxx] 前缀:便于日志聚合工具按 trace_id 关联父子调用链
48.并发子 Agent 数量硬限制 [2,4]:防止 LLM 生成过多并行调用导致资源耗尽
49.Factory 层注入 Tracer 实现零侵入追踪:所有模型实例自动获得追踪能力,无需业务代码修改
50.双重检查锁保证多 Worker 下配置单例安全:避免 Gunicorn prefork 模式下重复初始化
51.Run Metadata 标签选择 3-5 个高价值维度:过多标签增加存储成本且降低筛选效率
52.每轮迭代即时记录五维指标而非事后汇总:便于实时监控和中途干预
53.用 ROI(confidence_gain/lines_added*1000) 量化每轮投入产出比:将继续/停止决策数据化
54.tiktoken 计数时设 disallowed_special=() 避免非英文文本中特殊 token 字符串导致计数失败
55.max_tokens 参数降级兼容:先尝试 max_tokens,BadRequestError 时回退 max_completion_tokens
56.用 @lru_cache 缓存 logger 实例 + handlers.clear() 保证幂等:避免多模块重复初始化导致日志重复
57.ContextVar 实现请求级事件 sink 隔离:GUI 和 CLI 可注册不同回调互不干扰
58.developer_mode 开关控制错误详情级别:开发环境输出完整 traceback,生产环境返回结构化摘要
59.阶段差值成本归属:记录阶段开始前的累计成本,结束后取差值,实现无侵入的阶段级成本拆分
60.LangSmith 零代码集成:仅通过环境变量启用外部追踪,不在业务代码中引入 Tracer 依赖
61.Rich Progress 用 transient=True 避免完成后进度条残留污染终端历史
62.批量 AI 调用失败时设 score=0 降级而非中断,保证进度条完整推进
63.Emoji 阶段标记比 [INFO] 前缀更利于人眼快速扫描定位当前阶段
64.环境变量驱动零配置激活:设了对应环境变量就启用 Tracer,不设就静默跳过,无需配置文件
65.懒加载 import 防止启动失败:每个 Tracer 的 SDK import 放在工厂函数内,未安装不影响其他 Tracer
66.asyncio.Queue 单 worker 串行化:避免多 Tracer 并发写入的竞态,同时不阻塞 DAG 主路径
67.ready 属性双重门控:__init__ 中检测可用性设 ready,所有方法入口检查 ready 后静默返回
68.独立 TracerProvider 避免全局污染:多 OTel 后端共存时各自创建 provider,不覆盖全局
69.Langfuse 零侵入集成:通过 import 层面替换 AsyncOpenAI 而非手动注入 tracer,业务代码零修改
70.双层统计互补:TokenTracker 统计精确 token(API 层),statistic_data 统计调用计数(缓存层),两者覆盖不同维度
71.流式响应从最后一个 chunk 提取 usage:OpenAI 流式 API 在最终 chunk 携带 usage 信息,需累积到流结束后统计
72.日志路径过滤器:用 logging.Filter 子类过滤 /health 等高频路径的 200 响应,保持日志信噪比
73.指标函数纯函数化:metrics.py 只暴露 task_enqueued/task_dequeued 等纯函数,不依赖任何业务类实例
74.事件日志 fire-and-forget:emit_monitor_event 外层 try-except 吞掉所有异常,可观测性永远不影响主流程
75.TimingSpan 继承 ContextDecorator:同时支持 @decorator 和 with 语句两种埋点方式,覆盖函数级和代码片段级
76.线程池健康检查双级检测:先检查单个任务是否超时,再检查线程池整体活跃度,避免误判
77.用 Pydantic BaseModel 作为 CostManager 基类:天然获得 JSON 序列化、字段验证、类型安全
78.pricing_plan 与 model 分离:同一模型在不同渠道(直连 vs OpenRouter)价格不同,用 pricing_plan 覆盖
79.流式 usage 三源适配:chunk.usage → choice.usage → 本地 tiktoken 计算,逐级降级
80.loguru 配置三步法:remove() 清除默认 → add(stderr, level) 统一入口 → 环境变量控制级别
81.吞吐量优于延迟:批处理场景用 items/s 而非 p99 延迟衡量性能
82.决策日志标注来源:自适应参数选择时明确标注 (from env) 或 (auto, resource=X) 便于排查
83.健康端点含业务指标:/health 不仅返回存活状态,还包含队列统计等业务健康信息
84.用 Cargo feature flag 而非运行时 if 门控指标代码:编译期零开销
85.指标常量集中定义在独立 crate 的 definitions.rs:IDE 可跳转,避免拼写错误
86.直方图桶按子系统定制:LLM 调用和 HTTP 请求的延迟分布差异巨大
87.SQLite 持久化用单连接池 + WAL 模式:低吞吐场景避免锁竞争
88.采集循环通过 mpsc channel 异步写入 DB:不阻塞 10s 采集节奏
89.JSONL 追加写入保证崩溃安全:appendFileSync 写到哪算哪,不丢数据
90.延迟统计设上限阈值(如 12h):过滤跨 session 的异常值避免 p95 失真
91.诊断 session 状态用 TTL+LRU 淘汰:防止长期运行的 daemon 内存泄漏
92.成本估算建立回退链:API 返回值 → 配置价格表 → 记录 missing 计数
93.为所有外部 API 调用统一添加 @traceable 装饰器,而非只追踪 LLM 调用
94.使用 langsmith:nostream tag 避免流式追踪产生碎片化 span,保证完整请求/响应对
95.aevaluate 的 metadata 应记录所有影响结果的配置参数(模型+行为+搜索),确保实验可复现
96.pairwise 对比评估必须 randomize_order=True 消除 LLM 裁判的位置偏差
97.emoji 前缀日志分类:用 ✨🛠️🔧🎯 等 emoji 标记 Agent 思考/选择/执行/完成,大量日志中快速定位
98.Token 限额异常不重试:TokenLimitExceeded 是确定性错误,排除在 retry 列表外避免无意义重试
99.tiktoken fallback 策略:未知模型名时降级到 cl100k_base 编码,避免初始化失败
100.Observer 三方法契约分离:get_status_table/is_healthy/has_errors 各司其职,is_healthy 和 has_errors 语义独立
101.聚合健康用 all() 短路:任一组件不健康即系统不健康,避免复杂加权
102.tabulate 表格化输出:CLI 和日志场景下比 JSON 可读性高,且自带对齐
103.用 LangfuseSpanProcessor.shouldExportSpan 在 SDK 层过滤,比 Langfuse 后端过滤更高效
104.SecurityFilter 默认开启 enableDataMasking,opt-out 比 opt-in 更安全
105.EXCLUDED_SCOPES 用 Set 而非 Array,O(1) 查找避免高频 span 的性能损耗
106.FilteredLangfuseCallbackHandler 继承官方 Handler 只 override 需要过滤的方法,最小化维护成本
107.按功能维度拆分 token 计数器:不同操作的 token 消耗模式不同,全局统计无法指导优化
108.Pino multistream 一写多读:同一事件同时写入 JSONL(机器分析)和 pretty log(人工调试)
109.装饰器零开销关闭:CONFIG_DIR 为空时直接返回原方法引用,无任何运行时包装
110.共享 Pino 实例避免 worker thread 泄漏:静态 sharedPinoLogger 防止高并发场景内存膨胀
111.Pino mixin 自动注入 span 上下文:避免手动传递 context 参数穿透多层调用栈
112.双路回调注入:LLM 构造函数注入追踪 LLM 事件,graph config 注入追踪工具事件,缺一不可
113.被动拉取统计快照:UI 按自身刷新率调用 get_stats(),避免高频事件推送的复杂度
114.Token 显示优雅降级:provider 不返回 usage_metadata 时显示 -- 而非误导性的 0
115.后端延迟导入:在 if 分支内 import,未启用的后端不拖慢启动
116.指标计算与记录分离:纯函数计算指标,Tracking 类只负责广播,便于单元测试
117.斜杠分层命名空间:critic/score/mean 格式让 wandb/tensorboard 自动按前缀分组
118.环境变量控制调试追踪开关:VERL_ENABLE_TRACKER 默认关闭,生产环境零开销
119.注意力路由按 ROI 排序:merge 一键完成最高,respond 快速解锁次之,working 不打扰最低
120.JSONL 尾部读取跳过首行:从文件中间开始读时第一行必然截断,必须丢弃
121.rate limit 时延长缓存而非重试:避免限流雪崩,同时在 UI 标记数据可能过期
122.双轨活跃度检测互补:终端正则快但粗,JSONL 类型推断慢但准,组合使用覆盖更全
123.环境变量驱动开关:`Enabled()` 纯环境变量检查,未设置时 `Init()` 只安装 no-op provider
124.Decorator 模式存储插桩:`WrapStorage()` 检查 `Enabled()` 后返回 decorator 或原始实例,零开销
125.AI token 从 API 返回值提取:`message.Usage.InputTokens`/`OutputTokens` 直接计量,不做估算
126.JSONL 文件权限 0644:audit trail 设计为可通过 git 共享,注释说明有意为之
127.PersistentPostRun 优雅关闭:5s 超时 `telemetry.Shutdown()` 确保 CLI 进程退出前 flush 完毕
128.Logger 懒初始化避免循环依赖:构造时不读配置,首次 log 时才初始化文件路径
129.语义化日志方法(dataIn/dataOut/success/failure/timing)比纯级别更易 grep 过滤
130.appendFileSync 同步写入保证崩溃前日志不丢失,stderr 作为最后回退
131.进程注册表用事件驱动(exit 回调)而非轮询,实时感知子进程退出
132.Token 按 5 种类型独立计数(input/output/thought/cache/tool),不同类型计费规则不同
133.CLI 遥测默认关闭且不初始化 SDK,确保无遥测需求时零性能开销
134.一键部署脚本封装 Jaeger + OTEL Collector 的下载/启动/配置/退出清理全流程
135.sessionId 作为公共属性贯穿所有日志和指标,实现单会话全链路关联
136.文件操作指标记录 MIME 类型和行数,支持按文件类型分析 Agent 行为模式
137.LLM 客户端统一返回 (pure_result, raw_response) 元组:wrapper 从 raw_response 提取 usage 而不侵入业务返回值
138.frozen dataclass 传递观测数据:拦截器收到的 Context/View/Usage 不可篡改,天然线程安全
139.Handle 模式管理拦截器生命周期:register 返回 Handle,dispose() 移除,避免忘记清理导致内存泄漏
140.依赖注入解决 registry↔store 循环引用:模块加载时注入读写函数而非直接 import
141.三层模型限制查找保证未知模型安全运行:缓存→静态表→保守默认值,宁可多分批也不撞限制
142.批次级容错统计而非全有全无:返回 failedBatches/totalBatches 让调用方决定是否接受部分结果
143.用 DummyXxx 鸭子类型替代条件判断:DummyWandb/DummyReport/print0 三重模式消除日志代码中的 if 分支
144.未知 GPU 返回 inf 而非抛异常:MFU 显示 0% 比中断训练更安全
145.wandb log 始终包含 step + total_training_flops 双 x 轴:支持按步数或按计算量对齐不同实验
146.bpb 替代 loss 作为评估指标:消除 vocab size 对损失值的影响,跨 tokenizer 可比
147.训练前 10 步不计入 total_training_time:排除编译预热对 ETA 估算的干扰
148.多进程 Prometheus 用 TemporaryDirectory 自动管理生命周期,atexit 时 mark_process_dead
149.跨进程 trace 传播用 os.environ 注入 + context manager 恢复,比 IPC 简单可靠
150.推理指标按 1-2-5 序列构建直方图桶,覆盖 1 到 max_model_len 的完整范围
151.空闲引擎日志降级为 debug:检测连续两个周期吞吐为零时切换日志级别
152.MFU 用分析式公式计算而非运行时采样:按 Attention/FFN/Unembed 组件分别估算 FLOPs 和带宽
153.每个任务创建独立 Langfuse handler 并设 session_id=task_id:同一任务的所有 Agent trace 自动归组
154.ContextVar 注入 task_id 到日志:异步任务链中自动传播,无需手动传参
155.StepTimer 上下文管理器自动计时:with StepTimer(log, agent, action) 自动记录耗时和异常
156.Rich 彩色输出自动降级:try import Rich,失败则 fallback 到 StreamHandler,不强依赖
157.SSE 事件自动附加 UUID id + timestamp:便于前端去重和排序
158.用 RAII 包装计时采集:ScopedLatency 析构自动写入,防止异常路径遗漏 close
159.栈式路径追踪嵌套关系:vector<Stage> 模拟调用栈,自然表达父子阶段层级
160.双模式激活(debug 标志 OR trace_id):本地调试和分布式追踪共用同一 Profiler