1. 从O11yDay NYC归来:当AI智能体成为生产系统,我们如何看清它的“思考”?

上周在纽约的O11yDay活动上,和Honeycomb团队以及众多一线工程师、平台负责人的密集交流,让我对“可观测性”这个词有了全新的、更紧迫的理解。现场的氛围很明确:大家早已不再争论“AI智能体是否需要可观测性”这种理论问题,而是彻底卷入了“到底该怎么实现它”的实战泥潭。如果你正在或计划将基于大语言模型的智能体(Agent)集成到你的生产环境中,无论是客服助手、代码生成工具还是复杂的业务流程自动化,那么这篇文章就是为你准备的。我们将深入探讨,当传统的“请求-响应”调试模型失效后,我们该如何构建一套能透视AI决策黑箱的观测体系。这不是一篇工具说明书,而是一份从真实生产困境中提炼出的实战指南。

2. 智能体如何颠覆了传统的可观测性范式

传统的微服务或分布式系统调试,核心思路是“追踪”。一个用户请求进来,带着一个唯一的 trace_id ,像接力棒一样穿过网关、认证服务、订单服务、支付服务。当这个请求失败或变慢时,你只需要顺着这个 trace_id 留下的足迹(即各个Span),就能清晰地看到它在哪个服务、哪行代码、哪次数据库查询上出了问题。问题通常是二元的:服务挂了返回500,查询超时,缓存未命中。观测工具(如链路追踪)的作用是帮你高效地“回放”这条已知路径。

2.1 智能体的决策流:非线性的“思考”之旅

智能体的工作方式截然不同。它不是一个被动的管道,而是一个主动的决策者。处理一个用户问题(例如:“帮我分析一下上个月订单下降的原因”)时,一个智能体可能经历以下非线性流程:

  1. 意图理解与规划 :先判断用户意图属于“数据分析”类。
  2. 上下文检索 :根据判断,去向量数据库里检索“上个月订单数据”、“同期对比报告”、“可能的影响因素分析文档”等。
  3. 动态提示词构建 :将用户问题、检索到的相关文档片段、以及系统指令(如“以分析师口吻回答”)拼接成一个给大模型的最终提示词(Prompt)。
  4. 工具调用与执行 :大模型生成的计划可能包括“调用数据查询API获取订单明细”、“调用图表生成服务”。智能体需要依次或并行地执行这些工具调用。
  5. 多轮推理与验证 :拿到数据后,可能需要进行多轮推理(“数据表明是A区域下滑,那么原因是不是B?”),并可能触发新一轮的检索或工具调用。
  6. 结果整合与输出 :最后,将多次调用和推理的结果整合成一个连贯的回答。

在这个过程中, “一个请求”对应的不再是一条线性的管道,而是一棵动态生成的、枝杈繁多的“决策树” 。失败很少是“抛出一个异常”那么明显。更多时候,它是一种“静默失败”:智能体给出了一个看起来合理、语法通顺,但事实上完全错误或偏离目标的答案。比如,它可能错误地关联了因果关系,或者基于一篇过时的文档给出了建议。

注意 :这正是智能体观测最棘手的地方。你无法监控“错误率”,因为系统没有“报错”。你只能监控“有效性”或“准确性”,而这需要业务层面的定义和判断。

2.2 观测的核心从“路径”转向“上下文与决策”

Austin Parker在主题演讲中的一句话点明了要害:“可观测性监控的是AI所知与真实系统之间的鸿沟。”这条鸿沟存在于哪里?就存在于上述流程的每一个环节的“上下文”中:

  • 检索到的上下文是否相关、是否最新? (检索质量)
  • 构建提示词时,注入了哪些信息,又裁剪了哪些信息? (提示工程)
  • 智能体在决策时,基于了哪些隐藏的假设? (模型偏见)
  • 工具调用的输入输出是什么? (工具可靠性)

如果没有对这些上下文的可见性,你就是在“推测”系统的行为,而不是“理解”它。当用户投诉“AI回答得不对”时,你面临的将是一场毫无头绪的侦探游戏。

3. 构建“人的判断层”:在自动化中保持掌控

另一个让我深受启发的观点是:随着AI承担越来越多的工作,工程师的职责不是让路,而是成为 “判断层” 。AI擅长在给定的上下文里工作,而人擅长判断“某个看起来正确的东西是否真的正确”。我们的目标不是用AI取代人,而是构建一个让两者相互增强的循环。

3.1 人机协同的增强循环

这个循环有一个非常具体的形状:

  1. 发起 :你给智能体一个任务或提示。
  2. 审视 :你质疑它的输出,审视它的推理过程(如果可见)。比如问它:“你这个结论的依据是什么?”
  3. 验证 :要求它展示证据(引用来源、展示中间数据)。
  4. 修正与反馈 :根据你发现的问题(如证据不足、逻辑跳跃),提供更优质的上下文、修改系统提示词、或调整检索策略。
  5. 迭代 :再次运行,观察改进。

这个手动过程,就是 评估(Evals) 的雏形。Evals是将这种人的判断自动化、系统化,为你提供一套一致的指标,来衡量任何改动(无论是换模型、调提示词还是改检索器)是否真的让系统变得更好了。

3.2 知识传递:从文档到“结对调试”

Austin提到的一个被低估的点是:关于如何有效与智能体协同工作的知识,很难通过文档传播。它真正传播的方式是 “结对调试” 。看着一个有经验的工程师如何提示一个智能体、如何追问它、如何根据它的回答实时调整策略——这个过程能让双方都学到东西。这才是知识在团队中扩散的有效途径。这意味着,团队需要创造机会进行这种“智能体操作演练”,而丰富的可观测性数据(如完整的决策追踪记录)正是进行这种演练的最佳教材。

4. 实战:为智能体系统设计可观测性信号

那么,具体到实施层面,我们应该采集哪些信号?这些信号又该如何组织?传统的日志和指标在这里显得力不从心,因为它们通常是预定义的、聚合的。而智能体的问题往往是探索性的、高维的。

4.1 基于事件的灵活查询模型

这正是Honeycomb这类基于事件(Event)和高基数(High-Cardinality)查询的可观测性平台的优势所在。你不需要事先决定要仪表化(Instrument)什么,而是尽可能多地将结构化的、富含维度的数据作为事件发送出去。当问题出现时,你可以像分析数据库一样,对这些事件进行任意的切片、切块和关联查询。

对于智能体系统,你需要将关键决策点作为 首要的Span(跨度) 来捕获,并为其赋予丰富的属性(Attributes)。以下是一些必须捕获的核心Span类型:

Span 类型 核心属性(示例) 观测目的
检索 Span retrieval.source (向量库/搜索引擎名), retrieval.query retrieved_doc_ids top_k scores retrieval_latency 了解智能体“看到了”什么信息。检索的相关性如何?延迟是否正常?
提示词构建 Span prompt_template_name injected_context_length final_prompt_length trimmed_context_sections 理解最终提交给模型的“问题”是如何被塑造的。注入了多少上下文?是否因为长度限制裁剪了关键信息?
LLM调用 Span llm.provider llm.model input_tokens output_tokens total_tokens finish_reason 监控成本、延迟和模型行为。是否频繁因长度限制而截断?
工具调用 Span tool.name tool.input (可脱敏), tool.output (可脱敏), tool.success tool.duration 监控外部工具或API的可靠性与性能。工具调用失败是否是错误的主要来源?
决策/路由 Span decision.point (如“是否需要调用工具?”), selected_choice confidence_score (如果有) 透视智能体的“思考”路径。它为什么选择了A方案而不是B?
智能体交接 Span from_agent to_agent handoff_state_size handoff_success 在多智能体协作中,跟踪任务和状态如何在智能体间传递。是否有信息丢失或扭曲?

4.2 从“监控”到“探索”:查询的力量

我们交流过的几个团队虽然已经有了日志,但仍然感觉像在“摸黑”。问题不在于没有数据,而在于 数据不可查询 。当你有上千次智能体调用时,仅靠日志很难回答以下问题:

  • “所有涉及‘财务分析’的查询,其检索到的上下文平均相关性分数是多少?”
  • “自从我们将模型从 gpt-3.5-turbo 升级到 gpt-4 后,工具调用的频率有变化吗?”
  • “找出所有最终答案中没有引用来源,但中间过程显示检索到了文档的trace。”

能够基于任意维度(用户ID、问题类型、模型版本、日期)对成千上万的追踪(Trace)进行即时查询和对比,才能将冰冷的数据转化为真正的理解。例如,你可以快速创建一个对比查询:将模型版本A和版本B在相同问题类型下的“答案满意度评分”(通过后续Eval或用户反馈获得)进行对比,并下钻查看评分低的Trace,具体分析是检索环节还是推理环节出了问题。

5. 评估与可观测性的双循环驱动

进展迅速的团队,普遍采用了一个双循环驱动的工作模式:

  1. 外循环:评估(Evals) 。这是一个定期的、系统性的质量评估过程。你可以设计一系列测试用例(单元测试),或从生产流量中采样一批真实查询,通过自动化脚本(调用模型进行评分、规则判断、或与黄金答案对比)来给智能体的输出打分。这个循环回答的问题是:“我们最近的改动(新模型、新提示词、新检索库)让整体系统变好了还是变差了?” 它给出的是一个宏观的、统计意义上的指标。

  2. 内循环:可观测性(Observability) 。这是在系统运行时,实时或事后深入探究具体问题的过程。当Evals显示某项指标下降,或者接到用户具体投诉时,你利用可观测性工具深入对应的Trace,查看完整的决策流水线,定位问题根因。这个循环回答的问题是:“ 为什么 这次(或这类)请求会出错?问题出在哪个环节?”

两者缺一不可 。只有Evals,你只知道“不好”,但不知道“为什么不好”,修复无从下手。只有可观测性,你只能被动响应个案,无法系统性地衡量和提升整体质量。成功的团队将两者紧密耦合:用Evals指标触发警报,用可观测性进行根因分析,再将分析得到的洞见(例如“检索到的文档过于陈旧”)反馈到系统改进中(更新知识库),从而形成一个持续改进的增强循环。

6. 实施路径与常见陷阱

将这套理念落地,并非从零开始。分布式系统中成熟的模式——追踪传播、结构化事件、Span建模——其心智模型完全可以迁移到智能体系统。真正的挑战在于实现模式的定义。

6.1 分阶段实施建议

对于刚开始的团队,我建议采用渐进式策略:

第一阶段:基础插桩与核心追踪

  • 目标 :确保每一个智能体调用都生成一个完整的Trace,至少包含LLM调用和工具调用这两个最关键的Span。
  • 行动 :使用OpenTelemetry(OTel)这类标准对你的智能体框架(如LangChain、LlamaIndex)进行插桩。许多现代框架已经提供了OTel集成或简单的回调接口,用于在关键节点发送Span。
  • 收获 :你立刻能回答“智能体调用耗时多长?”“工具调用失败率多高?”等基础运维问题。

第二阶段:丰富上下文与决策信息

  • 目标 :在Trace中融入业务和决策上下文。
  • 行动 :在检索、提示词构建、路由决策等环节添加自定义Span。为所有Span添加高基数的业务属性,如 user_intent conversation_id model_version
  • 收获 :能够按业务维度分析问题,例如“处理‘投诉类’问题的延迟显著高于‘咨询类’”。

第三阶段:集成评估与闭环反馈

  • 目标 :建立质量评估体系,并与观测数据关联。
  • 行动 :构建自动化Eval流水线,对生产流量抽样评分。将Eval分数(如 answer_relevance_score )作为属性写回到对应的Trace中。这样,你可以在观测平台中直接查询“所有评分低于0.8的Trace,在检索环节有什么共同特征?”
  • 收获 :实现从发现问题到定位根因的快速闭环,数据驱动系统迭代。

6.2 需要避开的“坑”

  1. 数据过载与成本 :记录所有中间步骤(如每次检索到的全部文档内容)可能会产生巨大数据量。需要平衡细节与成本。通常记录文档ID和相关性分数即可,必要时再通过ID查询详情。
  2. 敏感信息泄露 :提示词、检索内容、工具输入输出可能包含敏感数据(PII、商业机密)。 必须在插桩层进行脱敏处理 。可以设计一个脱敏处理器,在数据发送到观测平台前,将特定字段进行掩码或哈希处理。
  3. Span爆炸 :一次复杂的多轮对话可能产生极其庞大的Span树,影响追踪系统的性能和可读性。考虑对非常深或重复的循环进行适当的折叠或采样。
  4. “观测驱动开发”滞后 :不要等到智能体上线后再考虑观测。在设计和开发阶段,就思考“未来出了问题,我需要哪些信息来调试?”,并据此设计代码的插桩点。这类似于测试驱动开发(TDD)的理念。

7. 写在最后:观测的本质是赋能,而非监控

这次O11yDay之旅让我深刻感受到,对于AI智能体系统,可观测性的终极目的不是简单的报警和监控,而是 赋能团队进行高效的探索、调试与迭代 。它让你和你的团队能够与一个复杂的、非确定性的AI系统进行有效“对话”,理解其行为,纠正其偏差,并最终引导它更可靠、更高效地工作。

那些走在前面的团队,已经将Austin描述的那个循环——提出新问题、从观测中学习、将洞见反馈到更好的上下文和提示词中——变成了日常工程实践。而强大的可观测性,正是让这个循环能够持续运转、不断加速的基石。如果你正开始这段旅程,不妨从为你的下一个智能体POC项目加上一个简单的Trace开始,亲身体验一下从“盲人摸象”到“心中有图”的转变。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐