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是典型的三步流程(详见语音管线快速入门):
- 用语音转文字(Speech-to-Text)模型把音频转录为文本;
- 运行你的工作流(通常是 Agent 工作流)产生文本回复;
- 用文字转语音(Text-to-Speech)模型把回复文本合成为流式音频。
在 pipeline.py 的实现中,VoicePipeline.run()无论是处理单次输入(AudioInput)还是流式多轮会话(StreamedAudioInput),都会用TraceCtxManager打开一个追踪上下文,并把workflow_name、group_id、trace_metadata、tracing、tracing_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 对外提供,语音相关专用类型还包括TranscriptionSpanData、SpeechSpanData、SpeechGroupSpanData。
通过 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_disabled | bool | False | 是否关闭本条管线的追踪,默认开启 |
tracing | TracingConfig \| None | None | 管线的追踪配置(导出 API Key、是否生成 task/turn span 等) |
trace_include_sensitive_data | bool | True | 是否在 trace 中包含敏感数据(如音频转录文本)。仅作用于语音管线本身,不影响工作流内部行为 |
trace_include_sensitive_audio_data | bool | True | 是否在 trace 中包含音频数据 |
workflow_name | str | "Voice Agent" | 该 trace 工作流的名称 |
group_id | str | 随机生成(gen_group_id()) | trace 的分组 ID,用于把多条 trace 关联到同一会话 |
trace_metadata | dict[str, Any] \| None | None | 附加到 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 追踪文档):
- 设置环境变量
OPENAI_AGENTS_DISABLE_TRACING=1全局禁用; - 在代码中调用
set_tracing_disabled(True)全局禁用; - 在单次
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_data与trace_include_sensitive_audio_data是两个容易混淆但职责不同的开关,它们的真实作用可以从源码中看得非常清楚:
trace_include_sensitive_data(默认True)控制文本类敏感信息是否写入 span:
- STT 侧:在 openai_stt.py 的
_start_turn()中,keywords、prompt等转录配置只有在开关为True时才写入transcription_span的model_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/1或false/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),仅供参考