AI驱动的蛋白质折叠预测在药物重定位(老药新用)中的加速实践o 亮点:结合生物医药热点,展示AI对传统行业的颠覆性效率提升
2026/8/20 0:02:41
全链路追踪设计:
代码示例:OpenTelemetry 手动 Span 追踪
# 从 OpenTelemetry 主包导入 trace API,提供 Tracer、Span 等基础能力fromopentelemetryimporttrace# 从 SDK 引入 TracerProvider:用于创建 Tracer 实例并管理 Span 的生成fromopentelemetry.sdk.traceimportTracerProvider# 引入 ConsoleSpanExporter 与 SimpleSpanProcessor:# 一个负责把 Span 打印到终端,一个负责在每个 Span 结束时同步导出,# 适合演示;生产环境可换成 BatchSpanProcessor + OTLP Exporter 异步批量上报fromopentelemetry.sdk.trace.exportimportConsoleSpanExporter,SimpleSpanProcessor# 初始化 TracerProvider:OpenTelemetry SDK 的核心对象,负责组织和管理 Tracerprovider=TracerProvider()# 为 Provider 添加导出处理器:# SimpleSpanProcessor 在 Span 结束时立即调用 ConsoleSpanExporter 输出,# 便于本地调试时直接观察链路数据;生产环境建议改为批量处理器降低开销provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))# 把刚创建的 Provider 注册为全局默认 Provider,# 后续通过 get_tracer 获取的 Tracer 都基于这个 Provider 工作trace.set_tracer_provider(provider)# 创建 Tracer:# - 第一个参数 "agent-observability" 是服务/组件名,用于在链路中区分来源;# - 第二个参数 "0.1.0" 是版本号,便于在做版本对比或线上回溯时定位代码版本;# 这两个值会作为资源属性附加到该 Tracer 产生的所有 Span 上tracer=trace.get_tracer("agent-observability","0.1.0")defrun_agent_step(name:str,model:str,temperature:float,prompt_version:str,token_count:int)->str:# start_as_current_span(name) 创建一个以 name 命名的 Span,# 并将其设置为当前上下文中的活动 Span;进入 with 块后开始计时,# 退出 with 块时自动结束 Span,异常退出时也会记录错误状态withtracer.start_as_current_span(name)asspan:# ===== Span 属性:把步骤元数据写成可检索的键值对 =====# set_attribute(key, value) 把结构化信息挂到当前 Span 上。# 它和日志最大的区别是:这些属性可以被过滤、聚合、排序和告警,# 是把“模型推理黑盒”拆解为可量化、可定位数据的关键手段。# gen_ai.system:标识底层 LLM 提供方或生态系统,# 例如 openai、anthropic、cohere,便于跨厂商对比质量与成本span.set_attribute("gen_ai.system","openai")# gen_ai.request.model:记录本次实际调用的模型名(如 gpt-4o、gpt-4o-mini),# 观测价值:当某个模型质量变差或成本异常时,可以快速按模型维度定位和过滤span.set_attribute("gen_ai.request.model",model)# gen_ai.request.temperature:记录生成温度参数,# 观测价值:温度越高,输出越不稳定;复现轨迹或归因结果漂移时必须核对该值span.set_attribute("gen_ai.request.temperature",temperature)# agent.prompt.version:记录提示词模板版本号,# 观测价值:同一输入在不同提示词版本下表现差异时,可精确归因到具体版本span.set_attribute("agent.prompt.version",prompt_version)# gen_ai.usage.prompt_tokens:记录本次请求消耗的提示词 Token 数,# 观测价值:结合步骤聚合,可识别提示词过长、重复调用造成的成本浪费span.set_attribute("gen_ai.usage.prompt_tokens",token_count)# 模拟一步推理:实际项目中这里应替换为真实的 LLM 调用、工具调用或检索逻辑result="中间结论示例"# 记录这一步的执行状态,比如 success / failed / timeout,# 观测价值:在控制台或后端平台按状态过滤,快速筛选出失败的推理步骤span.set_attribute("agent.step.status","success")# ===== Span 事件:记录时间轴上的关键瞬间 =====# add_event(name, attributes) 在 Span 时间轴上追加一个带时间戳的语义事件。# 它与 set_attribute 的区别:属性是全程有效的事实,事件强调“某时点发生了什么”。# 参数含义:# - "llm.call.completed":事件名,表示一次 LLM 调用已经完成;# - {"output_length": len(result)}:事件携带的附加属性,用于记录输出长度等维度。# 观测价值:可精确定位某一步内部的关键节点耗时,# 例如“第 3 秒完成上游检索、第 8 秒完成生成”,便于分析长链路时定位瓶颈span.add_event("llm.call.completed",{"output_length":len(result)})returnresult上下文传播:跨服务、跨异步任务、跨子 Agent 的 trace 关联。
traceparent、tracestate和消息头透传 Trace ID,让跨服务调用串成同一棵树;提示词与中间步骤的版本化:
config_fingerprint写进 Span 属性;Token 级与步骤级成本监控:
prompt_tokens、completion_tokens与耗时属性,按步骤、工具、用户、模型、版本多维度聚合成本与延迟;推理链路可视化:
重放与调试:
故障排查流程图