跳至内容

Workflow

VoiceWorkflowBase

基类: ABC

语音工作流的基础类。您必须实现run方法。"工作流"可以是任何接收转录文本并生成将被文本转语音模型转换为语音的文本的代码。 在大多数情况下,您会创建Agent并使用Runner.run_streamed()来运行它们,从流中返回部分或全部文本事件。您可以使用VoiceWorkflowHelper类来帮助从流中提取文本事件。 如果您有一个简单的单起点代理且无自定义逻辑的工作流,可以直接使用SingleAgentVoiceWorkflow

Source code in src/agents/voice/workflow.py
class VoiceWorkflowBase(abc.ABC):
    """
    A base class for a voice workflow. You must implement the `run` method. A "workflow" is any
    code you want, that receives a transcription and yields text that will be turned into speech
    by a text-to-speech model.
    In most cases, you'll create `Agent`s and use `Runner.run_streamed()` to run them, returning
    some or all of the text events from the stream. You can use the `VoiceWorkflowHelper` class to
    help with extracting text events from the stream.
    If you have a simple workflow that has a single starting agent and no custom logic, you can
    use `SingleAgentVoiceWorkflow` directly.
    """

    @abc.abstractmethod
    def run(self, transcription: str) -> AsyncIterator[str]:
        """
        Run the voice workflow. You will receive an input transcription, and must yield text that
        will be spoken to the user. You can run whatever logic you want here. In most cases, the
        final logic will involve calling `Runner.run_streamed()` and yielding any text events from
        the stream.
        """
        pass

运行 abstractmethod

run(transcription: str) -> AsyncIterator[str]

运行语音工作流程。您将收到输入转录文本,必须生成将要向用户朗读的文本。您可以在此处运行任何想要的逻辑。在大多数情况下,最终逻辑将涉及调用Runner.run_streamed()并生成来自该流的任何文本事件。

Source code in src/agents/voice/workflow.py
@abc.abstractmethod
def run(self, transcription: str) -> AsyncIterator[str]:
    """
    Run the voice workflow. You will receive an input transcription, and must yield text that
    will be spoken to the user. You can run whatever logic you want here. In most cases, the
    final logic will involve calling `Runner.run_streamed()` and yielding any text events from
    the stream.
    """
    pass

语音工作流助手

Source code in src/agents/voice/workflow.py
class VoiceWorkflowHelper:
    @classmethod
    async def stream_text_from(cls, result: RunResultStreaming) -> AsyncIterator[str]:
        """Wraps a `RunResultStreaming` object and yields text events from the stream."""
        async for event in result.stream_events():
            if (
                event.type == "raw_response_event"
                and event.data.type == "response.output_text.delta"
            ):
                yield event.data.delta

stream_text_from async classmethod

stream_text_from(
    result: RunResultStreaming,
) -> AsyncIterator[str]

封装一个RunResultStreaming对象并从流中生成文本事件。

Source code in src/agents/voice/workflow.py
@classmethod
async def stream_text_from(cls, result: RunResultStreaming) -> AsyncIterator[str]:
    """Wraps a `RunResultStreaming` object and yields text events from the stream."""
    async for event in result.stream_events():
        if (
            event.type == "raw_response_event"
            and event.data.type == "response.output_text.delta"
        ):
            yield event.data.delta

SingleAgentWorkflowCallbacks

Source code in src/agents/voice/workflow.py
class SingleAgentWorkflowCallbacks:
    def on_run(self, workflow: SingleAgentVoiceWorkflow, transcription: str) -> None:
        """Called when the workflow is run."""
        pass

运行中

on_run(
    workflow: SingleAgentVoiceWorkflow, transcription: str
) -> None

当工作流运行时调用。

Source code in src/agents/voice/workflow.py
def on_run(self, workflow: SingleAgentVoiceWorkflow, transcription: str) -> None:
    """Called when the workflow is run."""
    pass

SingleAgentVoiceWorkflow

基类: VoiceWorkflowBase

一个简单的语音工作流,运行单个代理。每次转录和结果都会被添加到输入历史记录中。 对于更复杂的工作流(例如多次Runner调用、自定义消息历史记录、自定义逻辑、自定义配置),可以继承VoiceWorkflowBase并实现自己的逻辑。

Source code in src/agents/voice/workflow.py
class SingleAgentVoiceWorkflow(VoiceWorkflowBase):
    """A simple voice workflow that runs a single agent. Each transcription and result is added to
    the input history.
    For more complex workflows (e.g. multiple Runner calls, custom message history, custom logic,
    custom configs), subclass `VoiceWorkflowBase` and implement your own logic.
    """

    def __init__(self, agent: Agent[Any], callbacks: SingleAgentWorkflowCallbacks | None = None):
        """Create a new single agent voice workflow.

        Args:
            agent: The agent to run.
            callbacks: Optional callbacks to call during the workflow.
        """
        self._input_history: list[TResponseInputItem] = []
        self._current_agent = agent
        self._callbacks = callbacks

    async def run(self, transcription: str) -> AsyncIterator[str]:
        if self._callbacks:
            self._callbacks.on_run(self, transcription)

        # Add the transcription to the input history
        self._input_history.append(
            {
                "role": "user",
                "content": transcription,
            }
        )

        # Run the agent
        result = Runner.run_streamed(self._current_agent, self._input_history)

        # Stream the text from the result
        async for chunk in VoiceWorkflowHelper.stream_text_from(result):
            yield chunk

        # Update the input history and current agent
        self._input_history = result.to_input_list()
        self._current_agent = result.last_agent

__init__

__init__(
    agent: Agent[Any],
    callbacks: SingleAgentWorkflowCallbacks | None = None,
)

创建一个新的单代理语音工作流。

参数:

名称 类型 描述 默认值
agent Agent[Any]

要运行的代理程序。

required
callbacks SingleAgentWorkflowCallbacks | None

工作流程中可选的回调函数。

None
Source code in src/agents/voice/workflow.py
def __init__(self, agent: Agent[Any], callbacks: SingleAgentWorkflowCallbacks | None = None):
    """Create a new single agent voice workflow.

    Args:
        agent: The agent to run.
        callbacks: Optional callbacks to call during the workflow.
    """
    self._input_history: list[TResponseInputItem] = []
    self._current_agent = agent
    self._callbacks = callbacks