一个为 PMail 邮件系统设计的智能邮件分类服务。通过集成 Ollama 模型和本地黑名单过滤,提供高效的邮件自动分类功能。
- 🤖 AI 驱动分类:集成 Ollama 模型,使用 Few-shot Learning 进行邮件智能分类
- 🚫 黑名单过滤:支持本地黑名单词汇库,快速过滤垃圾邮件
- 📊 三分类标准:将邮件分为「普通」、「广告」、「垃圾」三类
- 🔄 灵活架构:支持多种分类策略的组合,可优雅降级到关键词匹配
- 📝 详细日志:完整的 HTTP 请求日志中间件,便于调试和监控
- ⚡ 高性能:基于 Shelf 框架,轻量级 HTTP 服务器
tranquil_inbox_ward/
├── bin/
│ └── tranquil_inbox_ward.dart # 应用入口点
├── lib/
│ ├── server.dart # 路由和请求处理
│ ├── classifier.dart # 邮件分类核心逻辑
│ ├── ollama_client.dart # Ollama 模型调用
│ └── logging_middleware.dart # HTTP 日志中间件
├── test/
│ ├── tranquil_inbox_ward_test.dart
│ └── test_classify.sh
├── blackworlds.json # 黑名单词汇库
└── pubspec.yaml # 项目依赖配置
邮件分类请求端点。
请求格式(符合 PMail 标准):
{
"instances": [
{
"token": ["邮件内容文本"]
}
]
}响应格式:
{
"predictions": [
[1.0, 0.0, 0.0]
]
}其中响应数组表示 [普通, 广告, 垃圾] 的置信度得分。
健康检查端点,返回 OK。
- Dart SDK >= 3.11.5
- Ollama 本地服务(可选,如果启用 Ollama 分类)
dart pub getdart run bin/tranquil_inbox_ward.dart默认监听 http://0.0.0.0:9800。可通过环境变量 PORT 自定义端口:
PORT=8080 dart run bin/tranquil_inbox_ward.dart使用 Shell 脚本:
bash test/test_classify.sh邮件分类采用多层策略,优先级如下:
- 黑名单过滤(可选)默认关闭:检查邮件是否包含黑名单词汇 → 返回「垃圾」
- Ollama 模型分类(可选)默认开启:调用本地 Ollama 模型进行分类
- 关键词降级:当 Ollama 不可用或不启用时,使用关键词匹配 → 默认返回「普通」
在 classifyEmail() 函数中可配置:
enableOllama:是否启用 Ollama 模型分类,默认trueenableBlackwords:是否启用黑名单过滤,默认falseblackwordsPath:黑名单 JSON 文件路径,默认./blackwords.json
blackwords.json 文件格式:
{
"blackwords": [
"spam",
"fake",
"click here"
]
}服务集成了详细的请求日志中间件,会打印:
- HTTP 方法和请求 URI
- 请求头信息
- 请求体内容
- 响应状态
- shelf - HTTP 服务框架
- shelf_router - 路由管理
- ollama_dart - Ollama 模型调用库
- path - 文件路径处理
server.dart:定义/classify和/health路由,处理 JSON 解析和响应格式转换classifier.dart:实现邮件分类逻辑和黑名单加载ollama_client.dart:调用 Ollama API,使用 Few-shot Learning 引导模型输出格式logging_middleware.dart:捕获和打印完整的 HTTP 请求内容
GNU General Public License 3
欢迎提交 Issue 和 Pull Request!