File size: 5,867 Bytes
ab1ad86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# 📄 PRD — AI-powered Resume & Cover Letter Generator

## 1. Product Overview

This tool helps users **automatically generate a Resume and Cover Letter** tailored to a given **Job Description (JD)**.

Frontend: **Streamlit** for simple, interactive UI.  
Backend: **Python + LiteLLM** for multi-provider LLM integration.

目标:

* 快速生成个性化简历 & 求职信
* 用户可反复迭代修改,直到满意
* 一键导出 PDF

---

## 2. User Flow

1. **输入阶段**

   * 用户粘贴 **Job Description (JD)**
   * 用户粘贴 **个人信息**(简历内容、项目介绍、其他说明)

2. **分析 & 生成阶段**

   * 点击 **Analyse** → LLM 解析 JD + 用户信息,产出分析总结(关键技能、岗位要求、匹配点、差距、建议、短 Pitch)
   * 随后基于总结触发一次 **生成**:输出 **Resume (Markdown)****Cover Letter (Text)**
   * UI 在同一屏内立即预览两份文档(无单独“预览阶段”)

3. **Refine 阶段**

   * 用户在 **Feedback InputBox** 输入反馈(例如“强调 CI/CD 和 DevOps”)
   * 点击 **Refine** → 基于反馈更新分析总结,并再次 **生成** 两份文档
   * UI 始终预览最新的 Resume & Cover Letter

4. **导出阶段**

   * 用户点击 **Export PDF**
   * 系统导出 Resume PDF + Cover Letter PDF

---

## 3. Core Features

* **Frontend (Streamlit)**

  * InputBox: Job Description
  * InputBox: User Info
  * Button: **Analyse**
  * InputBox: 用户反馈
  * Button: **Refine**
  * Preview Resume (Markdown) & Cover Letter (Text)
  * Button: **Export PDF**

* **Backend (LLM)**

  * **Analyse Prompt** → 输出 JSON summary
  * **Refine Prompt** → 基于用户反馈更新 summary
  * **Generate Prompt (Single)** → 同时生成 Resume (Markdown) + Cover Letter (Text)

* **Export**

  * Markdown → PDF
  * Text → PDF

---

## 3.1 UI Spec

- **Layout:** 单页 Streamlit;左侧输入与控制,右侧结果与预览。
- **Inputs:**
  - `Job Description` 文本域(必填)
  - `User Info` 文本域(可包含简历要点、项目、加分项)
  - `Feedback` 文本域(可选,用于强调或修正分析方向)
- **Actions:**
  - `Analyse`:解析 JD+User,生成/更新总结;随后立即生成并预览两份文档
  - `Refine`:基于反馈更新总结;随后重新生成并预览两份文档
  - `Export PDF`:导出两份 PDF(Resume、Cover Letter)
- **Outputs:**
  - `Analyse Summary`(关键技能、匹配点、差距、建议、短 Pitch)
  - `Resume (Markdown 渲染预览)`
  - `Cover Letter (纯文本预览)`

---

## 3.2 Button Actions

- **Analyse:**
  - 前置校验:`JD``User Info` 不为空。
  - 生成总结:`services/analyse_service.analyse(jd, user)`  - 生成文档:`services/generation_service.generate_both(summary, user)`  - UI 更新:展示 `Analyse Summary` 与两份文档预览。
  - 错误处理:捕获 LLM/解析错误,展示可重试提示;记录结构化日志。

- **Refine:**
  - 前置校验:存在有效 `summary``Feedback` 非空。
  - 更新总结:`services/analyse_service.refine(summary, feedback)`  - 重新生成:`services/generation_service.generate_both(updated_summary, user)`  - UI 更新:覆盖预览为最新版本。

- **Export PDF:**
  - 前置校验:已生成 `Resume``Cover Letter`  - 调用 `services/pdf_service.md_to_pdf(resume_md, path)``txt_to_pdf(cover_letter_txt, path)` 生成两份 PDF。
  - 提供下载:通过 `st.download_button` 返回二者(或打包 zip)。
  - 默认命名:`exports/{timestamp}_resume.pdf``exports/{timestamp}_cover_letter.pdf`。

---


## 4. 技术实现概览

### 4.1 项目结构

```
apply-helper/
├── pyproject.toml           # 项目依赖与配置
├── README.md                # 项目说明文档
├── app.py                   # Streamlit 前端主入口
├── docs/
│   ├── prd.md               # 产品需求文档
│   └── spec.md              # 技术规格说明
├── services/
│   ├── analyse_service.py   # JD/用户信息分析与总结
│   ├── generation_service.py # 简历与求职信生成
│   ├── pdf_service.py       # PDF 导出功能
│   └── llm_service.py       # LLM/LiteLLM 统一封装与调用
├── llm/
│   ├── litellm_client.py    # LiteLLM API 封装
│   └── prompt_templates.py  # LLM Prompt 模板管理
├── exports/                 # 导出 PDF 文件目录
└── tests/                   # 单元测试
```

### 4.2 主要技术实现

- **前端**:Streamlit 单页应用,左侧输入与控制,右侧结果与预览。
- **后端服务**  - `analyse_service.py`:负责 JD/用户信息分析与总结。
  - `generation_service.py`:负责简历与求职信生成。
  - `pdf_service.py`:负责 PDF 导出。
  - `llm_service.py`:统一封装 LLM 调用,底层通过 `llm/litellm_client.py` 对接 LiteLLM。
  - `llm/prompt_templates.py`:管理各类 Prompt 模板。
- **依赖管理**:推荐使用 uv 管理 Python 依赖。
- **LLM 接入**:LiteLLM 支持多云模型,密钥通过 .env 配置。
- **扩展性**:各服务模块解耦,便于未来扩展多语言、社交信息抓取等。

---

## 5. Example Workflow

* 输入 JD: "Looking for a React developer with AI integration experience..."
* 输入 Resume/Project info
* 点击 **Analyse** → 输出关键技能、匹配点、差距,并生成 Resume(MD) + Cover Letter(TXT) 预览
* 用户输入反馈 "强调 CI/CD 和 DevOps"
* 点击 **Refine** → 更新总结并重新生成两份文档(即时预览)
* **导出 PDF**

---

## 6. Future Extensions

* 多语言支持 (EN/DE)
* 自动建议改进点
* GitHub/LinkedIn 自动抓取信息
* ATS 优化模式

---