云计算百科
云计算领域专业知识百科平台

基于 LangGraph 的多智能体简历优化系统(一):架构总览与技术选型

基于 LangGraph 的多智能体简历优化系统(一):架构总览与技术选型

系列文章之一。本文介绍项目背景、技术选型决策、整体架构设计和 13 个智能体的全景概览。

0. 项目背景

求职季,简历是第一步。但大多数人的简历存在这些问题:

  • 项目描述空洞:“负责后端开发”、“参与系统优化”——读完不知道具体做了什么
  • 缺乏量化数据:没有数字支撑,说服力为零
  • STAR 结构不清晰:背景、任务、行动、结果混在一起,HR 30 秒扫完就划走了
  • 技术栈堆砌无重点:Java、Spring、MySQL、Redis 全写上,但不知道你在哪个环节用了什么

我做了「悟简 AI 求职助手」——一个基于 LangGraph 多智能体架构的简历优化系统。

它不是简单地用 LLM 改写一段话,而是通过 RAG 事实约束引擎 确保"只优化、不编造",同时覆盖简历优化、模拟面试、岗位匹配、JD 解析等 13 个求职场景。

项目已上线,支持用户注册、会员付费、管理后台,完整全栈可运行。


1. 为什么选 LangGraph?

做 AI 应用,智能体编排框架有很多选择:

框架特点为什么没选
LangChain Agent 自动规划+工具调用 不可控,LLM 经常跑偏,不适合生产环境
AutoGen 多 Agent 对话 适合研究场景,工程化成本高
CrewAI 角色分工明确 灵活度不够,自定义工作流受限
LangGraph 图结构定义工作流,状态可控 ✅ 状态可追踪、流程可调试、支持条件分支

LangGraph 的核心优势是 StateGraph——用有向图定义工作流,每个节点接收 State、处理、输出新的 State,节点之间的边可以带条件判断。

这正好符合简历优化的需求:

用户上传简历 → 解析 → 提取结构 → 六维评分 → 风险诊断 → STAR重写 → 事实校验 → 组装输出

每一步都是确定的,不需要 LLM 自己"想"下一步做什么。流程可控、结果可复现。


2. 技术选型

2.1 后端

FastAPI 是必然选择。异步高性能、原生支持 SSE(Server-Sent Events)流式输出、Pydantic 自动校验——和 LangGraph 的生态完美契合。

LLM 调用 用的是 langchain-openai 包,但实际对接的是 DeepSeek 的 OpenAI 兼容接口。原因很简单:DeepSeek 的性价比远高于 GPT-4,而且接口完全兼容,代码不用改。

流式输出 用 SSE(sse-starlette),前端用 EventSource 接收,逐字渲染,用户体验好。

2.2 前端

Vue 3 CDN 模式,零构建。三个 HTML 文件直接部署到 Nginx 或 FastAPI 静态文件服务。

为什么不用 Vite + React?因为这个项目是个人项目 + 上线即部署,没有 CI/CD 流程,没有构建步骤,一个 python -m uvicorn 就能跑起来。Vue 3 的 CDN 版本(vue.global.prod.js)足够用,响应式、组件化、事件绑定都没问题。

三个页面各司其职:

页面路径用途
首页 / (marketing.html) 产品展示、功能卡片、价格方案、登录注册
工具箱 /index.html 13 个工具的 Tab 切换,文件上传、结果展示、流式输出
管理后台 /admin.html 用户管理、订单审核、邀请码管理、价格配置

2.3 文档处理

PyMuPDF 解析 PDF 简历——提取文本、表格、段落结构。
python-docx 生成优化后的 DOCX 文件——用模板引擎填充内容,保留原始排版。

2.4 检索与持久化

BM25 本地检索:不需要向量数据库,用 TF-IDF 变体 BM25 做关键词检索,轻量且够用。知识库里的 STAR 案例(12 个高质量范例)通过 BM25 检索注入到 Prompt 中,这就是项目的 RAG 部分。

JSON 文件持久化:用户数据、订单、邀请码、验证码全部存 JSON 文件。不需要 PostgreSQL / MySQL,单文件存储,部署简单。当然生产环境建议迁移到关系型数据库,但作为个人项目+小流量,JSON 完全够用。


3. 整体架构

3.1 系统架构图

┌─────────────────────────────────────────────────────────────┐
│ 前端 (Vue 3) │
│ marketing.html index.html admin.html │
└──────────────────────┬──────────────────────────────────────┘
│ HTTP / SSE

┌─────────────────────────────────────────────────────────────┐
│ FastAPI 后端 (main.py) │
│ CORS · 认证中间件 · 路由分发 · 静态文件服务 │
└──────────────────────┬──────────────────────────────────────┘

┌──────────────┼──────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────┐ ┌──────────────┐
│ API 路由层 │ │ 智能体层 │ │ 基础设施层 │
│ 20 个模块 │ │ 13 个 │ │ LLM/检索/ │
│ /api/v1/* │ │ Agent │ │ 导出/通知 │
└──────┬───────┘ └────┬─────┘ └──────┬───────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ 数据层 (JSON 文件) │
│ users.json · orders.json · invite_codes.json · … │
└─────────────────────────────────────────────────────────────┘

3.2 项目目录结构

resume-star-optimizer/
├── backend/
│ ├── main.py # FastAPI 入口
│ ├── config.py # 配置中心 (pydantic-settings)
│ ├── agents/ # 13 个 LangGraph 智能体
│ │ ├── resume_optimizer/ # 简历优化(核心,8节点)
│ │ ├── resume_builder/ # 简历生成(3节点)
│ │ ├── job_match/ # 岗位匹配
│ │ ├── mock_interview/ # 模拟面试
│ │ ├── cover_letter/ # 求职信生成
│ │ ├── jd_parser/ # JD 解析
│ │ ├── offer_compare/ # Offer 对比
│ │ ├── resume_version/ # 版本管理
│ │ ├── application_helper/ # 网申助手
│ │ ├── written_test/ # 笔试辅助
│ │ ├── application_tracker/ # 投递看板
│ │ ├── kb_quiz/ # 知识库出题
│ │ └── interview_review/ # 面试复盘
│ ├── api/
│ │ ├── router.py # 路由聚合
│ │ └── v1/ # 20 个 API 模块
│ ├── core/ # 基础设施(~22 个模块)
│ │ ├── llm_factory.py # LLM 工厂
│ │ ├── fact_constraint.py # 事实约束引擎(核心创新)
│ │ ├── retriever.py # BM25 检索
│ │ ├── docx_export.py # DOCX 导出
│ │ ├── docx_template_engine.py # DOCX 模板引擎
│ │ ├── notify.py # 邮件/短信通知
│ │ ├── auth_store.py # 用户认证存储
│ │ └── …
│ ├── data/ # 静态数据资产
│ │ ├── kb/star_cases.json # 12 个 STAR 案例
│ │ ├── templates/star_templates.json
│ │ ├── templates/action_verbs.json
│ │ └── …
│ └── outputs/ # 运行时数据
│ └── account/ # JSON 数据库
├── frontend/ # Vue 3 前端
│ ├── marketing.html # 首页
│ ├── index.html # 工具箱
│ ├── admin.html # 管理后台
│ └── vendor/vue.global.prod.js
└── requirements.txt

3.3 智能体统一结构

每个智能体遵循一致的文件结构:

文件职责
state.py Pydantic 定义输入/输出状态(TypedDict 或 BaseModel)
prompts.py System Prompt + 任务 Prompt(所有提示词集中管理)
nodes.py 节点逻辑(LLM 调用 + 规则引擎双路径)
rules.py 规则引擎兜底(LLM 不可用时的 fallback)
graph.py StateGraph 构建(定义节点、边、条件分支)

这种结构的好处:

  • 可维护:每个智能体独立,改一个不影响其他
  • 可测试:每个节点可以单独测试
  • 可扩展:新增智能体只需复制模板,改内容

  • 4. 13 个智能体全景

    #智能体节点数核心能力使用频率
    1 简历优化 8 六维评分 + STAR 重写 + 事实校验 ⭐⭐⭐⭐⭐ 核心
    2 简历生成 3 结构化输入 → 四段式项目经历 → 完整简历 ⭐⭐⭐⭐
    3 岗位匹配 3+ JD 四类拆解 + 匹配度计算 + 定制化建议 ⭐⭐⭐⭐
    4 模拟面试 3+ 多轮面试 + 技术/简历深挖/HR 多模式 + 评分 ⭐⭐⭐
    5 求职信生成 基于 JD + 简历生成个性化求职信 ⭐⭐⭐
    6 JD 解析 硬性要求 / 技能关键词 / 业务期望 / 隐形要求 ⭐⭐⭐
    7 Offer 对比 五维评分识破"高薪加班陷阱" ⭐⭐
    8 版本管理 简历多版本对比,关联投递看板追踪反馈 ⭐⭐
    9 笔试辅助 高频考点整理 + 业务问答题库 ⭐⭐
    10 投递看板 投递追踪 + 岗位通过率 + AI 洞察 ⭐⭐
    11 知识库 上传面试资料 → 检索 → 注入面试/笔试出题 ⭐⭐
    12 面试复盘 面试后 AI 分析 + 改进建议
    13 网申助手 网申信息智能填写辅助

    其中简历优化是核心中的核心,占了整个系统 60% 的代码量和 Prompt 工程量。后续系列文章会重点拆解这个智能体的实现细节。


    5. 数据流总览

    不管哪个智能体,数据流都遵循一个模式:

    用户请求 (HTTP)
    → API 路由层 (参数校验)
    → 智能体层 (LangGraph 流水线)
    → LLM 调用 (DeepSeek)
    → 规则引擎 (可选 fallback)
    → 后处理 (事实校验 / 格式化)
    → 返回结果 (JSON / SSE 流式 / 文件下载)

    以简历优化为例的完整数据流:

    用户上传 PDF 简历
    → PyMuPDF 解析文本
    → 提取原始事实(数字/技术词/关键词)
    → LangGraph 8 节点流水线
    ├─ parse_input: 解析输入格式
    ├─ extract_structured: Markdown + JSON 结构化提取
    ├─ star_diagnose: 六维评分 + 宏观分析
    ├─ diagnose_issues: 逐条诊断风险
    ├─ star_optimize: STAR 重写(结合 RAG 约束)
    ├─ verify_facts: 事实校验(过滤编造内容)
    ├─ generate_summary: 生成优化总结
    └─ assemble_output: 组装最终简历
    → python-docx 生成 DOCX 文件
    → SSE 流式返回给用户


    6. 下一步

    本文介绍了项目的整体架构和技术选型。接下来:

    • 系列二:深入讲解 RAG 事实约束引擎——这是整个项目最有价值的创新,保证 AI 只优化不编造
    • 系列三:拆解 LangGraph 简历优化流水线——8 个节点、六维评分、STAR 重写的详细实现
    • 系列四:全栈开发实战——FastAPI + Vue3 的前后端联调、部署上线
    • 系列五:踩坑记录与工程实践——生产环境中的各种坑和解决方案

    *作者:达不溜记 | 项目地址:https://gitee.com/qinghe-sixteen/multiagentmianshizhu

    如果这篇文章对你有帮助,欢迎 Star / 关注 / 转发,你的支持是我持续输出的动力。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 基于 LangGraph 的多智能体简历优化系统(一):架构总览与技术选型
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!