AstroResearch/docs/database.md
Asfmq f6df9d8136 feat: Agent 思考模式前端可控、子代理全链路持久化、权限系统、工具 ID 追踪体系、前端面板与文档架构重构
- AgentConfig/LlmClient 新增 enable_thinking 参数,前端 SSE 请求传递 thinking
  开关,仅千问/DashScope 时启用
  - 完善权限系统,支持细粒度的权限控制和用户权限申请
  - delegate_research 工具重命名为 subagent,SubAgentTool/SubAgentRunner 重构
  - 子代理消息(system/user/assistant/tool)持久化到 agent_messages 表,带 agent_name 标识
  - 子代理活动日志(工具调用列表+思考摘要)注入返回结果,Hooks 获得正确 session_id 和 subagent_name
  - LLM 工具调用 ID 回退生成 UUID(llm.rs),ToolCall/ToolResult SSE 事件增加 id/tool_call_id 双字段
  - ToolContext 扩展 session_id/sse_tx/enable_thinking 字段,executor 统一注入而非构造函数传参
  - agent_messages 新增 metadata+raw_json 列,agent_sessions 暴露 summary 字段
  - 删除文件级 transcript 快照(compact.rs),改为依赖 DB 持久化
  - ResearchAgentPanel 重写:TimelineItem 类型替代 StreamStep,支持会话历史回放
  - 新增 AgentMetricsPanel/AskUserQuestionCard/AuditLogViewer 三个前端组件,types.ts 完整类型定义
  - docs/architecture/ 分层重组:概览/核心模块/核心工作流 + agent/ 子目录 11 篇专题文档
  - docs/api.md 补充 RAG/Target/Agent 接口,docs/development.md 新建开发指南
  - .env.example 完全重写,补充 FALLBACK_MODEL 等变量说明
2026-06-18 01:21:02 +08:00

7.2 KiB
Raw Blame History

AstroResearch Database Schema / 数据库设计

AstroResearch 使用轻量级、零配置的 SQLite 数据库作为持久化存储。数据库文件默认保存在项目根目录下的 astro_research.db(可通过 .env 中的 DATABASE_URL 配置),由 Rust 中的 sqlx 驱动管理并自动执行迁移。


1. 实体关系图 (Entity-Relationship Diagram)

erDiagram
    PAPERS {
        text bibcode PK
        text title
        text authors "JSON Array"
        text year
        text pub "Journal/Publisher"
        text keywords "JSON Array"
        text abstract
        text doi
        text arxiv_id
        integer citation_count
        integer reference_count
        text doctype "文献类型"
        text pdf_path "PDF 物理路径 或 error:诊断"
        text html_path "HTML 物理路径 或 error:诊断"
        text markdown_path "Markdown 物理路径"
        text translation_path "翻译文件物理路径"
        datetime created_at
    }

    NOTES {
        integer id PK
        text bibcode FK
        integer paragraph_index
        text note_text
        text highlight_color
        text selected_text
        datetime created_at
    }

    CITATIONS_REFERENCES {
        text source_bibcode PK
        text target_bibcode PK
    }

    SYNC_QUERIES {
        integer id PK
        text query "检索关键词"
        text source "数据源"
        integer limit_count "拉取上限"
        datetime last_run "最近运行时间"
        datetime created_at "创建时间"
        UNIQUE_query_source_limit "唯一去重约束"
    }

    AGENT_SESSIONS {
        text session_id PK
        text title
        text model
        integer turn_count
        datetime deleted_at
    }

    AGENT_TASKS {
        integer id PK
        text session_id FK
        text task_id
        text content
        text status
        text blocked_by "JSON Array — DAG 依赖"
        text owner "分配目标 agent 名称"
    }

    AGENT_AUDIT_LOG {
        integer id PK
        text session_id FK
        integer step
        text tool_name
        text status "OK / FAIL / SESSION_STOP"
        integer elapsed_ms
        text output_preview
        text agent_name
    }

    AGENT_TEAM_MEMBERS {
        integer id PK
        text session_id FK
        text agent_name
        text agent_role
        text status "spawning / active / idle / shutdown"
    }

    PAPERS ||--o{ NOTES : "has"
    PAPERS ||--o{ CITATIONS_REFERENCES : "cites / cited_by"
    AGENT_SESSIONS ||--o{ AGENT_TASKS : "owns"
    AGENT_SESSIONS ||--o{ AGENT_AUDIT_LOG : "records"
    AGENT_SESSIONS ||--o{ AGENT_TEAM_MEMBERS : "members"

2. 数据表结构详述 (Table Schema Details)

2.1 papers 表 (文献元数据)

存储文献的核心元数据和本地物理存储路径。

  • 特殊字段说明
    • pdf_path / html_path:正常情况下存储相对路径(如 library/PDF/2024arXiv.pdf)。当下载失败时,会以 error: 前缀存储诊断信息(如 error:Cloudflare 拦截)。特殊值 error:no_resource 表示用户手动标记了"无有效全文资源"。
    • doctype:文献类型标识,如 articleeprintproceedingsphdthesiscatalogsoftwarecircularbook 等。
  • 索引
    • idx_papers_doi -> 基于 doi
    • idx_papers_arxiv_id -> 基于 arxiv_id

2.2 citations_references 表 (引文与参考文献拓扑)

多对多关联表,存储文献之间的引用网络(即拓扑星系图的基础数据)。

  • 复合主键(source_bibcode, target_bibcode)
  • 索引
    • idx_citations_ref_source -> 优化以 source_bibcode 查询参考文献
    • idx_citations_ref_target -> 优化以 target_bibcode 查询被引文献

2.3 notes 表 (高亮与阅读笔记)

存储学者在阅读器中对特定段落创建的高亮和笔记。

  • 外键bibcode 级联删除 (ON DELETE CASCADE)。
  • 索引
    • idx_notes_bibcode -> 优化单篇文献的笔记列表查询。

2.4 sync_queries 表 (同步检索条件)

存储用户保存的批量同步检索条件,支持快速重新同步。

  • 唯一约束UNIQUE(query, source, limit_count) 确保相同条件的检索不会重复保存。

2.5 agent_sessions 表 (Agent 会话)

存储 ReAct 智能体对话会话的元数据,支持软删除 (deleted_at)。

  • 每条会话关联 agent_messages 表存储对话历史与工具调用记录。
  • 索引idx_agent_sessions_created_at (ORDER BY updated_at DESC)。

2.6 agent_tasks 表 (Agent 任务追踪)

持久化智能体的结构化待办任务,支持 DAG 依赖模式。

  • blocked_byJSON 数组,前置任务 ID 列表。
  • status 生命周期:pendingin_progresscompleted
  • owner:分配目标 agent 名称(多 Agent 团队协作路由)。
  • 索引idx_agent_tasks_sessionidx_agent_tasks_statusidx_agent_tasks_session_task (UNIQUE)。

2.7 agent_audit_log 表 (Agent 工具审计)

记录所有工具调用的审计信息:工具名称、执行状态、耗时 (ms)、输出预览。

  • statusOK / FAIL / SESSION_STOP
  • agent_name:区分 lead/子代理/teammate 的调用来源。
  • 用途GET /api/chat/metrics 聚合指标、会话审计回溯。

2.8 agent_team_members 表 (多 Agent 团队)

管理多智能体团队中每个成员的生命周期。

  • statusspawningactiveidleshutdown
  • agent_role:区分 team lead / teammate 等角色。
  • 唯一约束UNIQUE(session_id, agent_name)

3. 数据库迁移说明

迁移脚本存放在 migrations/ 下,服务启动时(src/main.rs)会自动调用 sqlx::migrate!().run(&pool).await 自动部署:

迁移文件 说明
20260608000000_init.sql 初始化 paperscitations_references 结构。
20260608000001_notes.sql 添加 notes 笔记高亮表,并为关联建立级联删除。
20260608000002_add_doctype.sql papers 表新增 doctype 文献类型字段。
20260608000003_sync_features.sql 添加 sync_queries 同步检索条件表,支持唯一去重。
20260616000000_agent_tasks.sql 智能体任务持久化表,支持 DAG 依赖与状态生命周期。
20260617000000_agent_audit_log.sql 智能体工具调用审计日志表。
20260618000000_agent_identity.sql Agent 身份隔离:消息/审计归属、agent_team_members 团队注册表。

4. 错误诊断存储约定

系统使用 papers 表的 pdf_pathhtml_path 字段的双重语义来同时存储正常路径和错误诊断:

字段值模式 含义 前端展示
NULL 尚未尝试下载 琥珀色"未下载"角标
library/PDF/xxx.pdf 下载成功,正常物理路径 蓝色"已下载"角标
error:具体原因 下载失败,原因为前缀后的文本 红色"下载失败"角标,悬浮显示原因
error:no_resource 用户手动标记为无有效全文资源 灰色"无资源"角标

health_check 工具在 --fix 模式下会清理损坏文件并将路径重置为 NULL,但不会清除 error: 前缀的记录(以保留诊断线索)。