桃子桃子快讯
返回首页
工具

Bonsai:支持分支与合并的开源 AI 对话框架

开发者工具包,可在 AI 对话中创建分支、合并上下文并蒸馏为 Markdown 知识库

2026.07.25 · 周六4 分钟阅读

Bonsai 是一个面向开发者的开源工具包,用于构建支持「分支对话」的 AI 聊天应用。它把每一次对话建模成一棵树,用户可以在任意消息处创建分支去探索不同思路,事后把有用的分支以摘要形式合并回主线,或把无效分支直接丢弃,不会污染原对话上下文。项目当前仍处于 Phase 1 阶段,尚未发布可安装的 npm 包。

核心机制

Bonsai 的设计围绕四个显式操作展开,所有动作都由应用最终用户主动触发,而非框架在后台自动执行:

  • 分支(Branch):在任意消息处创建独立分支,分支拥有自己的对话历史。
  • 合并(Merge):将经过审阅的分支摘要作为一条用户确认后的消息,回写到父分支。
  • 蒸馏(Distill):把分支或合并的完整记录沉淀为一篇 Markdown wiki 页面,供后续对话检索引用,避免重复解释。
  • 检索(Retrieval):在蒸馏产出的 wiki 上做检索,默认走全文检索,接口设计为可替换为基于 embedding 的向量检索。

为避免模型「黑箱」,Bonsai 引入了 ContextPacket 概念:在发送给 LLM 之前(或替代发送),开发者可以检查本次回复实际打包进 prompt 的全部消息、合并片段与 wiki 页面,确保没有任何隐式检索步骤被悄悄加入。

仓库与架构

项目以 monorepo 形式组织在 pnpm 工作区下,关键包包括:

  • @bonsai/core:框架无关的核心域,定义 Storage / LLMProvider / WikiStore / Retriever 等接口。
  • @bonsai/storage-postgres:基于 Postgres 的迁移、仓储与全文检索实现。
  • @bonsai/provider-openai:兼容 OpenAI Chat/Streaming 接口的模型适配器。
  • @bonsai/wiki-fs:把 wiki 存成本地 Markdown 文件,便于脱离 Bonsai 读写与备份。
  • @bonsai/server:可选的薄 HTTP 层。

核心包通过两层机制保证「框架与适配器无关」的边界:ESLint 的 no-restricted-imports 禁止在 packages/core 中引入 React、Next、数据库驱动、文件系统与各厂商 SDK;dependency-cruiser 则禁止核心包反向依赖任何适配器包。CI 在每次 push 与 PR 时都会跑 boundary:verify,并对故意违规的 fixture 做反向断言。

当前状态与门槛

仓库明确标注 Phase 1 scaffold:核心结构与边界规则已就位,但尚无任何包发布到 npm,也未提供完整可运行的嵌入示例。运行门槛包括 Node ≥ 20.11.0 与通过 packageManager 字段锁定的 pnpm 9.15.4,常用命令覆盖 typecheckbuildtestlintdepcruisepublintattw 以及基于 Astro Starlight 的本地文档站(docs:dev / docs:build / docs:preview)。文档站内的 API 参考由 TypeDoc + starlight-typedoc 从各包 src/index.ts 自动生成,概念页与 quickstart 与当前 @bonsai/* API 保持同步。项目采用 MIT 许可证。

信源