docs: 重构 README 文档,整理已实现和待实现功能
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m37s

- 创建 backend/app/README.md 主文档
- 整理已实现功能(带  标记)
- 列出待实现功能(带 🚧 标记)
- 删除 agent_subgraphs/ 下的旧 README 文件
This commit is contained in:
2026-04-24 23:05:03 +08:00
parent 8db63e7a8d
commit 851d52ed8d
5 changed files with 265 additions and 2196 deletions

View File

@@ -1,391 +0,0 @@
# 通讯录子图 (Contact Subgraph)
该子图负责处理通讯录管理、邮件读取与发送等功能,基于 LangGraph 状态机编排多阶段工作流,支持联系人 CRUD、IMAP 邮箱绑定、邮件审核发送等核心能力。子图设计遵循"安全优先、审核强制、隐私保护"原则,通过敏感信息加密和人工审核保障数据安全。
> **使用公共工具**意图理解、人工审核、格式化输出、检查点持久化、条件路由、LLM 调用、数据库工具、状态基类
---
## 🎯 核心架构
### 技术栈
| 层级 | 组件 | 说明 |
|:-----|:-----|:-----|
| **编排框架** | LangGraph StateGraph | 状态机驱动的子图工作流编排,支持中断恢复 |
| **LLM 服务** | 智谱 AI / DeepSeek API | 意图理解、邮件草稿生成、联系人信息提取(使用公共 LLM 工具) |
| **关系存储** | PostgreSQL | 联系人、邮箱配置持久化(使用公共数据库工具) |
| **邮件协议** | imaplib / smtplib | 邮件读取与发送 |
| **加密存储** | cryptography | 邮箱密码等敏感信息加密 |
### 子图分层架构
```
┌─────────────────────────────────────────────────────────────────┐
│ 主图 (Main Graph) │
└──────────────────────────────┬──────────────────────────────────┘
│ 状态映射 / 结果聚合
┌─────────────────────────────────────────────────────────────────┐
│ 通讯录子图接口层 │
│ - 状态转换:主状态 ↔ 子图状态(使用公共状态基类) │
│ - 错误传播与优雅降级 │
└──────────────────────────────┬──────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 工作流编排层 │
│ - 节点调度与条件路由(使用公共路由工具) │
│ - 人工审核节点暂停/恢复管理(使用公共审核工具) │
│ - 状态持久化与检查点(使用公共检查点工具) │
└──────────────────────────────┬──────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 节点层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │
│ │意图理解 │ │联系人CRUD│ │邮件读取 │ │草稿生成 │ │人工审核│ │
│ │(公共工具)│ │ │ │ │ │ │ │(公共) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │邮件发送 │ │智能嗅探 │ │格式输出 │ │
│ │ │ │ │ │(公共) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└──────────────────────────────┬──────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 工具层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │数据库工具│ │IMAP工具 │ │SMTP工具 │ │加密工具 │ │
│ │(公共) │ │ │ │ │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
### 数据流总览
通讯录子图根据意图类型分支执行,关键操作前强制人工审核。
```
用户请求
┌─────────────┐
│ 意图理解 │ ← 使用公共意图理解工具
└──────┬──────┘
├──────────┬──────────┬──────────┬──────────┐
▼ ▼ ▼ ▼ ▼
联系人CRUD 邮件读取 邮件发送 智能嗅探 列表查询
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
数据库操作 IMAP读取 草稿生成 信息提取 结果展示
│ │ │ │ │
│ │ ▼ │ │
│ │ 人工审核 │ │
│ │ (公共) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ SMTP发送 │ │
│ │ │ │ │
└──────────┴──────────┴──────────┴──────────┘
格式输出 ← 使用公共格式化工具
返回主图
```
---
## 📂 模块与文件结构
```
app/contact/
├── __init__.py
├── graph.py # 子图构建入口,定义状态图与路由
├── state.py # 子图状态定义(继承公共状态基类)
├── nodes/ # 节点实现
│ ├── __init__.py
│ ├── crud.py # 联系人CRUD节点
│ ├── email_read.py # 邮件读取节点
│ ├── draft.py # 邮件草稿生成节点
│ ├── email_send.py # 邮件发送节点
│ └── sniff.py # 智能嗅探节点
├── tools/ # 子图特有工具集
│ ├── imap.py # IMAP邮件读取工具
│ ├── smtp.py # SMTP邮件发送工具
│ └── crypto.py # 敏感信息加密工具
└── persistence/ # (使用公共检查点工具,无需单独实现)
```
> **注意**:以下模块使用公共工具,无需单独实现:
> - 意图理解节点 → 使用 `agent_subgraphs.common.intent`
> - 人工审核节点 → 使用 `agent_subgraphs.common.human_loop`
> - 格式输出节点 → 使用 `agent_subgraphs.common.format`
> - 检查点持久化 → 使用 `agent_subgraphs.common.checkpoint`
> - 条件路由 → 使用 `agent_subgraphs.common.routing`
> - LLM 调用 → 使用 `agent_subgraphs.common.llm`
> - 数据库操作 → 使用 `agent_subgraphs.common.db`
---
## 🎯 演进路线与核心机制
### Level 1基础联系人管理
**核心机制**:联系人 CRUD 操作 + 基础列表查询。
- 使用 LLM 解析用户请求,提取联系人信息(姓名、电话、邮箱等)。
- 数据库存储联系人信息,支持增删改查。
- 支持按姓名模糊查询和列表展示。
**适用场景**:保存联系人、查询电话、修改信息等基础操作。
**实现指引**:意图理解节点识别 CRUD 类型,路由到对应节点。
### Level 2邮件读取与基础发送
**核心机制**IMAP 邮箱绑定 + 邮件列表读取 + 简单发送。
- 支持配置多个 IMAP/SMTP 邮箱账户。
- 读取收件箱邮件列表,展示主题、发件人、时间。
- 生成邮件草稿,人工审核后发送。
**适用场景**:查收邮件、发送简单邮件。
**实现指引**:邮箱密码加密存储,发送前强制人工审核。
### Level 3智能嗅探与上下文感知
**核心机制**:对话中自动识别联系人信息,主动询问是否保存。
- 在任意对话中监听"人名+联系方式"模式。
- 识别到潜在联系人信息时,主动询问用户是否保存。
- 支持确认后自动创建联系人记录。
**适用场景**:日常对话中自然保存联系人。
**实现指引**:与主图协作,在对话节点后插入嗅探检查点。
### Level 4邮件智能处理
**核心机制**:邮件内容理解 + 智能回复建议 + 批量处理。
- 读取邮件全文,理解内容意图。
- 基于邮件内容生成智能回复草稿。
- 支持邮件分类、标记、归档操作。
**适用场景**:邮件管理、智能回复。
**实现指引**:利用 LLM 进行邮件内容理解和回复生成。
### Level 5通讯录智能助理
**核心机制**:联系人关系图谱 + 智能推荐 + 多模态交互。
- 构建联系人关系网络,识别社交圈子。
- 基于历史交互推荐联系人。
- 支持名片扫描、语音输入等多模态交互。
**适用场景**:深度联系人管理、智能社交助理。
---
## 🔧 核心组件详解
### 1. 意图理解节点
**职责**:接收用户原始请求,区分联系人 CRUD、邮件读取、邮件发送、智能嗅探等意图类型。
**输入**:用户自然语言请求。
**输出**
- `intent_type`意图类别枚举contact_crud / email_read / email_send / sniff / list
- `extracted_info`:提取的关键信息(联系人姓名、邮件主题等)。
**实现要点**
- 使用 LLM 进行少样本分类,输出结构化 JSON。
- 关键词匹配兜底(如"保存"、"添加" → contact_crud
### 2. 联系人 CRUD 节点
**职责**:执行联系人的增删改查操作,与数据库交互。
**输入**:意图类型、提取的联系人信息。
**输出**
- `operation_result`:操作结果(成功/失败)。
- `contact_data`:操作后的联系人数据。
**实现要点**
- 使用 SQLAlchemy 与 PostgreSQL 交互。
- 支持部分字段更新(如只修改电话)。
- 删除操作前二次确认。
### 3. 邮件读取节点
**职责**:通过 IMAP 协议连接邮箱,读取邮件列表或单封邮件详情。
**输入**:邮箱配置、读取指令(列表/详情)。
**输出**
- `email_list`:邮件列表(主题、发件人、时间)。
- `email_content`:单封邮件详情(如需要)。
**实现要点**
- 支持配置多个邮箱账户。
- 密码使用 cryptography 加密存储。
- 分页读取邮件列表,避免一次性加载过多。
### 4. 邮件草稿生成节点
**职责**:根据用户指令生成邮件草稿,包含收件人、主题、正文。
**输入**:用户发送邮件的指令、上下文。
**输出**
- `draft_recipient`:收件人邮箱。
- `draft_subject`:邮件主题。
- `draft_body`:邮件正文。
**实现要点**
- 使用 LLM 生成自然流畅的邮件内容。
- 从通讯录智能匹配收件人邮箱。
- 支持多语言邮件生成。
### 5. 人工审核节点
**职责**:在邮件发送、联系人删除等关键操作前挂起,等待用户确认。
**输入**:待审核内容(邮件草稿、删除确认等)。
**输出**
- `user_approved`:是否通过审核。
- `user_modification`:用户修改内容(如有)。
**实现要点**
- 使用 LangGraph `interrupt` 机制实现挂起。
- 支持用户修改草稿后再次审核。
- 超时自动取消操作。
### 6. 邮件发送节点
**职责**:审核通过后,通过 SMTP 协议发送邮件。
**输入**:审核通过的邮件草稿。
**输出**
- `send_result`:发送结果。
- `sent_time`:发送时间。
**实现要点**
- 使用 smtplib 发送邮件。
- 支持抄送、密送。
- 发送失败重试机制。
### 7. 智能嗅探节点
**职责**:在对话中检测联系人信息,主动询问是否保存。
**输入**:用户对话历史。
**输出**
- `detected_contact`:检测到的潜在联系人信息。
- `should_ask`:是否应该询问用户。
**实现要点**
- 使用 NER 识别实体(人名、电话、邮箱)。
- 与已有联系人去重。
- 询问用户确认后自动保存。
---
## 🔀 条件路由详解
### 入口路由:意图分支
- **位置**:意图理解节点之后。
- **条件**
- `intent_type == "contact_crud"` → 联系人 CRUD 节点。
- `intent_type == "email_read"` → 邮件读取节点。
- `intent_type == "email_send"` → 草稿生成节点。
- `intent_type == "sniff"` → 智能嗅探节点。
- `intent_type == "list"` → 列表查询节点。
### 审核路由
- **位置**:人工审核节点之后。
- **条件**
- `user_approved == True` → 执行操作(发送/删除等)。
- `user_approved == False``user_modification` 存在 → 返回草稿生成节点。
- `user_approved == False` 且无修改 → 取消操作。
### 嗅探路由
- **位置**:智能嗅探节点之后。
- **条件**
- `should_ask == True` → 询问用户确认。
- `should_ask == False` → 直接结束,不打扰用户。
---
## 📊 状态设计
### 状态结构概览
| 分组 | 字段 | 类型 | 说明 |
|:-----|:-----|:-----|:-----|
| **输入** | `user_input` | `str` | 用户原始请求 |
| **意图** | `intent_type` | `str` | 意图类别 |
| | `extracted_info` | `dict` | 提取的关键信息 |
| **联系人** | `contact_data` | `dict` | 联系人数据 |
| | `contact_list` | `list[dict]` | 联系人列表 |
| **邮件** | `email_config` | `dict` | 邮箱配置 |
| | `email_list` | `list[dict]` | 邮件列表 |
| | `draft_recipient` | `str` | 草稿收件人 |
| | `draft_subject` | `str` | 草稿主题 |
| | `draft_body` | `str` | 草稿正文 |
| **审核** | `pending_action` | `dict` | 待审核操作 |
| | `user_approved` | `bool` | 是否通过审核 |
| | `user_modification` | `dict` | 用户修改 |
| **控制流** | `current_phase` | `str` | 当前执行阶段 |
| | `next_node` | `str` | 下一节点名称 |
| | `interrupt_point` | `str` | 中断点标识 |
| **输出** | `final_result` | `str` | 最终结果 |
---
## 🔄 工作流程与中断恢复
### 邮件发送流程
| 步骤 | 节点 | 人工干预 |
|:-----|:-----|:---------|
| 1 | 意图理解 | 否 |
| 2 | 草稿生成 | 否 |
| 3 | 人工审核 | **是** |
| 4 | 邮件发送 | 否 |
| 5 | 格式输出 | 否 |
### 联系人保存流程
| 步骤 | 节点 | 人工干预 |
|:-----|:-----|:---------|
| 1 | 意图理解 | 否 |
| 2 | 联系人 CRUD | 否 |
| 3 | 格式输出 | 否 |
### 智能嗅探流程
| 步骤 | 节点 | 人工干预 |
|:-----|:-----|:---------|
| 1 | 智能嗅探 | 否 |
| 2 | 询问确认 | **是** |
| 3 | 联系人 CRUD | 否 |
### 中断恢复机制
子图支持在人工审核节点中断,恢复时从审核点继续执行。