在传统的软件开发领域,代码是绝对的权威。当功能出现异常,我们会去审查 handleSubmit() 函数;当需要优化性能,我们分析算法热点。代码是确定性的逻辑载体,是“真相”的唯一来源。然而,随着 AI Agent 的兴起,这一基石正在被动摇。本文旨在探讨一个根本性的范式转移:在AI驱动的世界里,真相的来源正从“代码(Code)”转移到“轨迹(Traces)”。
为什么代码不再是真相的承载者?
回想一下传统应用的工作方式。用户提交一个表单,背后是一段确定的代码路径:验证输入、检查权限、调用API、处理结果。相同的输入必然触发相同的代码分支,并得到相同的输出。整个过程是透明且可追溯的,代码就是你的地图。
但在AI Agent的开发中,情况截然不同。你的代码更像是一个脚手架,而非决策大脑。看看下面这段典型的Agent初始化代码:
agent = Agent(
model="gpt-4",
tools=[search_tool, analysis_tool, visualization_tool],
system_prompt="You are a helpful data analyst..."
)
result = agent.run(user_query)
代码定义了组件:模型、工具集、系统指令。然而,核心的决策逻辑并不在你的代码库里。何时调用哪个工具、如何进行问题推理、何时终止任务、优先处理哪部分信息——所有这些“智能”行为,都发生在运行时的大模型内部。代码仅仅扮演了“编排者”的角色。
💡 关键洞察: 随着LLM在应用中承担越来越多的决策职能(这正是Agent的核心),仅仅通过阅读代码来理解应用的实际行为变得越来越困难,甚至是不可能的。
你当然可以调试“编排”部分的代码,比如工具调用是否成功、参数解析是否正确。但你已经无法直接调试“智能体”的思考过程。决策质量的好坏、推理链条是否有效,这些逻辑深深隐藏在模型的参数之中,而非你的版本控制里。
轨迹(Traces):新的“源代码”与文档
既然代码不承载决策逻辑,那么AI Agent的行为究竟记录在哪里?答案是轨迹(Traces)。
轨迹是智能体在一次任务执行中留下的完整“脚印”。它按顺序记录了每一步的思考(Reasoning)、触发的工具调用及其原因、得到的结果、消耗的时间与成本。本质上,轨迹就是你的AI Agent在运行时的“执行日志”和“思维过程”。
这意味着,在传统软件开发中你对“代码”所做的所有事情,在AI Agent开发中都要转向对“轨迹”进行。
- 调试:从分析代码逻辑,变为分析轨迹中的推理链条。
- 测试:从验证代码输出,变为评估轨迹的质量。
- 性能优化:从优化算法复杂度,变为分析轨迹中的决策模式以消除低效路径。
- 监控:从监控系统错误率,变为监控决策成功率与质量。
在传统软件中,如果两次运行结果不同,你会排查输入或代码的差异。在AI Agent的世界里,完全相同的输入和代码,完全可能产生截然不同的输出——因为模型的响应具有非确定性。理解这一切为何发生的唯一方法,就是深入查看并比较轨迹。为什么任务A成功了而任务B失败了?比较它们的轨迹。修改Prompt后智能体的推理是否更好了?对比修改前后的轨迹。
实践指南:范式转变如何重塑开发流程
当逻辑的真相来源从静态的代码转移到动态的轨迹时,整个开发、运维和协作流程都需要被重新设计。
1. 调试:从设置断点到轨迹分析
当用户报告“智能体回答错了”,你的第一反应不再是打开IDE。你需要打开对应的轨迹,查看推理是在哪一步偏离了轨道。Agent是否误解了上下文?是否选择了不恰当的工具?是否陷入了无意义的循环?这里的“Bug”通常不是代码语法错误,而是轨迹中暴露出的推理错误或决策缺陷。
举个例子:一个客服Agent反复尝试调用一个已失效的外部API,连续失败了五次后才放弃。你的代码中的重试机制本身没问题,Bug在于Agent未能从每次调用返回的错误信息中“学习”到该API不可用。这个“Bug”只有在完整的执行轨迹中才能清晰地显现出来。
2. 测试:从预发布测试到持续的评估驱动
既然逻辑存在于轨迹中,测试的核心就变成了评估这些轨迹。这催生了两个新需求:
- 构建轨迹数据集:需要一个自动化管道,将生产环境中有代表性的任务轨迹捕获下来,形成一个持续增长的测试评估数据集。
- 生产环境持续评估:由于Agent的非确定性,仅靠发布前的测试远远不够。必须在生产环境中对真实用户的交互轨迹进行抽样和自动化评估,以持续监控模型性能的“漂移”或质量下降。
3. 性能优化:分析决策模式,而非算法
传统的性能优化关注CPU时间和内存占用。对于Agent,瓶颈往往在于其决策效率。你需要分析轨迹来发现低效的模式:是否存在不必要的工具调用?推理步骤是否冗长重复?是否能通过优化上下文或提示词来缩短决策路径?这些洞察都隐藏在轨迹中,而非代码的循环里。
4. 监控:从“是否在线”到“是否优秀”
一个Agent系统可以保持100%的在线率和零错误码,但同时表现得很糟糕——它可能用极高的成本完成一个简单任务,或者给出一个正确但毫无用处的答案。因此,监控的重点必须从系统健康度转向决策质量。你需要监控任务成功率、单次对话的耗时与成本、工具调用的准确率等。而这些指标,无一不需要通过采样和分析轨迹来计算。

轨迹分析覆盖了从调试、测试到产品分析的方方面面,成为AI Agent开发的中心。
5. 协作:从代码评审到轨迹评审
在传统团队中,协作围绕代码仓库展开:评审Pull Request,在Issue中讨论实现方案。对于AI Agent团队,虽然编排代码仍需管理,但更核心的协作对象变成了轨迹。当需要讨论“为什么Agent在这个case中做出了错误判断”时,最有效的方式是分享一个具体的轨迹链接,在特定的决策步骤上添加评论,共同分析当时的上下文和模型状态。你的可观测性平台因此成为了核心的协作工具。
6. 产品分析:与调试的边界融合
在传统产品中,用户行为分析(如点击流)和系统调试是分开的。在AI Agent产品中,这两者深度融合。不理解Agent的行为,你就无法真正理解用户的行为。当数据分析显示“30%的用户在对话中表达了挫败感”时,产品经理和工程师需要一起查看这些会话的轨迹,定位是Agent的哪一步推理导致了用户不满。用户体验直接由Agent的一系列决策构成,而这些决策被完整记录在轨迹里。
核心结论:拥抱以轨迹为中心的可观测性
总而言之,在传统软件中,代码是最终的文档和真相。在AI Agent中,轨迹承担了这一角色。这一转变的逻辑非常清晰:当决策权从你编写的代码转移给运行时的模型时,记录和反映这些决策的载体,自然就从代码变成了轨迹。
💡 行动指南:过去你对代码所做的一切——调试、测试、优化、监控、协作——现在都必须以轨迹为核心来开展。
要实现这一点,基础是构建强大的可观测性体系。这意味着你需要:
- 获取结构化的轨迹:不仅仅是日志,而是包含完整推理链、工具调用、耗时成本等丰富上下文的序列化数据。
- 能够高效检索与分析:可以按属性(如会话ID、工具名称、状态)搜索、过滤、对比不同的轨迹。
- 支持基于历史的评估:能对过去的轨迹数据集重新运行评估标准,以量化性能的变化趋势。
如果你正在构建AI Agent,却缺乏这样一套以轨迹为中心的观测和迭代机制,那么你很大程度上是在“盲人摸象”。因为决定你产品智能程度和用户体验的最关键逻辑,只存在于那稍纵即逝的运行时轨迹之中。本文的探讨正是在云栈社区这样的开发者社区中不断被验证和深化的议题,它标志着一个开发新时代的思维起点。
原文参考:https://x.com/LangChain/status/2025366346973007956