docs: 重构 README 文档,整理已实现和待实现功能
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m37s
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m37s
- 创建 backend/app/README.md 主文档 - 整理已实现功能(带 ✅ 标记) - 列出待实现功能(带 🚧 标记) - 删除 agent_subgraphs/ 下的旧 README 文件
This commit is contained in:
@@ -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 | 否 |
|
||||
|
||||
### 中断恢复机制
|
||||
|
||||
子图支持在人工审核节点中断,恢复时从审核点继续执行。
|
||||
Reference in New Issue
Block a user