# ai-agent-email
**Repository Path**: notperfunctory/ai-agent-email
## Basic Information
- **Project Name**: ai-agent-email
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-24
- **Last Updated**: 2026-06-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AI Agent Email - 自然语言驱动的分布式定时任务调度系统
## 项目简介
用户通过自然语言描述需求(如"帮我在12点半给xxx@qq.com发送一封主题为XXX的邮件"),Python Agent 负责任务解析与时间推理,Java 后端负责持久化调度与邮件发送。
## 技术栈
| 端 | 技术 | 角色 |
| ------- | ------------------------------------------------- | ----------- |
| Python | FastAPI + LangChain + OpenAI/Qwen API | 敏态大脑 |
| Java | Spring Boot 3.x + WebFlux + MyBatis-Plus + XXL-JOB | 稳态核心 |
| 存储 | MySQL | 任务持久化 |
| 调度 | XXL-JOB | 分布式定时 |
## 目录结构
```
ai-agent-email/
├── python-agent/ # Python 敏态大脑
│ ├── app/
│ │ ├── __init__.py
│ │ ├── main.py # FastAPI 入口
│ │ ├── config.py # 配置(模型 API Key 等)
│ │ ├── schemas.py # Pydantic 数据模型
│ │ ├── agent/
│ │ │ ├── __init__.py
│ │ │ ├── react_agent.py # LangChain ReAct Agent 核心
│ │ │ ├── tools.py # 工具定义(get_current_time)
│ │ │ └── output_parser.py # JSON 解析 + 兜底逻辑
│ │ └── routers/
│ │ ├── __init__.py
│ │ └── agent_router.py # /api/v1/parse 接口
│ ├── requirements.txt
│ └── Dockerfile
│
├── java-scheduler/ # Java 稳态核心
│ ├── pom.xml
│ ├── src/main/java/com/agent/scheduler/
│ │ ├── SchedulerApplication.java
│ │ ├── config/
│ │ │ ├── WebClientConfig.java # WebFlux HTTP Client
│ │ │ ├── Resilience4jConfig.java # 熔断降级配置
│ │ │ └── XxlJobConfig.java # XXL-JOB 注册配置
│ │ ├── controller/
│ │ │ └── TaskController.java # 统一入口 /api/v1/task
│ │ ├── service/
│ │ │ ├── TaskService.java # 任务编排(WAL 落库)
│ │ │ ├── EmailService.java # 邮件发送
│ │ │ └── AgentClient.java # 调用 Python Agent 的 Feign 式客户端
│ │ ├── handler/
│ │ │ └── EmailJobHandler.java # XXL-JOB Handler(定时触发)
│ │ ├── entity/
│ │ │ └── TaskRecord.java # 数据库实体
│ │ ├── mapper/
│ │ │ └── TaskRecordMapper.java # MyBatis-Plus Mapper
│ │ └── dto/
│ │ ├── TaskRequest.java # 用户请求 DTO
│ │ └── AgentResponse.java # Python 返回 JSON 映射
│ └── src/main/resources/
│ ├── application.yml
│ └── db/
│ └── schema.sql # 建表语句
│
└── docker-compose.yml # 整体编排
```
## 核心时序图
```mermaid
sequenceDiagram
actor User
participant Java as Java Controller
(Spring WebFlux)
participant Python as Python Agent
(FastAPI + LangChain)
participant LLM as 大模型 API
(OpenAI / Qwen)
participant DB as MySQL
participant XXL as XXL-JOB
participant Email as SMTP Server
User->>Java: POST /api/v1/task
{"prompt": "12点半给x@q.com发一封主题为XXX的邮件"}
Note over Java: 【Step 1: WAL 预写日志】
先创建一条 PENDING 记录落库
防止丢失
Java->>DB: INSERT task (status=PENDING, prompt=...)
DB-->>Java: OK, task_id=42
Java->>Python: POST /api/v1/parse
{"prompt": "...", "current_time": "2024-05-20 11:00:00"}
Note over Python: 【Step 2: ReAct Agent 推理】
Python->>LLM: System: 你是任务解析助手,当前时间=...
User: 帮我在12点半...
LLM-->>Python: 我需要获取当前时间
Python->>Python: Tool: get_current_time() → "2024-05-20 11:00:00"
Python->>LLM: 当前时间是2024-05-20 11:00:00
继续推理...
LLM-->>Python: {"action": "send_email",
"params": {"to": "x@q.com", "subject": "XXX"},
"schedule_time": "2024-05-20T12:30:00"}
Note over Python: 【Step 3: JSON 解析 + 兜底】
正则提取 + Pydantic 校验
Python-->>Java: 200 OK
{"success": true, "task": {...}}
Note over Java: 【Step 4: 时间戳合法校验】
防历史时间 / 防异常时间
Java->>DB: UPDATE task SET status=REGISTERED,
schedule_time='2024-05-20T12:30:00'
Java->>XXL: 注册一次性定时任务
触发时间: 2024-05-20 12:30:00
Java-->>User: 200 OK
{"task_id": 42, "status": "REGISTERED"}
Note over XXL,DB: ⏰ 时间到达 12:30:00
XXL->>Java: 触发 Handler: emailJobHandler(task_id=42)
Note over Java: 【Step 5: 防重复执行】
CAS 更新状态 REGISTERED→RUNNING
Java->>DB: UPDATE task SET status=RUNNING
WHERE id=42 AND status=REGISTERED
Java->>Email: SMTP 发送邮件
Email-->>Java: 发送成功
Java->>DB: UPDATE task SET status=SUCCESS
Java->>XXL: 任务完成回调
```
## 核心工程亮点
| 机制 | 所在层 | 解决的问题 |
| --------------- | -------------- | -------------------------------- |
| WAL 预写日志 | Java Service | 任务防丢失:先落库再调用 Agent |
| CAS 状态机 | XXL-JOB Handler | 防重复执行:REGISTERED→RUNNING |
| 时间注入 + Tool | Python Agent | 大模型时间幻觉:注入系统时间 |
| JSON 兜底解析 | Python Parser | Agent 输出不可控时正则兜底提取 |
| 熔断降级 | Java AgentClient | Python 不可用时的快速失败 |
## 快速启动
```bash
# 1. 启动 Python Agent
cd python-agent
pip install -r requirements.txt
uvicorn app.main:app --port 8000
# 2. 启动 Java 服务
cd java-scheduler
mvn spring-boot:run
```