wellfound-feedback / overview.md
Zoey7Web's picture
Upload 3 files
2b767fb verified
|
Raw
History Blame Contribute Delete
2.9 kB

邮件智能分类 & Google Sheets 自动回填系统 — 交付概览

项目结构

wellfound-feedback/
├── app.py                    # Gradio 前端界面(入口)
├── src/
│   ├── config.py             # 环境变量配置管理
│   ├── email_parser.py       # .msg 邮件解析
│   ├── ai_classifier.py      # AI 分类(OpenAI/DeepSeek)
│   ├── sheets_updater.py     # Google Sheets 模糊匹配 + 写入
│   └── processor.py          # 处理管线(协调各模块)
├── requirements.txt          # Python 依赖
├── .env.example              # 环境变量模板(含详细注释)
├── .gitignore                # 安全排除 .env、密钥文件
├── space_config.md           # Hugging Face Space 元数据
└── README.md                 # 完整部署文档 + 用户操作手册

核心功能实现

📧 邮件解析(email_parser.py)

  • extract-msg 解析 .msg 文件
  • 提取:发件人邮箱、日期、主题、正文
  • HTML 正文自动转纯文本(html2text)
  • 从发件人域名提取备用公司名

🤖 AI 分类(ai_classifier.py)

  • 支持 OpenAI(gpt-4o-mini)和 DeepSeek(deepseek-chat)
  • 强制 JSON 输出,严格校验 8 种分类标签
  • asyncio 异步 + Semaphore 并发控制
  • tenacity 自动重试(3次,指数退避)
  • 置信度评估(high / medium / low)

📊 Google Sheets 回填(sheets_updater.py)

  • rapidfuzz token_sort_ratio 模糊匹配
  • 可配置阈值(默认 85%)+ 歧义间隔(默认 3%)
  • 三种匹配状态:exact / fuzzy / ambiguous / not_found
  • 优先级覆盖策略:HIGH > LOW,同级保留最早数据
  • 批量写入 AA/AB/AC/AD 列

🖥️ Gradio 界面(app.py)

  • 拖拽多文件上传(.msg)
  • 实时进度显示
  • 结果表格(8列)
  • ⚠️ 待确认区:下拉选框选择候选公司,一键确认回填
  • 日志输出区(50行滚动)
  • Google Sheets 连接状态测试

部署步骤(Hugging Face Spaces)

  1. GitHub 新建仓库,推送此代码
  2. HF Spaces 创建(SDK: Gradio),关联 GitHub 仓库
  3. Settings → Secrets 配置:
    • LLM_PROVIDER = openaideepseek
    • OPENAI_API_KEYDEEPSEEK_API_KEY
    • GOOGLE_SERVICE_ACCOUNT_JSON(整个 JSON 内容)
    • GOOGLE_SHEET_ID
    • GOOGLE_SHEET_NAME
  4. 等待自动部署,访问 Space URL

关键设计决策

问题 解决方案
公司名提取不准确 AI 提取 + 发件人域名双重后备
表格名称不统一 rapidfuzz 模糊匹配(85% 阈值)
同一公司多封回复 优先级矩阵(真人回复 > 自动回复)
API 调用失败 tenacity 3次重试 + 友好错误提示
大批量并发 asyncio.Semaphore(5) 排队处理
密钥安全 全部通过环境变量,.gitignore 排除 .env