124 lines
4.4 KiB
Markdown
124 lines
4.4 KiB
Markdown
# PicoBot 数据库表结构
|
||
|
||
数据库为 SQLite,默认位于 workspace 下的 `picobot.db`。
|
||
|
||
## 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 | 最后活跃时间 |
|
||
| `message_count` | INTEGER | 消息计数 |
|
||
| `routing_info` | TEXT | 路由信息 |
|
||
| `deleted_at` | INTEGER | 软删除时间戳 |
|
||
| `last_consolidated_at` | INTEGER | 上次记忆归并时间 |
|
||
| `last_compressed_message_at` | INTEGER | 上次上下文压缩消息序号 |
|
||
|
||
## 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 返回的推理内容(如有) |
|
||
|
||
## 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(once/every/cron) |
|
||
| `prompt` | TEXT | 任务提示词 |
|
||
| `channel` | TEXT | 执行渠道 |
|
||
| `chat_id` | TEXT | 目标对话 |
|
||
| `model` | TEXT | 使用的模型(可选) |
|
||
| `enabled` | INTEGER | 是否启用 (1/0) |
|
||
| `delete_after_run` | INTEGER | 执行后自动删除 (1/0) |
|
||
| `next_run_at` | INTEGER | 下次执行时间 |
|
||
| `last_run_at` | INTEGER | 上次执行时间 |
|
||
| `last_status` | TEXT | 上次执行状态 |
|
||
| `last_error` | TEXT | 上次错误信息 |
|
||
|
||
## 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 | 耗时(毫秒) |
|