# Jarvis 个人 AI 助理 — 设计规格书

> 版本：v1.0
> 日期：2026-03-20
> 作者：Jarvis 设计团队

---

## 1. 项目概述

### 1.1 项目目标

构建一个拟人化的个人 AI 助理系统，代号 **Jarvis**。核心目标是打造一个真正"懂你"的智能体 —— 理解你的知识体系、工作安排和个人偏好，而不仅仅是关键词匹配回答问题。

### 1.2 核心价值

- **知识回溯能力** — 基于 LlamaIndex Node 关系 + 知识图谱双层架构，确保 AI 真正理解你的知识和工作的内在联系
- **拟人化协作** — 多 Agent 角色协同，每个角色有独立职责，像真实团队成员一样交流
- **全端覆盖** — Web + Android 双端，随时随地与 Jarvis 对话
- **本地部署** — 所有数据存储在 NAS，数据完全自主可控

---

## 2. 技术栈

| 层级 | 技术选型 | 说明 |
|------|---------|------|
| **Web 前端** | Vue 3 + TypeScript | Composition API，响应式 UI |
| **移动端** | Kotlin (Android) | Jetpack Compose，轻量连接器 |
| **后端框架** | FastAPI (Python 3.12+) | 高性能 ASGI，支持 async |
| **Agent 框架** | LangGraph | 多 Agent 编排、工具调用、状态机流转 |
| **LLM 适配器** | LangChain Claude / OpenAI / Ollama | 可切换，不影响上层逻辑 |
| **知识库框架** | LlamaIndex | Node 关系索引、语义检索 |
| **向量数据库** | ChromaDB | 轻量级向量存储 |
| **关系数据库** | SQLite | 轻量数据持久化 |
| **定时任务** | APScheduler | 定时任务调度 |
| **部署环境** | NAS (本地) | Docker 容器化部署 |

---

## 3. 系统架构

### 3.1 整体架构图

```
┌─────────────────────────────────────────────────────┐
│                    用户端                            │
│  ┌──────────────────┐    ┌──────────────────┐      │
│  │    Web 前端       │    │  Android App     │      │
│  │   (Vue 3 + TS)   │    │  (Kotlin)        │      │
│  └────────┬─────────┘    └────────┬─────────┘      │
└───────────┼────────────────────────┼─────────────────┘
            │                        │
            │  HTTP / WebSocket       │
            └────────┬────────────────┘
                     │
┌────────────────────▼─────────────────────────────────┐
│               FastAPI 后端服务                        │
│                 (NAS Docker 容器)                      │
│                                                       │
│  ┌───────────────────────────────────────────────┐   │
│  │              多 Agent 调度系统                  │   │
│  │  ┌─────────┐                                   │   │
│  │  │ 主Agent │ ◄── 协调者，统一入口               │   │
│  │  │(调度员) │                                   │   │
│  │  └────┬────┘                                   │   │
│  │       ├──► 规划Agent ──► 任务拆解、计划制定    │   │
│  │       ├──► 执行Agent ──► 工具调用、任务执行     │   │
│  │       ├──► 知识管理员 ──► 知识库管理、图谱更新  │   │
│  │       └──► 分析师Agent ──► 数据分析、报告生成  │   │
│  │       └──► [可扩展] ────► 新角色注册机制        │   │
│  └───────────────────────────────────────────────┘   │
│                                                       │
│  ┌─────────────┐  ┌─────────────┐  ┌──────────────┐ │
│  │  LLM 适配器  │  │ 定时任务    │  │  论坛扫描    │ │
│  │ LangChain   │  │ 引擎        │  │  引擎        │ │
│  │ (可切换)     │  │            │  │              │ │
│  └─────────────┘  └─────────────┘  └──────────────┘ │
└──────────────────────────┬────────────────────────────┘
                           │
     ┌─────────────────────┼─────────────────────┐
     │                     │                     │
┌────▼────┐  ┌─────────────▼────┐  ┌──────────▼────────┐
│ ChromaDB│  │      SQLite        │  │    文件存储         │
│向量数据库│  │    (关系数据)      │  │  (NAS 共享目录)     │
└─────────┘  └───────────────────┘  └────────────────────┘
```

### 3.2 通信模式

- **协作式 + 主 Agent 协调**
- 主 Agent 作为统一入口，接收用户请求后分发到子 Agent
- 子 Agent 完成任务后汇总结果给主 Agent
- 子 Agent 之间可通过主 Agent 传递信息
- 支持新增 Agent 注册到系统中

---

## 4. 核心功能模块

### 4.1 多 Agent 调度系统

#### Agent 角色定义

| Agent | 职责 | 核心能力 |
|-------|------|---------|
| **主Agent (Jarvis)** | 协调调度、对话入口 | 意图识别、任务分发、结果汇总 |
| **规划Agent** | 制定每日计划 | 任务拆解、优先级排序、时间规划 |
| **执行Agent** | 执行具体任务 | 工具调用、进度追踪、结果反馈 |
| **知识管理员** | 管理知识库和图谱 | 文档索引、实体提取、图谱更新 |
| **分析师Agent** | 分析工作数据 | 数据统计、趋势分析、报告生成 |

#### Agent 扩展机制

- 通过配置文件或 API 注册新 Agent
- 每个 Agent 有独立的 system prompt 和工具集
- 新增 Agent 自动出现在对话上下文中

### 4.2 知识库系统

#### 文档处理流程

```
用户上传文件
    │
    ▼
文件解析
├── Markdown → 直接读取
├── PDF → PDF 解析（PyMuPDF）
├── DOCX → python-docx
└── TXT → 直接读取
    │
    ▼
LlamaIndex Node 构建
├── 按标题层级切分（Header-based Chunking）
├── 保留 Node 关系链表（PARENT, PREVIOUS, NEXT, SOURCE）
└── 每个 Node 包含 metadata（标题、章节、页码）
    │
    ▼
向量存储 → ChromaDB
    │
    ▼
知识图谱构建
├── LLM 实体识别（从 Node 内容中提取）
├── LLM 关系抽取（实体之间的关系）
└── 存入 SQLite（nodes + edges 表）
```

#### 检索流程（Small-to-Big 策略）

```
用户提问
    │
    ▼
ChromaDB 向量检索
├── 用小 Chunk 精确匹配
└── 返回多个相关 Node
    │
    ▼
上下文回溯
├── 顺着 Node 关系找到完整章节（父 Node）
└── 附加上下文给 LLM
    │
    ▼
LLM 生成回答
```

### 4.3 知识图谱系统

#### 图谱数据结构

```sql
-- 知识图谱节点表
knowledge_graph_nodes (
    id TEXT PRIMARY KEY,
    user_id TEXT,            -- 用户隔离（支持多用户）
    entity_type TEXT,        -- 实体类型：PERSON / EVENT / CONCEPT / OBJECT
    entity_name TEXT,        -- 实体名称
    description TEXT,        -- 实体描述
    source_doc_id TEXT,      -- 来源文档
    source_node_id TEXT,     -- 来源 Node
    importance REAL,         -- 重要程度 (0-1)
    created_at TIMESTAMP,
    updated_at TIMESTAMP
)

-- 知识图谱边表
knowledge_graph_edges (
    id TEXT PRIMARY KEY,
    user_id TEXT,            -- 用户隔离
    source_node_id TEXT,
    target_node_id TEXT,
    relation_type TEXT,      -- 关系类型：包含 / 依赖 / 相关 / 导致 / 属于
    weight REAL,             -- 关系权重 (0-1)
    created_at TIMESTAMP,
    FOREIGN KEY (source_node_id) REFERENCES knowledge_graph_nodes(id),
    FOREIGN KEY (target_node_id) REFERENCES knowledge_graph_nodes(id)
)
```

#### 图谱更新机制

- **事件驱动**：文档上传/任务变更时实时触发
- **定时同步**：每日凌晨增量扫描，防止遗漏
- **手动触发**：用户可主动要求重建图谱
- **增量检测**：基于文件 mtime + 内容 hash 判断文档是否变化

#### 数据模型

```sql
-- 文档表
documents (
    id TEXT PRIMARY KEY,
    user_id TEXT,            -- 用户隔离
    filename TEXT,
    file_type TEXT,          -- pdf / markdown / docx / txt
    file_path TEXT,          -- NAS 存储路径
    file_hash TEXT,          -- 内容 hash，用于增量检测
    summary TEXT,            -- AI 生成的文档摘要
    file_size INTEGER,
    created_at TIMESTAMP,
    updated_at TIMESTAMP
)

-- 文档分块表（LlamaIndex Node 映射）
document_chunks (
    id TEXT PRIMARY KEY,
    user_id TEXT,            -- 用户隔离
    document_id TEXT,
    chunk_index INTEGER,     -- 在文档中的顺序
    content TEXT,            -- 原始文本内容
    metadata JSON,           -- LlamaIndex Node metadata（包含 title、chapter、relationships 等）
    embedding_id TEXT,       -- ChromaDB 中的向量 ID
    created_at TIMESTAMP,
    FOREIGN KEY (document_id) REFERENCES documents(id)
)
```

#### 图谱可视化

- 前端 Web 端展示交互式知识图谱
- 节点可点击查看详情
- 支持按类型筛选、按时间筛选
- 支持搜索实体名称

### 4.4 论坛系统

#### 功能设计

- **发布内容** — 你在论坛发布想法、指令、问题
- **AI 扫描** — Jarvis 定时扫描论坛内容
- **任务识别** — 识别可执行的任务转为看板任务
- **互动回应** — AI 在帖子下回复，像团队成员讨论

#### 数据模型

```sql
forum_posts (
    id TEXT PRIMARY KEY,
    user_id TEXT,          -- 发帖用户
    title TEXT,
    content TEXT,
    parent_id TEXT,        -- 回复的帖子 ID（自关联，支持嵌套回复）
    status TEXT,           -- pending / processing / completed
    created_at TIMESTAMP,
    updated_at TIMESTAMP
)
```

### 4.5 看板系统

#### 功能设计

- **任务管理** — 创建、编辑、删除任务
- **状态流转** — 待办 / 进行中 / 已完成 / 已取消
- **优先级** — P0 / P1 / P2 / P3
- **AI 凌晨分析** — 每日凌晨分析完成情况，规划次日任务
- **AI 建议** — 根据你的工作模式给出优先级建议

#### 数据模型

```sql
tasks (
    id TEXT PRIMARY KEY,
    user_id TEXT,          -- 用户隔离
    title TEXT,
    description TEXT,
    priority TEXT,         -- P0 / P1 / P2 / P3
    status TEXT,           -- todo / in_progress / done / cancelled
    deadline TIMESTAMP,
    created_at TIMESTAMP,
    updated_at TIMESTAMP,
    completed_at TIMESTAMP
)

task_history (
    id TEXT PRIMARY KEY,
    task_id TEXT,
    action TEXT,           -- created / updated / completed / cancelled
    old_value TEXT,
    new_value TEXT,
    timestamp TIMESTAMP,
    FOREIGN KEY (task_id) REFERENCES tasks(id)
)
```

### 4.6 Markdown 编辑器

#### 功能设计

- 浏览器端在线编辑 Markdown
- 支持实时预览
- AI 辅助功能：
  - AI 续写
  - AI 润色
  - AI 总结
- 自动保存到知识库
- 支持创建新文档和编辑已有文档

### 4.7 定时任务引擎

#### 内置定时任务

| 任务 | 触发时间 | 功能 |
|------|---------|------|
| 论坛扫描 | 可配置（默认每小时） | 扫描新帖子，识别可执行任务 |
| 图谱增量同步 | 每日凌晨 2:00 | 扫描文档变化，更新知识图谱 |
| 每日规划 | 每日早上 8:00 | 分析昨日任务完成情况，规划当日 |
| 知识摘要 | 每周一凌晨 | 生成上周工作摘要 |

---

## 5. 数据库设计

### 5.1 ER 图

```
users
  │
  ▼
documents ──► document_chunks ──► embeddings (ChromaDB)
  │
  ▼
knowledge_graph_nodes ◄──► knowledge_graph_edges
  │
  ▼
tasks ◄─── task_history
  │
  ▼
forum_posts (自关联: parent_id ──► forum_posts.id)
  │
  ▼
conversations ──► messages
```

### 5.2 核心表结构

| 表名 | 说明 |
|------|------|
| `users` | 用户信息 |
| `documents` | 上传的文档元数据 |
| `document_chunks` | LlamaIndex Node 映射（保留关系） |
| `knowledge_graph_nodes` | 知识图谱节点 |
| `knowledge_graph_edges` | 知识图谱边 |
| `tasks` | 看板任务 |
| `task_history` | 任务变更历史 |
| `forum_posts` | 论坛帖子（含回复，通过 parent_id 自关联） |
| `conversations` | 主对话会话 |
| `messages` | 对话消息 |
| `knowledge_summaries` | 历史对话摘要 |

#### 对话数据模型

```sql
conversations (
    id TEXT PRIMARY KEY,
    user_id TEXT,            -- 用户隔离
    title TEXT,
    created_at TIMESTAMP,
    updated_at TIMESTAMP
)

messages (
    id TEXT PRIMARY KEY,
    conversation_id TEXT,
    role TEXT,               -- user / assistant
    content TEXT,
    model TEXT,              -- 使用的模型
    created_at TIMESTAMP,
    FOREIGN KEY (conversation_id) REFERENCES conversations(id)
)

knowledge_summaries (
    id TEXT PRIMARY KEY,
    user_id TEXT,
    period TEXT,             -- daily / weekly / monthly
    period_start DATE,
    period_end DATE,
    summary TEXT,            -- 摘要内容
    created_at TIMESTAMP
)
```

---

## 6. API 设计

### 6.1 主要 API 端点

> **通用规则**：所有列表接口支持分页参数 `page`（页码，默认 1）和 `page_size`（每页数量，默认 20）。返回格式统一为 `{ data: [...], total: N, page: X, page_size: Y }`。

#### 认证接口
- `POST /api/auth/register` — 用户注册
- `POST /api/auth/login` — 用户登录，返回 JWT Token
- `POST /api/auth/refresh` — 刷新 Token
- `POST /api/auth/logout` — 登出

#### 对话接口
- `POST /api/chat` — 发送消息，获取 AI 回复
- `GET /api/conversations?page=&page_size=` — 获取对话历史列表
- `GET /api/conversations/{id}/messages?page=&page_size=` — 获取对话消息

#### 知识库接口
- `POST /api/documents/upload` — 上传文档（支持 multipart/form-data，最大 50MB）
- `GET /api/documents?page=&page_size=` — 获取文档列表
- `DELETE /api/documents/{id}` — 删除文档
- `POST /api/documents/{id}/reindex` — 重建索引（幂等操作）
- `POST /api/search` — 语义搜索
  - 请求体：`{ "query": "搜索内容", "top_k": 5, "filters": {} }`

#### 知识图谱接口
- `GET /api/knowledge-graph` — 获取图谱数据
- `POST /api/knowledge-graph/rebuild` — 触发图谱重建（幂等，带锁防止并发）
- `GET /api/knowledge-graph/search?q=` — 搜索实体

#### 看板接口
- `GET /api/tasks?page=&page_size=&status=` — 获取任务列表
- `POST /api/tasks` — 创建任务
- `PUT /api/tasks/{id}` — 更新任务
- `DELETE /api/tasks/{id}` — 删除任务

#### 论坛接口
- `GET /api/forum/posts?page=&page_size=` — 获取帖子列表
- `POST /api/forum/posts` — 发布帖子
- `GET /api/forum/posts/{id}` — 获取帖子详情（含回复树）
- `POST /api/forum/posts/{id}/reply` — 回复帖子

#### Markdown 编辑器接口
- `GET /api/notes?page=&page_size=` — 获取笔记列表
- `POST /api/notes` — 创建笔记
- `PUT /api/notes/{id}` — 更新笔记
- `DELETE /api/notes/{id}` — 删除笔记
- `POST /api/notes/{id}/ai-assist` — AI 辅助操作
  - 请求体：`{ "action": "continue" | "polish" | "summarize" }`

### 6.2 WebSocket 实时通信

消息格式统一为 JSON：
```json
// 通用消息结构
{
  "type": "chat_message" | "graph_update" | "task_update",
  "payload": { ... },
  "timestamp": "ISO8601"
}
```

- `/ws/chat` — 实时对话（流式输出）
- `/ws/knowledge-graph` — 图谱更新实时推送
- `/ws/tasks` — 任务状态变化实时推送

---

## 7. 前端设计

### 7.1 Web 端页面结构

```
┌─────────────────────────────────────────┐
│  顶部导航栏                              │
│  [对话] [知识库] [图谱] [看板] [论坛] [笔记] │
└─────────────────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────────┐
│                                         │
│           主内容区域                      │
│                                         │
└─────────────────────────────────────────┘
```

### 7.2 核心页面

| 页面 | 功能 |
|------|------|
| **对话页** | 主对话界面，Jarvis 头像，消息列表，输入框 |
| **知识库页** | 文档列表，上传入口，搜索框 |
| **图谱页** | 交互式知识图谱，节点详情侧边栏 |
| **看板页** | 任务看板（Kanban 布局），AI 规划建议 |
| **论坛页** | 帖子列表，发帖入口，AI 回复展示 |
| **笔记页** | Markdown 编辑器，笔记列表 |

### 7.3 Android 端

- 独立对话窗口，直接与 Jarvis 对话
- 任务查看和简单编辑
- 推送通知（每日规划提醒、任务到期提醒）
- 核心是**对话遥控**，重度操作建议用 Web 端

---

## 8. 部署架构

### 8.1 NAS 部署方案

```
┌──────────────────────────────────────────────────┐
│                    NAS                            │
│                                                   │
│  ┌────────────────────────────────────────────┐  │
│  │              Docker Compose                 │  │
│  │                                            │  │
│  │  ┌──────────────┐  ┌──────────────────┐   │  │
│  │  │  Jarvis API   │  │   ChromaDB       │   │  │
│  │  │  (FastAPI)    │  │   (向量数据)     │   │  │
│  │  └──────────────┘  └──────────────────┘   │  │
│  │                                            │  │
│  │  ┌──────────────┐  ┌──────────────────┐   │  │
│  │  │   SQLite     │  │   文件存储        │   │  │
│  │  │  (关系数据)   │  │  /data/files     │   │  │
│  │  └──────────────┘  └──────────────────┘   │  │
│  └────────────────────────────────────────────┘  │
│                                                   │
│  NAS 共享目录 /data 挂载到容器                     │
└──────────────────────────────────────────────────┘
```

### 8.2 环境变量配置

```env
# LLM 配置
LLM_PROVIDER=claude  # claude / deepseek / ollama
CLAUDE_API_KEY=xxx
DEEPSEEK_API_KEY=xxx
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3

# 数据库配置
DATABASE_URL=sqlite+aiosqlite:///data/jarvis.db
CHROMA_PERSIST_DIR=/data/chroma

# 文件存储
FILE_STORAGE_DIR=/data/files

# 定时任务配置
FORUM_SCAN_INTERVAL=3600  # 秒
DAILY_PLAN_TIME=08:00
GRAPH_SYNC_TIME=02:00

# JWT 认证
JWT_SECRET=xxx
JWT_ALGORITHM=HS256
```

---

## 9. 安全设计

- **JWT 认证** — 所有 API 需要 Token 验证
- **数据加密** — SQLite 数据库可配置加密
- **文件隔离** — 用户上传文件存储在独立目录
- **API 限流** — 防止 API 滥用
- **敏感信息** — API Key 等存储在环境变量，不进入代码库

---

## 10. 未来扩展方向

- **多模态支持** — 图片、音频、视频解析
- **更多 Agent** — 按领域细分的专业助手
- **插件系统** — 第三方工具集成
- **团队协作** — 多用户知识共享
- **云端同步** — 异地数据备份

---

## 11. 开发阶段建议

> **注意**：Phase 3 的知识图谱依赖 Phase 1 的知识库基础设施。Phase 1-3 为核心 MVP，需按顺序开发。

| 阶段 | 内容 | 优先级 |
|------|------|--------|
| **Phase 1** | 基础框架搭建、对话系统、知识库上传检索 | P0 |
| **Phase 2** | 看板系统、论坛系统、Markdown 编辑器 | P0 |
| **Phase 3** | 知识图谱构建与可视化、多 Agent 协同 | P0 |
| **Phase 4** | 定时任务引擎、AI 每日规划功能 | P1 |
| **Phase 5** | Android App 开发 | P1 |
| **Phase 6** | 优化与扩展 | P2 |

---

*本文档为 Jarvis 个人 AI 助理系统的初始设计规格，将根据开发进展持续更新。*
