跳转至

引导与纠偏

用户在 Agent 工作期间补充要求,例如“改用中文回答”,可以通过 steer() 交给当前任务,不必重新开始。

运行中补充要求

下面的例子在 Agent 开始查询课程时追加要求,模拟应用收到用户输入。

完成模型配置,运行 python examples/runtime/steering_run.py:

import asyncio
import os

import bumblehive
from bumblehive.observability import TOOL_CALL_STARTED, AgentEvent


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"],
        agent_instructions="回答课程问题前,先调用 get_course_info 查询,不要猜测。",
        skill_names=[],
        tool_names=["get_course_info"],
    )

    async with bumblehive.from_config(config) as runtime:

        @runtime.tools.tool(description="查询 Python 入门课的时间和地点。")
        def get_course_info() -> str:
            info = "Python 入门:周一 10:00,教学楼 A101。"
            print("工具结果:", info)
            return info

        steered = False

        def on_event(event: AgentEvent) -> None:
            nonlocal steered
            if event.kind == TOOL_CALL_STARTED and not steered:
                steered = True
                print("模型开始调用工具,追加引导。")
                # 工具继续执行;引导会追加在工具结果之后。
                run.steer("改用中文,只说两句话。")

        run = runtime.run(
            "查询 Python 入门课的时间和地点,用英文回答。", hooks=on_event
        )
        result = await run

    if result.error is not None:
        print(f"运行失败:{result.error.message}")
    else:
        print("最终回答:", result.final_content)


if __name__ == "__main__":
    asyncio.run(main())
  • run = runtime.run(...) 保存本次运行对象。
  • run.steer(...) 把新要求送入当前运行。
  • 例子用工具开始事件触发输入,便于直接观察效果;实际应用可以在用户提交消息时调用同一方法。

运行效果

模型开始调用工具,追加引导。
工具结果:Python 入门:周一 10:00,教学楼 A101。
最终回答:…改用中文回答课程时间和地点…

追加要求不会中断正在执行的模型请求或工具。它会在下一次请求模型前加入对话;工具调用期间收到的要求会放在这批工具结果之后。

接入用户输入

在已经创建的 runtime 中,可以让任务运行的同时接收界面消息:

run = runtime.run("分析项目")
task = asyncio.create_task(run)

# 接到用户输入后,在同一事件循环中调用:
run.steer("重点看安装和启动步骤。")

result = await task

流式输出使用 stream.steer(text),用法相同,见流式引导示例。

运行已经结束时,steer() 会抛出 RuntimeError。这时用同一份会话历史开始下一轮。后台工具提供了完整的结果回传示例;运行对象的细节见 API 参考。