会话
会话的存储、工作区绑定与导出。
会话把一次工作过程完整留住:对话、工具调用、产物与用量统计都归属到同一个会话下。
会话里存什么
每个会话存进 SQLite(.bi/bi.db)的 user_sessions 表,字段包括:
id— 会话 idtitle— 标题;新建时缺省为「新对话」,可改名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、消息数与创建/更新时间,页脚注明「只读快照,权威数据在数据库」
会话与上下文
模型每次请求看到的内容由上下文管理决定:最近若干轮完整重建,更早的轮次做规则摘要。这不是会话级开关,而是每次打包时的统一行为。