跳转至

使用流式输出

runtime.stream() 会在 Agent 运行时持续返回结构化事件,适合终端输出、聊天界面和运行日志。

输出模型文本

import asyncio
import os

import bumblehive
from bumblehive.observability import MODEL_STREAM_CONTENT_DELTA


async def main() -> None:
    config = bumblehive.RuntimeArguments(
        model=os.environ["BUMBLEHIVE_MODEL"],
        api_key=os.environ["BUMBLEHIVE_API_KEY"],
        base_url=os.environ["BUMBLEHIVE_BASE_URL"],
        tool_names=[],
    )

    async with bumblehive.from_config(config) as runtime:
        stream = runtime.stream("用三句话解释 Agent Loop")

        async for event in stream:
            if event.kind == MODEL_STREAM_CONTENT_DELTA:
                print(event.payload["delta"], end="", flush=True)

        result = await stream.result()

    print()
    if result.error:
        print("运行失败:", result.error.message)


asyncio.run(main())

为什么最后还要调用 result()

事件流用于展示过程,AgentRunResult 才是完整结果。它包含最终文本、工具使用情况、token 用量和错误。

必须先把事件消费完,再读取结果:

async for event in stream:
    ...

result = await stream.result()

提前调用 result() 会抛出 RuntimeError

常用事件

事件 用途
MODEL_STREAM_CONTENT_DELTA 普通回答增量
MODEL_STREAM_REASONING_DELTA Provider 提供的推理增量
MODEL_STREAM_TOOL_CALL_DELTA 工具调用参数增量
TOOL_CALL_STARTED 一个工具开始执行
TOOL_CALL_FINISHED 一个工具执行结束
FINAL_RESULT 完整结果已经生成

每个 AgentEvent 都包含 kindrun_idpayloadtimestamp,还可能包含 iterationsession_id

提前停止

await stream.aclose()

提前关闭会取消后台任务,因此之后不能取得最终结果。一个 Stream 也只能消费一次。

只需要终端显示

run_console() 会处理事件并返回同一个 AgentRunResult

result = await runtime.run_console("解释当前项目")

下一步:阅读处理运行错误