Bi

会话

会话的存储、工作区绑定与导出。

Markdown 原文

会话把一次工作过程完整留住:对话、工具调用、产物与用量统计都归属到同一个会话下。

会话里存什么

每个会话存进 SQLite(.bi/bi.db)的 user_sessions 表,字段包括:

  • id — 会话 id
  • title — 标题;新建时缺省为「新对话」,可改名
  • created_at / updated_at — 创建与最近更新时间
  • project_path — 会话专属的工作区根目录
  • pinned — 是否置顶

对话内容存在 user_messages 表:每条消息含角色、文本内容、工具调用参数与结果、token 用量统计。工具调用与结果会被保留,包括 read 读到的文件内容、write 写入的内容、exec 的命令全文。

会话的工作区

每个会话可以绑定独立的 project_path。这意味着:

  • 不同项目开不同会话,智能体只在该会话的根目录内活动
  • 终端面板的工作目录同样取自会话的 project_path
  • 未设置时会话回退到全局 workspace

这是「会话即项目上下文」的设计:同一个 Bi 进程里可以并行推进互不干扰的多个项目。

会话 API

所有会话端点都要求登录:

端点 方法 作用
/api/user/sessions GET 列出会话(含置顶、消息数、token 总量)
/api/user/sessions POST 新建会话(可带标题与 project_path)
/api/user/sessions/{id} GET 取单个会话
/api/user/sessions/{id} PUT 改名 / 更新(截断或退回某一步也走这里)
/api/user/sessions/{id} DELETE 删除会话(级联删除其消息)
/api/user/sessions/{id}/messages POST 增量追加消息
/api/user/sessions/{id}/export POST 导出为 Markdown

导出为 Markdown

export 由后端渲染(数据库才是权威数据),把会话写成工作区 对话/<日期>-<标题>-<id 前 8 位>.md:

  • 纯 Markdown,不含 HTML,可直接进 git、可被 AI 读取
  • 包含用户提问、助手正文、思考过程(折叠)、工具调用与结果、权限请求、引用与错误
  • 文件头部注明会话 id、消息数与创建/更新时间,页脚注明「只读快照,权威数据在数据库」

会话与上下文

模型每次请求看到的内容由上下文管理决定:最近若干轮完整重建,更早的轮次做规则摘要。这不是会话级开关,而是每次打包时的统一行为。