Skip to main content
Glama
README.md
# 基于 MCP 规范的 AI Native 简历自适应优化系统

> 面向「一岗一简历」与高频海投要求简历快速复用的现实矛盾,独立构思并设计实现的 AI Agent 工程项目。

**已在 Claude + DeepSeek + VSCode(Cline)集成环境下完整测试通过。**

---

## 项目背景

求职时存在一个核心矛盾:每个岗位的 JD 侧重不同,高度定制化的简历才能提高命中率,但海投场景下手动逐条调整耗时且难以复用。

本项目通过 MCP 协议将简历改写流程工具化,构建可跨 JD 场景稳定复用的 AI Agent 系统,并配套工业级自动化评测脚手架(Promptfoo + LangSmith),确保大模型输出质量可控、可审计、可回归。

---

## 系统架构

```
用户输入 JD
    │
    ▼
┌─────────────────────────────────────────┐
│           网页前端(UI 入口)              │
└──────────────────┬──────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────┐
│         MCP Server(server.py)          │
│                                         │
│  Resources                              │
│  ├── resume://full        完整经历库     │
│  └── resume://current_jd  当前目标JD    │
│                                         │
│  Tools                                  │
│  ├── load_jd              加载并持久化JD │
│  ├── analyze_jd_match     匹配度分析     │
│  ├── rewrite_section      分段改写       │
│  ├── assemble_resume      组装完整简历   │
│  └── save_resume_draft    保存草稿       │
└──────────────────┬──────────────────────┘
                   │
        ┌──────────┴──────────┐
        ▼                     ▼
   Claude API            DeepSeek API
  (工具调用决策)        (内容生成)
        │                     │
        └──────────┬──────────┘
                   ▼
┌─────────────────────────────────────────┐
│         LLM Eval Harness                │
│  Promptfoo 5×3 矩阵评测                 │
│  LangSmith 全链路 Trace                 │
└─────────────────────────────────────────┘
```

---

## 核心功能

### 1. 标准化上下文接入(MCP Resource)

通过 `resume://full` 和 `resume://current_jd` 两个 Resource,将简历素材库与目标 JD 自动挂载到模型上下文,无需每次手动粘贴,实现跨会话的上下文稳定注入。

### 2. 模块化改写工作流(Skill)

将非结构化的简历改写经验蒸馏为四步标准流程:

```
load_jd → analyze_jd_match → rewrite_section → assemble_resume
```

每段经历按**核心匹配 / 次要匹配 / 补充匹配**三类分级改写,遵循「JD 需求点 → 我做了什么 → 结果/价值」结构公式,严格不虚构内容。

### 3. Claude + DeepSeek 多模型协作

| 模型 | 职责 |
|------|------|
| Claude | MCP 工具调用决策、质量把控 |
| DeepSeek | 中文内容生成(降低成本) |

通过 Prompt Engineering 强约束格式输出,拦截模型幻觉,消除模型在改写结果中夹带前言与客套话的问题;将非结构化改写经验蒸馏为可调用 Skill,具备从需求抽象到工程交付的完整 AI Native 研发视野。

### 4. LLM Eval Harness(评测)

#### Promptfoo 5×3 正交矩阵评测数据集

针对大模型面对不同行业和不同简历背景梯度下的适配问题,构建覆盖:

- **5 类行业岗位**:理工 / 工程 / 农业 / 医疗 / 法律
- **3 种简历梯度**:优秀 / 中等 / 劣势背景

共 **15 个正交测试场景**。

#### 断言从简单到复合的演进

初版使用 `icontains` 简单关键词断言,在 `promptfoo view` 评测看板中发现**假阴性问题**——模型输出整体质量合格,但因某个特定词缺失即判 FAIL。

根因分析:**硬字符串匹配思维在面对生成式 AI 时容易失效**——生成式模型的输出本身就存在合理的语义多样性,用固定词强卡必然误杀。

因此将断言重构为**基于多同义词模糊正则匹配与 JavaScript 的函数式断言**,通过逻辑组合(`||` / `&&`)和关键语义多路覆盖降低误判率:

```javascript
// 重构后:兼顾格式约束与语义容错的复合断言
function({ output }) {
  const lines = output.split('\n').filter(l => l.trim());
  // 多路语义覆盖:出现任意同义词均视为通过
  const hasContent = /育种|选育|品种/.test(output) ||
                     /实验|试验|测试/.test(output);
  // 格式约束:行数不超过上限
  return lines.length <= 6 && hasContent;
}
```

#### LangSmith 全链路白盒 Trace

通过 `wrap_openai` 为 DeepSeek SDK 挂载自动追踪探针,在云端看板实现:

- **双层嵌套运行树**:Tool 级调用(父层)+ LLM 响应(子层)
- **精准追踪 Prompt 拼接、Token 消耗、响应延迟、模型成本

---

## 工程目录

```
agent-resume/
├── server.py                          # MCP Server 核心(Resources + Tools)
├── requirements.txt                   # Python 依赖
├── .gitignore
├── agent-sessions.code-workspace      # VSCode 工作区配置
├── .claude/
│   └── agents/
│       └── resume_editor.agent.md    # Agent 系统级行为规范与四步流程
├── data/
│   ├── resume.md                     # 完整经历素材库(自行填写)
│   └── current_jd.txt                # 当前目标 JD(load_jd 工具自动写入)
├── output/
│   └── *.md                          # 各岗位定制化简历草稿
└── tests/
    ├── promptfoo/                     # 5×3 矩阵评测配置 + JS 函数式断言
    └── langsmith/                     # LangSmith 白盒追踪驱动脚本
```

---

##  快速开始

### 环境准备

```bash
# 克隆项目
git clone https://github.com/your-username/resume-adjuster.git
cd resume-adjuster

# 创建虚拟环境
python -m venv venv
source venv/bin/activate        # Windows: venv\Scripts\activate

# 安装 Python 依赖
pip install mcp openai langsmith

# 安装 Promptfoo
npm install -g promptfoo
```

### 配置 API Keys

请在工程中填入自己对应的Keys。

DeepSeek官方API接口链接:https://api-docs.deepseek.com/zh-cn/

```bash
# .env
ANTHROPIC_API_KEY=your_anthropic_key     # Claude
DEEPSEEK_API_KEY=your_deepseek_key       # DeepSeek
LANGSMITH_API_KEY=your_langsmith_key     # LangSmith
LANGSMITH_PROJECT=resume_adjuster
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
```


### 填写简历素材库

在 `data/resume.md` 中填入你的完整经历,素材越结构化,改写质量越高。
resume.md文件中已给出示例。

```

### 在 VSCode + Cline 中启动

1. 启动 MCP Server:

```bash
python server.py
```

2. 在 Cline 的 MCP 配置中注册(`.vscode/cline_mcp_config.json`):

```json
{
  "mcpServers": {
    "resume-adjuster": {
      "command": "python",
      "args": ["/你的绝对路径/server.py"]
    }
  }
}
```

3. 重载 Cline,在对话中粘贴 JD,Agent 自动走完四步流程。

### 运行评测

```bash
# Promptfoo 5×3 矩阵评测(--no-cache 避免旧缓存污染结果)
npx promptfoo eval -c tests/promptfooconfig.yaml --no-cache

# 查看评测看板
npx promptfoo view

# LangSmith 白盒追踪
python tests/langsmith/run_langsmith_eval.py
```

---

## 技术栈

| 类别 | 技术 |
|------|------|
| AI 协议 | MCP(Model Context Protocol) |
| 模型 | Claude(Anthropic)/ DeepSeek |
| 客户端 | Cline + VSCode |
| 评测框架 | Promptfoo |
| 链路追踪 | LangSmith |
| 后端 | Python / asyncio |
| 文档生成 | docx.js |

---

## 📄 License

MIT