news 2026/9/10 4:44:28

OpenAI Agents SDK 语音管线(Voice Pipeline)追踪配置指南:从自动埋点到敏感数据开关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenAI Agents SDK 语音管线(Voice Pipeline)追踪配置指南:从自动埋点到敏感数据开关

OpenAI Agents SDK 语音管线(Voice Pipeline)追踪配置指南:从自动埋点到敏感数据开关

【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python

语音管线(VoicePipeline)与普通 Agent 一样,会在运行时自动产生完整的追踪(Tracing)记录,覆盖语音转文字、Agent 工作流、文字转语音的每一个环节。本篇指南基于VoicePipelineConfig的 6 个追踪相关字段,结合仓库源码讲解如何在 OpenAI Agents SDK 中配置、控制与定制语音管线的追踪行为,读完你可以独立完成语音应用的追踪开关、敏感数据脱敏、跨轮次会话串联与追踪导出等实战配置。

语音管线如何自动产生追踪数据

与 Agent 运行的自动追踪 机制一致,语音管线无需额外埋点即可被追踪。一个VoicePipeline是典型的三步流程(详见语音管线快速入门):

  1. 用语音转文字(Speech-to-Text)模型把音频转录为文本;
  2. 运行你的工作流(通常是 Agent 工作流)产生文本回复;
  3. 用文字转语音(Text-to-Speech)模型把回复文本合成为流式音频。

在 pipeline.py 的实现中,VoicePipeline.run()无论是处理单次输入(AudioInput)还是流式多轮会话(StreamedAudioInput),都会用TraceCtxManager打开一个追踪上下文,并把workflow_namegroup_idtrace_metadatatracingtracing_disabled等配置传入,保证整个异步处理生命周期内所有 span 都归属到同一条 trace 之下(见 pipeline.py)。

在这个追踪上下文内部,SDK 会按环节自动创建不同类型的 span:

Span 类型覆盖环节源码出处
transcription_span语音输入(STT 转录)openai_stt.py
speech_span语音输出(TTS 合成)result.py
speech_group_span将同一轮的多段语音输出 span 归组result.py
agent_span/generation_span/function_span/guardrail_span/handoff_span工作流内部 Agent 运行、LLM 生成、工具调用等tracing 模块导出

这些 span 导出函数统一由 src/agents/tracing/init.py 对外提供,语音相关专用类型还包括TranscriptionSpanDataSpeechSpanDataSpeechGroupSpanData

通过 VoicePipelineConfig 配置追踪

默认情况下追踪是开启的,你可以通过VoicePipelineConfig对单条管线做细粒度配置。配置的传入方式为:

from agents.voice import VoicePipeline, SingleAgentVoiceWorkflow, VoicePipelineConfig config = VoicePipelineConfig( # ... 追踪相关字段 ) pipeline = VoicePipeline( workflow=SingleAgentVoiceWorkflow(agent), config=config, )

VoicePipelineConfig定义在 src/agents/voice/pipeline_config.py,其中与追踪直接相关的字段如下(默认值均取自源码):

字段类型默认值作用
tracing_disabledboolFalse是否关闭本条管线的追踪,默认开启
tracingTracingConfig \| NoneNone管线的追踪配置(导出 API Key、是否生成 task/turn span 等)
trace_include_sensitive_databoolTrue是否在 trace 中包含敏感数据(如音频转录文本)。仅作用于语音管线本身,不影响工作流内部行为
trace_include_sensitive_audio_databoolTrue是否在 trace 中包含音频数据
workflow_namestr"Voice Agent"该 trace 工作流的名称
group_idstr随机生成(gen_group_id()trace 的分组 ID,用于把多条 trace 关联到同一会话
trace_metadatadict[str, Any] \| NoneNone附加到 trace 的额外元数据

说明:tracing字段的类型TracingConfig定义在 src/agents/tracing/config.py,目前支持api_key(导出 trace 使用的 API Key)与include_task_and_turn_spans(是否自动创建 task/turn span,缺省为True)两个可选键。

tracing_disabled:关闭追踪

tracing_disabled=True只关闭这一条语音管线的追踪。SDK 还提供了三种全局层面的关闭方式(详见 Agent 追踪文档):

  1. 设置环境变量OPENAI_AGENTS_DISABLE_TRACING=1全局禁用;
  2. 在代码中调用set_tracing_disabled(True)全局禁用;
  3. 在单次Runner.run()中设置RunConfig.tracing_disabled=True禁用该次运行。

需要留意的是:采用 Zero Data Retention(ZDR)策略使用 OpenAI API 的组织无法使用追踪功能

workflow_name:区分不同的语音应用

workflow_name是这条 trace 的逻辑工作流名称,默认值为"Voice Agent"。如果你的项目里有多个语音管线(比如"客服助手"和"会议纪要助手"各一条),建议为每条管线设置不同的名称,便于在 Traces 仪表盘中按应用维度筛选和排查。

group_id:把多轮会话串成一条链路

group_id的作用是把来自同一会话的多条 trace 关联起来,例如使用聊天会话 ID。源码中默认通过gen_group_id()随机生成(见 pipeline_config.py);在多轮语音对话场景下,建议显式传入业务侧的会话标识(如房间 ID、通话 ID),这样同一通对话产生的所有 trace 都能在仪表盘中聚合查看。

trace_metadata:附加业务上下文

trace_metadata接受一个字典,用于向 trace 注入额外的业务元数据(例如用户 ID、渠道、地区、设备类型等),方便后续做聚合统计与检索过滤。

完整配置示例

以下示例展示了同时配置多个追踪字段的完整写法(可直接复制到语音管线项目中运行):

from agents.voice import VoicePipeline, SingleAgentVoiceWorkflow, VoicePipelineConfig config = VoicePipelineConfig( # 保留默认:追踪开启 tracing_disabled=False, # 命名工作流,便于仪表盘区分 workflow_name="Customer Service Voice Bot", # 用会话 ID 关联同一通对话的多条 trace group_id="conversation-2026-0909-0001", # 附加业务元数据 trace_metadata={ "user_id": "u_12345", "channel": "twilio", "region": "ap-east", }, # 生产环境建议关闭敏感数据与音频数据,避免转录文本/音频进入 trace trace_include_sensitive_data=False, trace_include_sensitive_audio_data=False, ) pipeline = VoicePipeline( workflow=SingleAgentVoiceWorkflow(agent), config=config, ) result = await pipeline.run(audio_input) async for event in result.stream(): # 消费音频事件 ...

敏感数据开关的底层原理

trace_include_sensitive_datatrace_include_sensitive_audio_data是两个容易混淆但职责不同的开关,它们的真实作用可以从源码中看得非常清楚:

trace_include_sensitive_data(默认True控制文本类敏感信息是否写入 span:

  • STT 侧:在 openai_stt.py 的_start_turn()中,keywordsprompt等转录配置只有在开关为True时才写入transcription_spanmodel_config;在_end_turn()中,转写得到的transcript文本(span 的output)同样受此开关控制。
  • TTS 侧:在 result.py 的_stream_audio()中,input(要合成的文本)与model_config.instructions只有在开关为True时才写入speech_span

trace_include_sensitive_audio_data(默认True控制音频数据(base64 编码的 PCM)是否写入 span:

  • STT 侧:_end_turn()中,只有当开关为True且音频缓冲区非空时,才会把_audio_to_base64(self._turn_audio_buffer)写入 span 的input(见 openai_stt.py)。
  • TTS 侧:_stream_audio()中,合成的 PCM 音频只有在该开关为True时才回填到 span 的output(见 result.py)。

特别强调:文档与源码都明确指出,trace_include_sensitive_data仅作用于语音管线本身,工作流(Workflow)内部发生的 Agent 调用、LLM 生成、函数调用等,其敏感数据仍由 RunConfig.trace_include_sensitive_data 控制。

此外,你还可以通过环境变量OPENAI_AGENTS_TRACE_INCLUDE_SENSITIVE_DATA(取值为true/1false/0)在启动应用前统一修改全局默认值,无需改动代码。

进阶:追踪的导出与自定义处理器

默认情况下,语音管线的 trace 会由 SDK 内置的BatchTraceProcessor分批导出到 OpenAI 后端(每几秒或队列达到阈值时导出,进程退出时做最终冲刷)。如果需要在一个任务单元结束后立即看到 trace,可调用flush_traces()强制立即导出;在 Celery、RQ、FastAPI 后台任务等长驻 worker 中这一模式尤其常用。

如果要把 trace 发送到其他后端,或在默认导出之外做额外处理,SDK 提供两种方式(详见 docs/tracing.md):

  • add_trace_processor():在默认导出之外追加自定义处理器;
  • set_trace_processors()替换默认处理器(替换后将不再发送到 OpenAI 后端,除非你的处理器自行承担导出)。

当使用非 OpenAI 模型时,可以通过set_tracing_export_api_key()提供 OpenAI API Key 以继续在 OpenAI Traces 仪表盘免费查看 trace;如果只想为某一次运行使用不同的追踪 Key,则通过RunConfig(tracing={"api_key": ...})传入即可,无需改动全局导出器。VoicePipelineConfig.tracing字段同样支持这种TracingConfig字典形式。

相关文档与源码索引

  • 语音管线追踪(英文原版):docs/voice/tracing.md
  • Agent 通用追踪机制:docs/tracing.md
  • 语音管线快速入门:docs/voice/quickstart.md
  • VoicePipelineConfig定义与默认值:src/agents/voice/pipeline_config.py
  • 管线追踪上下文创建:src/agents/voice/pipeline.py
  • STT 转录 span 与敏感数据开关:src/agents/voice/models/openai_stt.py
  • TTS 语音 span 与音频数据开关:src/agents/voice/result.py
  • TracingConfig定义:src/agents/tracing/config.py
  • 追踪 span 导出函数清单:src/agents/tracing/init.py

【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python

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

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

大模型训练网络为什么绕不开RoCEv2?从原理到调优全解析

接手一套用来训练百亿级大模型参数的 GPU 集群,GPU、存储、散热方案都谈妥了,最后反而是网络被人反复追问:RoCEv2 真的能扛住大模型训练网络?这个问题的分量,跑过一次真实训练才体会得到。我参与交付过上千节点的 RoCE…

作者头像 李华
网站建设 2026/9/10 4:39:38

CANN/GE GNode属性获取API

GetAttr 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的…

作者头像 李华
网站建设 2026/9/10 4:38:48

AutoHedge:面向Swarm的LLM服务语义健康网关

1. AutoHedge 是什么?它解决的不是“自动对冲”,而是工程协同失效的根因问题 AutoHedge 这个名字乍看像金融风控里的高频术语——自动对冲(Automatic Hedging),但结合热搜词 Swarm、API、OpenAI、Python,再…

作者头像 李华