Files
ailine/backend/app/agent_subgraphs/dictionary/README.md
root 7945f53086
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 5m36s
feat: 添加 agent_subgraphs 子图架构文档和公共工具说明
- 添加 agent_subgraphs 目录,包含主图 README.md 和三个子图文档
- 通讯录子图:联系人 CRUD、邮件读取/发送、智能嗅探
- 智能词典子图:翻译、查词、每日一词、专业名词提炼
- 研究分析子图:联网搜索、报告生成、引用溯源
- 公共工具:意图理解、人工审核、格式化输出、检查点持久化、条件路由、LLM 调用、数据库工具、状态基类
- 配置调整:启用 DEBUG 日志级别
- 启动脚本:使用 python3 替代 python
2026-04-22 14:49:06 +08:00

429 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 智能词典子图 (Dictionary Subgraph)
该子图负责处理翻译、查词、生词本管理等功能,基于 LangGraph 状态机编排多阶段学习流程支持联想记忆法、艾宾浩斯遗忘曲线复习、Anki 导出等核心能力。子图设计遵循"高效学习、科学复习、持久记忆"原则。
> **使用公共工具**意图理解、格式化输出、检查点持久化、条件路由、LLM 调用、数据库工具、状态基类
---
## 🎯 核心架构
### 技术栈
| 层级 | 组件 | 说明 |
|:-----|:-----|:-----|
| **编排框架** | LangGraph StateGraph | 状态机驱动的子图工作流编排 |
| **LLM 服务** | 智谱 AI / DeepSeek API | 翻译、释义生成、联想记忆、专业名词提炼(使用公共 LLM 工具) |
| **翻译服务** | DeepL / 有道 API | 高质量机器翻译 |
| **关系存储** | PostgreSQL | 生词本、复习记录持久化(使用公共数据库工具) |
| **导出工具** | csv / Anki APKG | 生词本导出格式 |
### 子图分层架构
```
┌─────────────────────────────────────────────────────────────────┐
│ 主图 (Main Graph) │
└──────────────────────────────┬──────────────────────────────────┘
│ 状态映射 / 结果聚合
┌─────────────────────────────────────────────────────────────────┐
│ 智能词典子图接口层 │
│ - 状态转换:主状态 ↔ 子图状态(使用公共状态基类) │
│ - 错误传播与优雅降级 │
└──────────────────────────────┬──────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 工作流编排层 │
│ - 节点调度与条件路由(使用公共路由工具) │
│ - 复习计划计算 │
│ - 状态持久化与检查点(使用公共检查点工具) │
└──────────────────────────────┬──────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 节点层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │
│ │意图理解 │ │翻译节点 │ │查词节点 │ │每日一词 │ │专业提炼│ │
│ │(公共工具)│ │ │ │ │ │ │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │生词管理 │ │复习计划 │ │联想记忆 │ │格式输出 │ │
│ │ │ │ │ │ │ │(公共) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└──────────────────────────────┬──────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 工具层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │翻译API │ │词典API │ │数据库工具│ │艾宾浩斯 │ │
│ │ │ │ │ │(公共) │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
### 数据流总览
智能词典子图根据学习意图分支执行,支持查词、翻译、复习等多种学习模式。
```
用户请求
┌─────────────┐
│ 意图理解 │ ← 使用公共意图理解工具
└──────┬──────┘
├──────────┬──────────┬──────────┬──────────┬──────────┐
▼ ▼ ▼ ▼ ▼ ▼
翻译 查词 每日一词 专业提炼 生词管理 复习计划
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
翻译API 词典API 每日推荐 术语提取 增删改查 复习计算
│ │ │ │ │ │
│ ▼ │ │ │ │
│ 联想记忆 │ │ │ │
│ │ │ │ │ │
└──────────┴──────────┴──────────┴──────────┴──────────┘
格式输出 ← 使用公共格式化工具
├──────────┐
│ │
▼ ▼
保存生词 Anki导出
│ │
└──────────┘
返回主图
```
---
## 📂 模块与文件结构
```
app/dictionary/
├── __init__.py
├── graph.py # 子图构建入口,定义状态图与路由
├── state.py # 子图状态定义(继承公共状态基类)
├── nodes/ # 节点实现
│ ├── __init__.py
│ ├── translate.py # 翻译节点
│ ├── lookup.py # 查词节点
│ ├── daily_word.py # 每日一词节点
│ ├── extract_terms.py # 专业名词提炼节点
│ ├── vocab.py # 生词本管理节点
│ ├── review.py # 复习计划节点
│ ├── association.py # 联想记忆节点
│ └── export.py # Anki导出节点
├── tools/ # 子图特有工具集
│ ├── translate_api.py # 翻译API工具
│ ├── dictionary_api.py # 词典API工具
│ ├── ebinghaus.py # 艾宾浩斯遗忘曲线工具
│ └── anki.py # Anki导出工具
└── persistence/ # (使用公共检查点工具,无需单独实现)
```
> **注意**:以下模块使用公共工具,无需单独实现:
> - 意图理解节点 → 使用 `agent_subgraphs.common.intent`
> - 格式输出节点 → 使用 `agent_subgraphs.common.format`
> - 检查点持久化 → 使用 `agent_subgraphs.common.checkpoint`
> - 条件路由 → 使用 `agent_subgraphs.common.routing`
> - LLM 调用 → 使用 `agent_subgraphs.common.llm`
> - 数据库操作 → 使用 `agent_subgraphs.common.db`
---
## 🎯 演进路线与核心机制
### Level 1基础翻译与查词
**核心机制**:调用翻译/词典 API展示基础释义。
- 支持中↔英、中↔日等多语言互译。
- 提供单词词性、释义、例句。
- 基础生词本功能(添加、查询)。
**适用场景**:快速翻译、单词查询。
**实现指引**:意图理解节点识别翻译/查词意图,路由到对应节点。
### Level 2联想记忆法
**核心机制**:利用 LLM 生成联想记忆法,帮助记忆单词。
- 词根词缀分析。
- 词源故事/文化背景。
- 趣味联想(谐音、画面感)。
- 同根词/近义词/反义词扩展。
**适用场景**:深度单词学习、高效记忆。
**实现指引**:查词后自动生成联想记忆内容,可选是否保存到生词本。
### Level 3艾宾浩斯遗忘曲线复习
**核心机制**:基于遗忘曲线科学安排复习时间。
- 首次学习后按 1天、2天、4天、7天、15天、30天 间隔复习。
- 根据用户记忆反馈动态调整复习间隔。
- 每日复习提醒。
**适用场景**:长期词汇积累、抗遗忘学习。
**实现指引**:复习计划节点计算下次复习时间,存入数据库。
### Level 4专业名词提炼与管理
**核心机制**:从文本中自动提取专业名词,建立术语库。
- 支持从任意文本中提取专业术语。
- 自动生成术语释义。
- 按领域分类管理术语库。
**适用场景**:专业文档阅读、学术学习。
**实现指引**:使用 LLM 进行 NER 和术语识别。
### Level 5智能词汇教练
**核心机制**:个性化学习路径、多模态记忆、学习进度追踪。
- 根据用户水平推荐学习内容。
- 图片、音频等多模态记忆辅助。
- 学习统计与进度可视化。
- 自适应难度调整。
**适用场景**:系统化语言学习、个性化辅导。
---
## 🔧 核心组件详解
### 1. 意图理解节点
**职责**:接收用户请求,区分翻译、查词、每日一词、专业提炼、生词管理、复习等意图。
**输入**:用户自然语言请求。
**输出**
- `intent_type`意图类别translate / lookup / daily / extract / vocab / review / export
- `target_word`:目标单词/文本。
- `source_lang`:源语言。
- `target_lang`:目标语言。
**实现要点**
- 使用 LLM 分类意图,输出结构化 JSON。
- 关键词匹配兜底(如"翻译"、"查一下")。
### 2. 翻译节点
**职责**:调用翻译 API返回高质量翻译结果。
**输入**:待翻译文本、源语言、目标语言。
**输出**
- `translation`:翻译结果。
- `alternative_translations`:备选翻译(如有)。
**实现要点**
- 优先使用 DeepL降级到有道或 LLM 翻译。
- 支持长文本分段翻译。
### 3. 查词节点
**职责**:查询单词详细释义、词性、例句等信息。
**输入**:目标单词。
**输出**
- `word_info`:单词信息(词性、释义、音标)。
- `examples`:例句列表。
**实现要点**
- 调用词典 API缺失时使用 LLM 生成。
- 支持英英、英汉双解。
### 4. 每日一词节点
**职责**:根据用户水平和历史,推荐今日学习单词。
**输入**:用户学习偏好。
**输出**
- `daily_word`:今日推荐单词。
- `word_detail`:单词详情。
- `learning_tip`:学习建议。
**实现要点**
- 结合用户历史生词和复习进度推荐。
- 难度适中递进。
### 5. 专业名词提炼节点
**职责**:从文本中提取专业名词,生成释义。
**输入**:待分析文本、领域(可选)。
**输出**
- `extracted_terms`:提取的专业名词列表。
- `term_definitions`:名词释义。
**实现要点**
- 使用 LLM 进行术语识别和定义生成。
- 支持按领域过滤。
### 6. 生词本管理节点
**职责**:生词本的增删改查操作。
**输入**:操作类型、生词数据。
**输出**
- `operation_result`:操作结果。
- `vocab_list`:更新后的生词列表。
**实现要点**
- 支持批量添加。
- 按标签/难度/复习时间筛选。
### 7. 复习计划节点
**职责**:基于艾宾浩斯遗忘曲线计算复习计划。
**输入**:生词 ID、上次复习时间、记忆强度。
**输出**
- `next_review`:下次复习时间。
- `review_schedule`:完整复习计划。
**实现要点**
- 使用标准艾宾浩斯间隔1天、2天、4天、7天、15天、30天
- 根据用户反馈动态调整。
### 8. 联想记忆节点
**职责**:为单词生成联想记忆法,帮助记忆。
**输入**:目标单词。
**输出**
- `root_analysis`:词根词缀分析。
- `etymology`:词源故事。
- `association`:趣味联想。
- `word_family`:同根词/近义词/反义词。
**实现要点**
- 使用 LLM 生成富有创意的记忆法。
- 支持用户自定义联想。
### 9. Anki 导出节点
**职责**:导出生词本为 Anki 可导入格式。
**输入**:导出范围(全部/按标签/按时间)。
**输出**
- `export_file`:导出文件路径。
- `export_count`:导出单词数量。
**实现要点**
- 支持 CSV 和 APKG 两种格式。
- 包含联想记忆内容。
---
## 🔀 条件路由详解
### 入口路由:意图分支
- **位置**:意图理解节点之后。
- **条件**
- `intent_type == "translate"` → 翻译节点。
- `intent_type == "lookup"` → 查词节点。
- `intent_type == "daily"` → 每日一词节点。
- `intent_type == "extract"` → 专业提炼节点。
- `intent_type == "vocab"` → 生词管理节点。
- `intent_type == "review"` → 复习计划节点。
- `intent_type == "export"` → Anki导出节点。
### 查词后续路由
- **位置**:查词节点之后。
- **条件**
- 用户询问"怎么记" → 联想记忆节点。
- 用户说"保存" → 生词管理节点(添加)。
- 无后续 → 格式输出。
---
## 📊 状态设计
### 状态结构概览
| 分组 | 字段 | 类型 | 说明 |
|:-----|:-----|:-----|:-----|
| **输入** | `user_input` | `str` | 用户原始请求 |
| **意图** | `intent_type` | `str` | 意图类别 |
| | `target_word` | `str` | 目标单词/文本 |
| | `source_lang` | `str` | 源语言 |
| | `target_lang` | `str` | 目标语言 |
| **翻译** | `translation` | `str` | 翻译结果 |
| | `alternative_translations` | `list[str]` | 备选翻译 |
| **查词** | `word_info` | `dict` | 单词信息 |
| | `examples` | `list[str]` | 例句 |
| **联想** | `root_analysis` | `str` | 词根分析 |
| | `etymology` | `str` | 词源 |
| | `association` | `str` | 联想记忆 |
| | `word_family` | `list[str]` | 词族 |
| **每日一词** | `daily_word` | `str` | 今日单词 |
| | `word_detail` | `dict` | 单词详情 |
| | `learning_tip` | `str` | 学习建议 |
| **专业提炼** | `extracted_terms` | `list[dict]` | 提取的术语 |
| | `term_definitions` | `dict` | 术语释义 |
| **生词本** | `vocab_list` | `list[dict]` | 生词列表 |
| | `operation_result` | `str` | 操作结果 |
| **复习** | `next_review` | `datetime` | 下次复习时间 |
| | `review_schedule` | `list[dict]` | 复习计划 |
| **导出** | `export_file` | `str` | 导出文件路径 |
| | `export_count` | `int` | 导出数量 |
| **控制流** | `current_phase` | `str` | 当前阶段 |
| | `next_node` | `str` | 下一节点 |
| **输出** | `final_result` | `str` | 最终结果 |
---
## 🔄 工作流程
### 查词+联想记忆流程
| 步骤 | 节点 | 说明 |
|:-----|:-----|:-----|
| 1 | 意图理解 | 识别查词意图 |
| 2 | 查词 | 查询单词释义 |
| 3 | 联想记忆 | 生成记忆法 |
| 4 | 询问保存 | 可选保存到生词本 |
| 5 | 格式输出 | 展示结果 |
### 复习流程
| 步骤 | 节点 | 说明 |
|:-----|:-----|:-----|
| 1 | 意图理解 | 识别复习意图 |
| 2 | 复习计划 | 获取今日需复习单词 |
| 3 | 复习交互 | 逐个复习,记录记忆强度 |
| 4 | 更新计划 | 计算下次复习时间 |
| 5 | 格式输出 | 展示复习结果 |
### Anki导出流程
| 步骤 | 节点 | 说明 |
|:-----|:-----|:-----|
| 1 | 意图理解 | 识别导出意图 |
| 2 | Anki导出 | 生成导出文件 |
| 3 | 格式输出 | 提供下载链接 |