5.7 KiB
5.7 KiB
PicoBot 数据库表结构
数据库为 SQLite,默认位于 workspace 下的 picobot.db。
连接启用 WAL、synchronous=NORMAL、foreign keys、5 秒 busy timeout,连接池最多 8 个连接。当前 PRAGMA user_version=1;启动时会在事务内补齐旧库字段和索引,遇到比程序更新的 schema version 会拒绝启动。
sessions 表
会话表,一个 session 对应一个 (channel, chat_id, dialog_id) 组合。
| 字段 | 类型 | 说明 |
|---|---|---|
id |
TEXT PK | session ID,格式 <channel>:<chat_id>:<dialog_id> |
channel |
TEXT | 渠道名称 |
chat_id |
TEXT | 聊天/群组标识 |
dialog_id |
TEXT | 对话标识 |
title |
TEXT | 会话标题(默认 "新对话") |
created_at |
INTEGER | 创建时间(Unix 毫秒) |
last_active_at |
INTEGER | 最后活跃时间(Unix 毫秒) |
message_count |
INTEGER | 消息计数 |
routing_info |
TEXT | 路由信息 |
archived_at |
INTEGER | 归档时间(Unix 毫秒),NULL 表示未归档 |
deleted_at |
INTEGER | 软删除时间戳 |
last_consolidated_at |
INTEGER | 上次记忆归并时间 |
last_compressed_message_at |
INTEGER | 上次上下文压缩边界时间戳 |
(channel, chat_id, dialog_id) 唯一。普通列表排除 deleted_at;是否包含归档记录由查询参数决定。
messages 表
| 字段 | 类型 | 说明 |
|---|---|---|
id |
TEXT PK | 消息 UUID |
session_id |
TEXT FK | 所属会话,外键关联 sessions(id) |
seq |
INTEGER | 消息序号 |
role |
TEXT | 角色: user / assistant / tool / system |
content |
TEXT | 消息内容 |
media_refs |
TEXT | 多媒体引用 JSON |
tool_call_id |
TEXT | 工具调用 ID |
tool_name |
TEXT | 工具名称 |
tool_calls |
TEXT | 工具调用参数 JSON |
source |
TEXT | 消息来源(跨会话消息时标记来源 session_id) |
created_at |
INTEGER | 创建时间(Unix 毫秒) |
reasoning_content |
TEXT | provider 返回的推理内容(如有) |
(session_id, seq) 有唯一索引,防止并发写入重复序号。删除 session 会通过外键级联删除 messages。
background_tasks 表
delegate 后台子任务表。session_id 不使用数据库外键,因为 session 使用软删除,关联关系由应用层维护。
| 字段 | 类型 | 说明 |
|---|---|---|
id |
TEXT PK | 后台任务 ID |
session_id |
TEXT | 所属会话 |
channel |
TEXT | 回传渠道 |
chat_id |
TEXT | 回传目标对话 |
prompt |
TEXT | 子任务提示 |
allowed_tools |
TEXT | 允许工具 JSON |
status |
TEXT | pending / running / completed / failed / cancelled |
result |
TEXT | 执行结果 |
error |
TEXT | 错误信息 |
tool_calls_count |
INTEGER | 工具调用次数 |
iterations |
INTEGER | Agent 迭代次数 |
started_at |
INTEGER | 开始时间 |
finished_at |
INTEGER | 结束时间 |
created_at |
INTEGER | 创建时间 |
memories 表
长期记忆存储。
| 字段 | 类型 | 说明 |
|---|---|---|
id |
TEXT PK | 记忆 UUID |
key |
TEXT UNIQUE | 记忆唯一键 |
content |
TEXT | 记忆内容 |
category |
TEXT | 类别: knowledge / timeline |
importance |
REAL | 重要性权重 (0-1) |
session_id |
TEXT | 关联会话 |
created_at |
TEXT | 创建时间 |
updated_at |
TEXT | 更新时间 |
配套 FTS5 全文索引虚拟表 memory_fts(key, content),用于关键词搜索,通过触发器自动同步。
scheduled_jobs 表
| 字段 | 类型 | 说明 |
|---|---|---|
id |
TEXT PK | 任务 UUID |
name |
TEXT | 任务名称 |
schedule |
TEXT | 调度规则 JSON(at/every/cron) |
prompt |
TEXT | 任务提示词 |
channel |
TEXT | 执行渠道 |
chat_id |
TEXT | 目标对话 |
model |
TEXT | 可选模型标记;当前会存储/展示,但 Scheduler 执行仍使用默认 Agent 模型 |
enabled |
INTEGER | 是否启用 (1/0) |
delete_after_run |
INTEGER | 执行后自动删除 (1/0) |
next_run_at |
INTEGER | 下次执行时间 |
last_run_at |
INTEGER | 上次执行时间 |
last_status |
TEXT | 上次执行状态 |
last_error |
TEXT | 上次错误信息 |
locked_at |
INTEGER | 本次领取时间 |
lock_owner |
TEXT | 领取任务的 Scheduler owner UUID |
lease_until |
INTEGER | 租约到期时间;进程崩溃后允许其他实例重新领取 |
created_at |
INTEGER | 创建时间(Unix 毫秒) |
updated_at |
INTEGER | 更新时间(Unix 毫秒) |
Scheduler 使用原子 UPDATE ... RETURNING 领取到期任务。任务结果、下次运行时间和租约释放在同一事务中提交,并校验 owner,防止过期 worker 覆盖已恢复的任务。
job_runs 表
| 字段 | 类型 | 说明 |
|---|---|---|
id |
INTEGER PK | 自增 ID |
job_id |
TEXT FK | 关联任务,外键关联 scheduled_jobs(id) |
started_at |
INTEGER | 开始时间 |
finished_at |
INTEGER | 结束时间 |
status |
TEXT | 执行状态 |
output |
TEXT | 执行输出 |
error |
TEXT | 错误信息 |
duration_ms |
INTEGER | 耗时(毫秒) |
llm_calls 表
记录所有 LLM API 调用的请求/响应详情,自动保留最近 1000 条。
| 字段 | 类型 | 说明 |
|---|---|---|
id |
INTEGER PK | 自增 ID |
created_at |
INTEGER | 调用时间 |
provider |
TEXT | 提供商类型 |
model |
TEXT | 模型名称 |
request_body |
TEXT | 请求体 JSON |
response_body |
TEXT | 响应体 JSON |
error |
TEXT | 错误信息 |
duration_ms |
INTEGER | 耗时(毫秒) |
request_body/response_body 可能包含用户内容,排障和导出数据库时应按敏感数据处理。