news 2026/9/14 18:06:12

Coze Studio 工作流测试运行 Trace 面板:@coze-workflow/test-run-trace 包深度解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Coze Studio 工作流测试运行 Trace 面板:@coze-workflow/test-run-trace 包深度解析

Coze Studio 工作流测试运行 Trace 面板:@coze-workflow/test-run-trace 包深度解析

【免费下载链接】coze-studioAn AI agent development platform with all-in-one visual tools, simplifying agent creation, debugging, and deployment like never before. Coze your way to AI Agent creation.项目地址: https://gitcode.com/GitHub_Trending/co/coze-studio

Coze Studio(coze-studio)是一个"开箱即用"的 AI Agent 开发平台,其前端工作流模块提供了可视化的 Agent 编排、调试与部署能力。本文围绕工作流测试运行(TestRun)子模块中的@coze-workflow/test-run-trace包,深入讲解其在工作流调试中承担的角色:以 Trace 列表 + 详情双面板的方式,将一次工作流运行产生的节点级 Span 观测数据(输入、输出、耗时、Token 消耗、状态码等)可视化呈现,帮助开发者快速定位节点执行问题。读完本文,你将掌握该包的导出 API、组件结构与调用链,并理解如何在自己的工作流调试场景中接入与复用这两个面板组件。

包定位:工作流 TestRun 链路中的 Trace 观测层

在 frontend/packages/workflow/test-run-next/trace/package.json 中,该包被描述为Workflow TestRun Form(工作流测试运行表单),版本0.0.1,是 Coze Studio monorepo 中test-run-next系列的一部分。它依赖同仓的 @coze-workflow/test-run-shared(提供BottomPanel等共享面板组件)与 @coze-workflow/base,并通过@coze-arch/bot-api获取工作流运行时的 Trace/Span 数据结构定义。

从命名与代码结构看,该包对应工作流测试运行底栏(Bottom Panel)中的"运行记录 / Trace"视图,核心职责是:

  • 将一次测试运行的完整执行轨迹(Trace)以节点列表/表格形式呈现;
  • 支持按状态、时间等条件筛选历史运行记录;
  • 点击某条记录后可下钻查看单个节点(Span)的输入、输出、延迟、Token 消耗与状态详情;
  • 支持从 Trace 详情一键"定位到节点"(Goto Node),回到画布对应节点位置。

包根目录的 src/index.ts 是唯一对外出口,仅导出两个组件:

export { TraceListPanel } from './components/trace-list-panel'; export { TraceDetailPanel } from './components/trace-detail-panel';

安装与接入

安装方式

由于 Coze Studio 前端采用 rush.json 组织的 pnpm monorepo 工作区,包之间通过workspace:*协议互相引用。按 README.md 的说明,在目标包(例如 test-run 主面板)的package.json中添加依赖:

{ "dependencies": { "@coze-workflow/test-run-trace": "workspace:*" } }

然后执行依赖安装与更新:

rush update

如果希望锁定某个版本,可参考该包自身的 package.json 中的exportsmain字段(均指向./src/index.ts),即直接以 TypeScript 源码形式对外提供,无需单独构建产物。

基础用法

在组件中导入并组合两个面板:

import { TraceListPanel, TraceDetailPanel } from '@coze-workflow/test-run-trace'; import type { TraceFrontendSpan } from '@coze-arch/bot-api/workflow_api'; import type { GotoParams } from '@coze-workflow/test-run-trace/src/types'; // 列表面板:挂在测试运行底栏 <TraceListPanel spaceId={spaceId} workflowId={workflowId} maxHeight={600} isInOp={false} onOpenDetail={(span: TraceFrontendSpan) => setSelectedSpan(span)} onGotoNode={(params: GotoParams) => jumpToCanvasNode(params)} onClose={() => setShowTrace(false)} /> // 详情面板:用户点击列表项后展示 {selectedSpan && ( <TraceDetailPanel span={selectedSpan} onClose={() => setSelectedSpan(null)} onGotoNode={(params: GotoParams) => jumpToCanvasNode(params)} /> )}

组件 API 详解

TraceListPanel:运行记录列表

定义见 list-panel.tsx:

Props类型说明
spaceIdstring空间 ID,用于请求 Trace 列表数据的上下文隔离
workflowIdstring工作流 ID,Trace 查询的主键
maxHeightnumber底栏面板可拖拽调整的最大高度
isInOp?boolean是否处于 OP(运营/线上观测)场景,影响数据来源与展示
onOpenDetail(span: TraceFrontendSpan) => void点击某条 Trace 记录时回调,把选中 Span 传给详情面板
onGotoNode(params: GotoParams) => void从列表"定位到节点"时回调
onClose() => void关闭底栏时回调

实现上,TraceListPanel使用 @coze-workflow/test-run-shared 提供的BottomPanel作为底栏容器,默认高度 300px,支持min: 300max: maxHeight的拖拽调整;头部由TraceListPanelHeader渲染(包含筛选、刷新等操作),主体由TraceGraph负责 Trace 数据的图形化渲染,并用TraceListProvider注入运行上下文。

TraceDetailPanel:节点运行详情

定义见 trace-detail-panel.tsx:

Props类型说明
spanTraceFrontendSpan待展示的单个节点运行数据
onClose() => void关闭详情面板
onGotoNode(params: GotoParams) => void点击"定位到节点"按钮时回调

详情面板从上到下依次渲染:节点名称(span.alias_name)、状态标签(StatusTag,依据span.status_code渲染成功/失败/运行中状态)、"定位节点"按钮(FocusButton)、延迟与 Token 消耗摘要(PayBlocks)、可一键复制的LogIdspan.log_id),以及节点输入(INPUT)与输出(OUTPUT)的 JSON 查看器(基于@textea/json-viewer,并关闭了displayDataTypes)。

支撑类型 GotoParams

定义见 types.ts,用于"从 Trace 定位回画布节点":

export interface GotoParams { nodeId: string; // 画布节点 ID workflowId: string; // 工作流 ID executeId: string; // 执行实例 ID subExecuteId: string; // 子执行实例 ID(嵌套/子工作流场景) }

关键实现:Span 数据解析工具

utils.ts 集中了 Trace 数据的解析逻辑,是整个面板的"数据解码层",与后端下发的 Span 结构强耦合:

  • sortSpans(spans):按span_id去重,并按start_time升序排序,保证列表顺序即执行时序;
  • getTimeFromSpan(span):将span.start_time格式化为YYYY-MM-DD HH:mm:ss
  • isTriggerFromSpan(span):从tags中查找is_trigger标签,用于识别触发源节点;
  • getStrFromSpan(span, key)/getLongFromSpan(span, key):从span.tags键值数组中按 key 取值(字符串 / 长整型);
  • getTokensFromSpan(span):读取tokens标签,用于在详情面板展示 LLM Token 消耗;
  • formatDuration(time):毫秒级时长格式化,依次输出ms/s/min/h/d
  • getGotoNodeParams(span):从 Span 的workflow_idworkflow_node_idexecute_idsub_execute_id四个标签组装GotoParams,供"定位到节点"使用。

这些 tag 取值逻辑与后端 Trace 数据模型(@coze-arch/bot-api中的workflow_api类型,含SpanInt64TraceFrontendSpan)一一对应,是前后端观测数据契约在前端的落点。

状态管理:基于 zustand 的 TraceListProvider

contexts/trace-list/index.tsx 使用 zustand(createWithEqualityFn+shallow比较)创建TraceListStore,管理三个核心状态:

export interface TraceListState { spaceId: string; // 空间 ID workflowId: string; // 工作流 ID isInOp?: boolean; // 是否 OP 场景 /** 首次打开时先请求列表,再默认选中第一条 */ ready: boolean; /** 当前选中的 span */ span: Span | null; }

并通过patch(next)action 统一更新状态。TraceListProvideruseMemo依据spaceId / workflowId / isInOp创建 store 实例,useTraceListStore(selector)提供带 selector 的访问方式,避免无关状态变更引起重渲染。

观测组件体系:Trace 可视化的支撑层

observation-components 是 trace 包内部的"观测组件库",按目录可分为四类:

  • trace-graph(列表图):graph.tsx 与 table.tsx 提供"表格式 Trace 列表"与"火焰线程式(FlameThread)"两种图表模式;use-trace.ts 负责拉取与聚合 Trace 数据;
  • flamethread(火焰图):基于@visactor/vgrammar0.12.5-alpha.4 渲染的火焰线程视图,用于直观展示各节点的时间开销与嵌套调用关系;
  • trace-tree(树视图):以树形结构呈现 Span 的父子调用链,支持在树与图之间联动;
  • message-panel / custom-json-viewer:统一的输入输出 JSON 查看器,详情面板的 INPUT/OUTPUT 展示即复用了它,并通过i18nMapping注入"节点输入/节点输出"的国际化标题。

此外,observation-components/assets/graph/span-type 目录下按 Span 类型提供了一整套 SVG 图标(icon-agenticon-llm-callicon-knowledgeicon-plugin-toolicon-conditionicon-codeicon-databaseicon-workflow-starticon-workflow-end等),用于在图中区分不同类型的节点。

常量约束与运行限制

constants.ts 定义了 Trace 查询的两条硬约束:

export enum TraceChartsMode { Table, // 表格模式 FlameThread, // 火焰线程模式 } /** Log query for up to 50 records */ export const MAX_TRACE_LENGTH = 50; /** Log query for up to 7 days */ export const MAX_TRACE_TIME = 7;

即 Trace 列表最多拉取最近 50 条运行记录,时间窗口最多回溯 7 天。这两个常量应在 UI 上同步体现(例如日期选择器的可选范围、列表分页上限),避免出现"选到了第 8 天却查不到数据"的困惑。

开发与工程配置

按 README.md 的 Development 小节,该包使用 TypeScript 5.x + React 18.2 构建,质量工具链包括 ESLint(eslint.config.js,基于@coze-arch/eslint-config)与 Vitest。当前 package.json 的build/test脚本为占位实现(exit 0),即该包暂以源码形式被消费、不产出独立构建物。

总结

@coze-workflow/test-run-trace是 Coze Studio 工作流 TestRun 底栏中的 Trace 观测模块,通过TraceListPanel(运行记录列表,支持表格/火焰线程双模式)与TraceDetailPanel(单节点输入输出、延迟、Token、状态详情)两个对外组件,把后端下发的 Span 级观测数据转化为可筛选、可下钻、可回溯(最多 50 条 / 7 天)的可视化面板,并支持从 Trace 一键定位回画布节点。其内部以 zustand 管理选中状态、以工具函数集中解析 Span tags、以独立的 observation-components 目录支撑树/火焰图/JSON 查看器等多种观测视图,是理解 Coze Studio 工作流调试观测体系的最佳入口之一。若需二次开发,可从 src/index.ts 出发,沿组件 → 数据解析(utils.ts)→ 状态管理(contexts/trace-list/index.tsx)→ 观测组件(observation-components)逐层深入。

【免费下载链接】coze-studioAn AI agent development platform with all-in-one visual tools, simplifying agent creation, debugging, and deployment like never before. Coze your way to AI Agent creation.项目地址: https://gitcode.com/GitHub_Trending/co/coze-studio

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 18:06:03

帝国CMS常见问题解析与优化实战

1. 帝国CMS高频难题解析与实战方案作为国内老牌CMS系统&#xff0c;帝国CMS凭借其稳定性和灵活性在政府、教育、企业等领域积累了数百万用户。但在实际运维中&#xff0c;我发现有三个问题反复困扰着开发者&#xff1a;模板解析异常、数据批量导入失败、以及后台登录验证码不显…

作者头像 李华
网站建设 2026/9/14 18:04:30

【C 数据结构】list 链式表

目录 链式表的分类方式 按节点连接方式分类 按存储结构分类 按功能扩展分类 带头双向循环动态链表模拟实现 链式表的分类方式 链式表&#xff08;链表&#xff09;根据不同的结构和特性&#xff0c;可以分为以下几类&#xff1a; 按节点连接方式分类 单向链表 每个节点包…

作者头像 李华
网站建设 2026/9/14 18:01:05

COMSOL相场模拟入门:从金属枝晶到雪花形貌的复现与调优

这几天在COMSOL里做相场模拟&#xff0c;目标很具体&#xff1a;复现金属枝晶生长&#xff0c;再把对称性改成六次&#xff0c;看看能不能长出接近雪花的形貌。这个题目听起来唬人&#xff0c;实际跑通之后你会发现&#xff0c;相场模拟最麻烦的往往不是方程本身&#xff0c;而…

作者头像 李华
网站建设 2026/9/14 18:00:20

LNMP架构详解:Nginx与PHP-FPM动静分离配置实战

作为Nginx系列文章的第三篇&#xff0c;这篇我打算把LNMP从零到能跑完整拆一遍。前两篇聊过Nginx的基础配置和虚拟主机玩法&#xff0c;但很多朋友在真正部署PHP项目时还是卡壳&#xff1a;要么是PHP-FPM与Nginx对接不上&#xff0c;返回502&#xff1b;要么是静态图片和JS请求…

作者头像 李华
网站建设 2026/9/14 17:59:00

PHP多进程信号处理与优雅关闭实践

1. 多进程PHP环境中的信号处理挑战在构建高并发的PHP服务时&#xff0c;多进程架构是常见的解决方案。当主进程fork出多个子进程后&#xff0c;一个经常被忽视但至关重要的问题是&#xff1a;如何精确控制不同子进程对系统信号的响应行为&#xff1f;特别是在需要优雅关闭服务时…

作者头像 李华