跳转至

状态与并发

Bumblehive 支持无状态、内存历史和持久化会话三种对话方式。

选择一种状态方式

调用方式 是否记住上一轮 是否写入磁盘 适合场景
不传任何参数 独立任务、批处理
history=MessageHistory() 单进程临时对话
session_id="user:42" 需要重启后继续的对话

不传 historysession_id 时,每次调用都是独立的:

await runtime.run("记住数字 7")
result = await runtime.run("刚才的数字是什么?")

第二次调用不会自动看到第一次的内容。

MessageHistory 的所有者是调用者

Runtime 会读取并更新你传入的对象,但不会保存这个对象:

history = bumblehive.MessageHistory()

await runtime.run("记住数字 7", history=history)
result = await runtime.run("刚才的数字是什么?", history=history)

一次调用返回 AgentRunResult 后,历史会被更新,包括 model_errormax_iterations 结果。调用直接抛出异常或被取消时,历史保持原样。

不要让两个并发任务共享同一个 MessageHistory。并发对话应各自创建历史对象。

session_id 由 Runtime 管理

相同 session_id 会读取同一份持久化历史。默认文件保存在 ~/.bumblehive/sessions/

同一个 Runtime 内:

  • 相同 session_id 的调用会依次执行;
  • 不同 session_id 可以并发执行;
  • 中断的会话会在下一轮开始前修复消息边界。

锁只存在于当前 Runtime 的 Session Manager 中。不要让多个 Runtime 或多个进程同时写入同一个 session_id

两者不能同时使用

下面的调用会抛出 ValueError

await runtime.run(
    "你好",
    history=history,
    session_id="demo",
)

原因是 Bumblehive 无法判断应该以哪份历史为准。

删除持久化会话

deleted = await runtime.delete_session("user:42")

返回 True 表示删除了磁盘文件或缓存状态;不存在时返回 False

会话内容以本地 JSON 保存,并非加密存储。不要保存不必要的敏感信息。

下一步:阅读保存多轮对话