news 2026/9/11 13:08:43

Resume Matcher 深度指南:AI 驱动的简历定制引擎,架构、安装与多 LLM 实战配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Resume Matcher 深度指南:AI 驱动的简历定制引擎,架构、安装与多 LLM 实战配置

Resume Matcher 深度指南:AI 驱动的简历定制引擎,架构、安装与多 LLM 实战配置

【免费下载链接】Resume-MatcherThe #1 AI Harness for Building Resumes, PDFs, Cover Letters & more, locally with 100+ LLMs support.项目地址: https://gitcode.com/GitHub_Trending/re/Resume-Matcher

Resume Matcher 是一个以"Master Resume(母版简历)"为核心的 AI 简历定制开源项目:先维护一份完整母版简历,再针对每个具体职位描述(Job Description, JD)自动生成定制化简历、求职信(Cover Letter)与面试准备内容,支持本地与云端 100+ 种 LLM。本文将以仓库 README.md 与 SETUP.md 为主线,结合后端源码(config.py、llm.py、main.py)与部署配置(docker-compose.yml、start.sh),完整讲解其工作原理、六大核心功能、本地安装、多 AI Provider 配置、Docker 部署与故障排查,读完即可从零跑通并深度定制自己的简历工作流。

一、项目定位与核心工作流

Resume Matcher 的设计哲学是一次母版、处处定制:你不必为每次投递手工重写简历,而是维护一份内容完整、覆盖你全部经历能力的 Master Resume,之后每一次投递都只针对目标 JD 做"定向裁剪"。

官方给出的标准工作流(见 README.md 的 Getting Started 一节)共六步:

  1. Upload:上传你的 Master Resume(支持 PDF 或 DOCX)
  2. Paste:粘贴你正在投递的目标职位描述(JD)
  3. Review:审阅 AI 生成的改进建议与定制化内容
  4. Cover Letter:为本次投递生成求职信,并可生成可选的面试准备材料
  5. Customize:调整版式与章节,使其符合你的个人风格
  6. Export:用你偏好的模板导出专业 PDF

这套流程在代码层的落点是前端页面路由(app/(default)) 下的dashboardbuildertailorresume-wizardtrackersettings等页面)与后端 API 路由(routers 下的resumesjobsenrichmentapplicationsresume_wizard等,均在 main.py 中以/api/v1前缀统一挂载)。

二、六大核心功能全景

2.1 Master Resume:母版简历

项目的起点是一份"主简历"。README 用一张上传输入示意图说明了这一入口——你既可以直接上传现有简历文件,也可以把过往经历结构化录入,作为后续所有定制动作的内容底座。

从后端数据层看,主简历由 database.py 中的Resume模型承载,并维护"单主简历"(single-master)不变量:数据库层通过_master_resume_lock串行化主简历提升操作,同时用部分唯一索引作为存储级兜底。这意味着系统中始终只有一份简历会被标记为 Master。

2.2 Resume Builder:职位定制化构建器

粘贴一份 JD,AI 即为你生成针对该职位的定制简历。README 明确指出你可以在 Builder 中:

  • 修改 AI 建议的内容
  • 添加/删除章节
  • 通过拖拽(drag-and-drop)重排章节顺序
  • 从多种简历模板中选择版式

前端实现上,拖拽重排依赖@dnd-kit(见 package.json),章节级拖拽组件位于 components/builder/draggable-section-wrapper.tsx;Builder 主界面位于 components/builder/resume-builder.tsx。后端对应"定制/改进"(tailoring / improve)流程,由 services/improver.py 实现,并受REQUEST_TIMEOUT_SECONDS(默认 240 秒,可配置范围 [30, 1800] 秒)超时保护——该超时必须在后端asyncio.wait_for、Next.jsproxyTimeout与前端AbortController三层保持一致,否则任一层先超时都会导致请求被静默切断(config.py 中的注释明确记录了这一问题)。

2.3 Cover Letter 生成器

基于 JD 与简历内容生成定制化求职信。后端服务位于 services/cover_letter.py,前端有 components/builder/cover-letter-editor.tsx 与对应预览组件,并提供独立的打印路由(app/print/cover-letter/[id])用于 PDF 化输出。

2.4 Interview Prep:面试准备

README 说明:可为已保存的定制简历生成结构化、以简历内容为依据的面试准备材料。使用方式有两种:在 Builder 的 "Interview Prep" 标签页按需生成,或在 Settings 中开启自动生成。后端服务位于 services/interview_prep.py,其输出结构由 llm.py 中的截断检测定义,包含role_fit_analysis(岗位匹配度分析)、resume_questions(基于简历的提问)、project_follow_ups(项目追问)、skill_gaps(技能差距)、talking_points(谈话要点)五个必填键。

2.5 简历评分与关键词高亮

针对 JD 分析你的简历,输出匹配分数、关键词高亮与改进建议。README 提供了真实运行界面截图:

前端展示组件为 components/builder/jd-comparison-view.tsx、components/builder/highlighted-resume-view.tsx 以及 components/tailor/ats-score-card.tsx;关键词匹配的纯前端逻辑在 lib/utils/keyword-matcher.ts,并有对应单元测试 tests/keyword-matcher.test.ts。

2.6 PDF 导出与模板系统

定制后的简历与求职信均可导出为 PDF,底层由 Playwright 驱动的 Headless Chromium 渲染(技术栈表明确标注,前端打印路由位于 app/print)。Docker 启动脚本 start.sh 会在容器内检查并自动安装 Playwright Chromium,若安装失败会明确告警"PDF export may not work"。

仓库内置 4 套 PDF 模板,README 的模板表完整如下:

模板名称预览描述
Classic Single Column传统简洁版式,适合大多数行业。 查看 PDF
Modern Single Column当代设计,注重可读性与美观。 查看 PDF
Classic Two Column结构化双栏版式,章节区分清晰。 查看 PDF
Modern Two Column双栏流线型设计,组织更有序。 查看 PDF

前端模板注册机制见 components/resume(resume-single-column.tsxresume-two-column.tsxresume-modern.tsxresume-modern-two-column.tsx等),CSS 样式体系位于 components/resume/styles,并有 tests/template-registration.test.ts 与 tests/resume-clean.test.tsx 等测试保障。想扩展新模板可参考 docs/agent/features/adding-resume-templates.md。

2.7 国际化(i18n)

README 明确了两层国际化能力:

  • 多语言 UI:界面支持英语、西班牙语、简体中文、日语、巴西葡萄牙语
  • 多语言内容:简历与求职信内容可按你的偏好语言生成

前端语言包位于 messages(en.jsones.jsonfr.jsonja.jsonpt-BR.jsonzh.json),本地化上下文与工具在 lib/i18n 与 lib/context/language-context.tsx,仓库还提供 scripts/check_locale_parity.py 与测试 tests/i18n-locale-parity.test.ts 来保证各语言包键值对齐。

2.8 Roadmap:规划中的功能

README 列出的未来方向包括:

  • AI Canvas:面向"数据驱动简历内容"的撰写画布
  • Email template generator:求职邮件模板生成器
  • Multi-job description optimization:多职位描述联合优化

三、本地安装与快速启动

3.1 前置条件

README 与 SETUP.md 给出的环境要求如下:

工具版本要求说明
Python3.13+后端运行环境
Node.js22+前端运行环境
npm10+随 Node.js 附带
uvLatestPython 依赖管理(uv sync
Git任意克隆仓库

uv 的安装方式(macOS/Linux 与 Windows):

# macOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (PowerShell) powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # 或通过 pip pip install uv

3.2 快速启动(双终端)

README 与 SETUP 给出的最快启动路径:

# 克隆仓库 git clone https://gitcode.com/GitHub_Trending/re/Resume-Matcher.git cd Resume-Matcher # 终端 1:后端 cd apps/backend cp .env.example .env # 配置你的 AI Provider uv sync # 安装依赖 uv run app # 终端 2:前端 cd apps/frontend npm install npm run dev

后端默认监听http://0.0.0.0:8000,前端开发服务器(Next.js 16 + Turbopack)默认监听http://localhost:3000。启动后打开http://localhost:3000,在 Settings 页配置 AI Provider 即可使用。

3.3 后端.env配置详解

.env模板位于 apps/backend/.env.example。以 OpenAI 为例的最小配置(来自 SETUP.md):

LLM_PROVIDER=openai LLM_MODEL=gpt-5-nano-2025-08-07 LLM_API_KEY=sk-your-api-key-here # 本地开发保持默认即可 HOST=0.0.0.0 PORT=8000 FRONTEND_BASE_URL=http://localhost:3000 CORS_ORIGINS=["http://localhost:3000", "http://127.0.0.1:3000"]

后端配置由 config.py 中的Settings类(基于pydantic-settings)从环境变量加载,全部可配置项与默认值如下:

环境变量默认值说明
LLM_PROVIDERopenai可选openai/openai_compatible/anthropic/openrouter/gemini/deepseek/groq/ollama(空值回退为 openai)
LLM_MODELgpt-5-nano-2025-08-07默认模型名
LLM_API_KEYAPI 密钥,可留空由 UI 配置或使用本地无鉴权服务
LLM_API_BASENone自定义 API 端点(Ollama、代理、OpenAI 兼容服务)
REASONING_EFFORTNone推理强度:minimal/low/medium/highNone表示不发送该参数(最大兼容性,LiteLLM 会为不支持的模型自动丢弃)
HOST0.0.0.0后端监听地址
PORT8000后端监听端口
RELOADfalse开发热重载开关(RELOAD=true uv run app
LOG_LEVELINFO应用日志级别:CRITICAL/ERROR/WARNING/INFO/DEBUG
LOG_LLMWARNINGLiteLLM 日志级别(同上取值)
FRONTEND_BASE_URLhttp://localhost:3000前端地址,PDF 生成时后端回调前端使用
CORS_ORIGINS["http://localhost:3000", "http://127.0.0.1:3000"]CORS 白名单(JSON 数组),FRONTEND_BASE_URL会被自动追加
REQUEST_TIMEOUT_SECONDS240单次定制/改进请求硬超时,被钳制在 [30, 1800] 秒

值得注意的源码细节:LLM_PROVIDER为空时会自动回退为openai(config.py);LOG_LEVEL/LOG_LLM若传非法值会在启动时抛出ValueError而非静默接受(同文件 L230-L237、L284-L291);REQUEST_TIMEOUT_SECONDS则对非法输入回退 240 并钳制范围(L256-L268)。

3.4 前端配置

前端通常无需环境文件;仅当后端运行在不同端口时才需要(SETUP.md):

cd apps/frontend cp .env.sample .env.local

四、AI Provider 配置深度解析

4.1 支持的 Provider 一览

源码层面,llm_provider是严格枚举(config.py):openaiopenai_compatibleanthropicopenroutergeminideepseekgroqollama共 8 种。README 的对照表与 SETUP.md 的配置模板合并如下:

Provider位置LLM_PROVIDER/LLM_MODEL配置示例备注
Ollama本地ollama/gemma3:4bLLM_API_BASE=http://localhost:11434免费,运行在你的机器上
OpenAI云端openai/gpt-5-nano-2025-08-07GPT-5 Nano、GPT-4o 等
Anthropic云端anthropic/claude-haiku-4-5-20251001Claude Haiku 4.5
Google Gemini云端gemini/gemini/gemini-3-flash-previewGemini 3 Flash
OpenRouter云端openrouter/deepseek/deepseek-chat聚合多模型
DeepSeek云端deepseek/deepseek-chatDeepSeek Chat
OpenAI-Compatible本地openai_compatible/llama-3.1-8bLLM_API_BASE=http://localhost:8080/v1llama.cpp、vLLM、LM Studio 等暴露 OpenAI Chat Completions API 的服务,API Key 可选

Anthropic 的完整.env示例:

LLM_PROVIDER=anthropic LLM_MODEL=claude-haiku-4-5-20251001 LLM_API_KEY=sk-ant-your-key-here

4.2 本地免费方案:Ollama

不想产生 API 费用时,用 Ollama 本地跑模型:

# 1. 安装 Ollama(官方站点下载) # 2. 拉取模型 ollama pull gemma3:4b # 其他选择:llama3.2、mistral、codellama、neural-chat # 3. 配置 .env
LLM_PROVIDER=ollama LLM_MODEL=gemma3:4b LLM_API_BASE=http://localhost:11434 # Ollama 不需要 LLM_API_KEY
# 4. 确保 Ollama 正在运行 ollama serve

4.3 底层实现:LiteLLM 多 Provider 路由

所有 Provider 的请求都经由 llm.py 封装到 LiteLLM,几处关键实现值得了解:

  • 模型名前缀get_model_name会为各 Provider 自动添加 LiteLLM 前缀,例如openai_compatibleopenai/anthropic/gemini/deepseek/groq/ollama_chat/(Ollama 走/api/chat以支持 messages 数组),OpenRouter 始终强制openrouter/前缀以支持嵌套模型名(如openrouter/anthropic/claude-3.5-sonnet)。若模型名已带已知前缀则原样透传(llm.py)。
  • api_base规范化_normalize_api_base会按 Provider 剥离重复的/v1后缀,防止出现/v1/v1/...404(如 Anthropic、Gemini、OpenRouter 各自内部会追加/v1/messages/v1/models/.../v1);OpenAI / OpenAI 兼容端点则原样保留用户粘贴的 URL(llm.py)。
  • 重试与熔断:使用 LiteLLMRouternum_retries=3,按错误类型区分重试策略:RateLimitError重试 3 次、超时与 5xx 重试 2 次、鉴权/坏请求/内容策略违规不重试;单部署下禁用冷却(cooldown),避免瞬时故障导致后端整体黑屏(llm.py)。Router 按配置指纹缓存,Provider/模型/Key/Base 变化时自动重建(L507-L526)。
  • 能力探测_supports_temperature_supports_json_mode查询 LiteLLM 模型注册表判断参数是否受支持,未注册的本地模型(Ollama 自定义模型)保守跳过温度参数;JSON 模式对 Ollama 始终放行(原生format="json")。已知特例:claude-opus-4*不发送 temperature、Moonshotkimi-k2.6仅允许 temperature=1(L871-L920)。
  • 思考模型兼容_extract_message_textcontentreasoning_content(DeepSeek R1、OpenAI o1/o3)→thinking(Anthropic extended thinking)的顺序提取文本,推理型模型也可直接使用;complete还会剥离...思考标签(L971-L982)。
  • JSON 安全_extract_json带递归深度(10 层)与内容大小(1MB)双重上限;get_safe_max_tokens会把请求的max_tokens钳制到模型实际输出上限,未注册模型回退保守的 4096(L760-L804)。

4.4 API Key 解析优先级与安全设计

resolve_api_key(llm.py)是密钥解析的唯一真源,优先级为:顶层api_key>api_keys[provider]> 环境变量/设置默认值。关键安全例外openai_compatibleollama属于"本地无鉴权"Provider,会跳过环境变量回退——这是为了防止你在LLM_API_KEY里存了付费 OpenAI Key,结果被误发给本地服务。

  • API Key 在磁盘上不落明文config.json只存非密钥配置,密钥以加密密文存入 SQLite 的api_keys表(config.py 保存时剥离、L58-L73 解密注入);启动时migrate_legacy_keys会把历史明文密钥一次性折叠进加密存储并清除明文(L112-L149)。
  • 健康检查失败时返回给前端的错误信息会经_scrub_secrets打码sk-...AIza...Bearer ...等密钥特征串,防止通过 Settings 页面反向读取密钥(llm.py)。
  • OpenAI 兼容服务留空 Key 时自动替换为哨兵值sk-no-key,以满足 OpenAI 客户端非空校验(L117-L131)。

4.5 在 UI 中配置与验证

官方推荐通过 Settings 界面配置(数据持久化于数据卷/存储,重启不丢失)。首次使用清单:

  1. 打开http://localhost:3000/settings
  2. 选择 AI Provider
  3. 输入 API Key(或配置 Ollama)
  4. 点击 "Save Configuration"
  5. 点击 "Test Connection" 验证连通性
  6. 返回 Dashboard 上传第一份简历

"Test Connection" 调用的正是后端check_llm_health(llm.py):它会发起一次最小对话(max_tokens=64、超时 30 秒),并区分api_key_missingempty_contentduplicate_v1_pathnot_found_404html_response等错误码,方便快速定位(例如duplicate_v1_path即提示你LLM_API_BASE里多写了/v1)。

五、Docker 部署

5.1 官方镜像与单端口架构

官方 Docker 镜像发布在ghcr.io/srbhr/resume-matchersrbhr/resume-matcher,支持linux/amd64linux/arm64。容器架构为"单公共端口":前端监听 3000,后端内部监听 8000,Next.js 将/api反向代理到后端,因此你只需暴露一个 3000 端口(docker-compose.yml 与 start.sh 中的FRONTEND_PORT=3000BACKEND_PORT=8000体现这一设计)。

5.2 快速启动

# 从发布镜像启动容器 docker compose up -d # 查看日志 docker compose logs -f # 停止容器 docker compose down

直接运行镜像(README 方式,数据持久化到命名卷):

docker run --name resume-matcher \ -p 3000:3000 \ -v resume-data:/app/backend/data \ ghcr.io/srbhr/resume-matcher:latest

生产环境建议固定版本标签,例如ghcr.io/srbhr/resume-matcher:1.2.0ghcr.io/srbhr/resume-matcher:1.2

5.3 环境变量与端口定制

变量默认值说明
PORT3000宿主机端口(映射到容器内 3000)
LOG_LEVELINFO应用/Uvicorn 日志级别(ERROR/WARNING/INFO/DEBUG
LOG_LLMWARNINGLiteLLM 日志级别
LLM_PROVIDERopenaiAI Provider
LLM_MODEL使用的模型(推荐在 Settings UI 配置)
LLM_API_KEYAPI Key(推荐在 Settings UI 配置)
LLM_API_BASE自定义 API 端点(Ollama 或代理)
# 只改宿主机端口(容器内保持 3000) PORT=4000 docker compose up -d

注意:LOG_LEVELLOG_LLM的修改需要重启容器才生效。

5.4 Docker Secrets(*_FILE变量)

容器支持 Postgres 风格的*_FILEDocker Secrets 机制(实现在 start.sh 的file_env函数中):敏感值可挂载为文件后通过路径传入。

LLM_API_KEY_FILE=/run/secrets/llm_api_key docker compose up -d

支持的*_FILE变体:

普通变量*_FILE变体
LOG_LEVELLOG_LEVEL_FILE
LOG_LLMLOG_LLM_FILE
LLM_PROVIDERLLM_PROVIDER_FILE
LLM_MODELLLM_MODEL_FILE
LLM_API_KEYLLM_API_KEY_FILE
LLM_API_BASELLM_API_BASE_FILE

规则:普通变量与其*_FILE变体二者只能用其一;若同时设置,容器会以明确错误退出(start.sh)。

5.5 日志级别配置与安全警告

LOG_LEVEL=INFO LOG_LLM=DEBUG docker compose up -d

安全警告LOG_LLM=DEBUG会让 LiteLLM 以明文记录 API Key,严禁在生产或共享环境使用 DEBUG 级别,默认的WARNING是安全的。此外 LiteLLM 内部还会读取LITELLM_LOG控制 handler 级过滤;LOG_LLM设置的是 logger 级别,两者必须同时放行日志才会出现,若你按 LiteLLM 文档设置了LITELLM_LOG,请确保LOG_LLM处于相等或更低级别。

5.6 Ollama 与 Docker 协同

Ollama 跑在宿主机上时,容器内无法通过localhost访问宿主机服务,需使用 Docker 的宿主机别名:

# 方式一:环境变量 LLM_API_BASE=http://host.docker.internal:11434 docker compose up -d # 方式二:README 的 docker run 方式,同样把 URL 换成 host.docker.internal

然后在 Settings UI 中将 Ollama 配置为 Provider。README 明确提示:"Using Ollama with Docker? Usehttp://host.docker.internal:11434as the Ollama URL instead oflocalhost."

5.7 访问端点

容器启动后可访问:

URL说明
http://localhost:3000主应用(Dashboard)
http://localhost:3000/settings配置 AI Provider
http://localhost:3000/api/v1/health后端健康检查(liveness,不调用 LLM)
http://localhost:3000/docs交互式 API 文档(FastAPI Swagger UI)

源码层面的健康检查有两个层级(routers/health.py):GET /api/v1/health仅返回{"status": "healthy"}作为 Docker HEALTHCHECK 探针;GET /api/v1/status则综合 LLM 连通性、数据库统计(简历数、JD 数、改进次数、是否有 Master Resume)给出readysetup_required状态,且各子系统检查互相隔离——LLM 探测或数据库统计失败只降级对应字段,不会让整个端点 500。

六、常用命令速查

后端命令

cd apps/backend # 开发服务器(自动重载) RELOAD=true uv run app # 生产服务器 uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 # 安装依赖 uv sync # 安装含开发依赖(用于测试) uv sync --group dev # 运行测试 uv run pytest # 查看数据文件(SQLite 数据库等) ls -la data/

前端命令

cd apps/frontend # 开发服务器(Turbopack 快速刷新) npm run dev # 生产构建 npm run build # 生产启动 npm run start # 代码检查 npm run lint # Prettier 格式化 npm run format # 换端口启动 npm run dev -- -p 3001 # 单元测试(Vitest) npm run test

数据管理

README 技术栈表标注数据库为 TinyDB(JSON 文件存储),但当前源码已演进为 SQLite:数据层 database.py 是"行为保持的 TinyDB 替换",Database门面保留了原方法名与签名、返回纯 dict,SQLite 文件位于apps/backend/data/resume_matcher.db;同时保留双引擎设计——异步引擎(aiosqlite)服务文档表与应用表,同步引擎服务加密的api_keys表(因为在 LLM 热路径get_llm_config → resolve_api_key上是同步读取)。启动时 main.py 会幂等执行 scripts/migrate_tinydb_to_sqlite.py,将遗留 TinyDB 数据自动迁入 SQLite(迁移失败会快速失败而非以空库启动,避免被误认为数据丢失)。

# 查看数据文件 ls apps/backend/data/ # 备份数据 cp -r apps/backend/data apps/backend/data-backup # 重置(从零开始;危险操作,请先备份) rm -rf apps/backend/data

七、故障排查速查表

现象错误线索解决方案
后端无法启动ModuleNotFoundErroruv run uvicorn app.main:app --reload启动,确保依赖经uv sync安装
后端无法启动LLM_API_KEY not configured检查.env中是否填写了所选 Provider 的有效 Key
前端页面加载失败ECONNREFUSED后端未启动,先启动后端:cd apps/backend && uv run uvicorn app.main:app --reload
前端构建/TS 报错编译错误清空 Next.js 缓存后重启:rm -rf apps/frontend/.next && npm run dev
PDF 下载失败Cannot connect to frontend for PDF generation① 前端必须运行;②.envFRONTEND_BASE_URL与前端地址一致;③CORS_ORIGINS包含前端地址。前端跑在 3001 端口时:FRONTEND_BASE_URL=http://localhost:3001CORS_ORIGINS=["http://localhost:3001","http://127.0.0.1:3001"]
Ollama 连接失败Connection refused to localhost:11434ollama list确认服务在跑;② 必要时ollama serve启动;③ollama pull gemma3:4b确认模型已下载

八、项目结构与技术栈

8.1 技术栈

组件技术源码证据
后端FastAPI、Python 3.13+、LiteLLMapps/backend/pyproject.toml、llm.py
前端Next.js 16、React 19、TypeScriptpackage.json
数据库SQLite(SQLAlchemy,自 TinyDB 迁移)database.py、scripts/migrate_tinydb_to_sqlite.py
样式Tailwind CSS 4、Swiss International Stylepackage.json、docs/portable/swiss-design-system/README.md
PDFPlaywright 驱动的 Headless Chromiumpdf.py、start.sh

8.2 目录结构

Resume-Matcher/ ├── apps/ │ ├── backend/ # Python FastAPI 后端 │ │ ├── app/ │ │ │ ├── main.py # 应用入口(路由挂载、生命周期、数据迁移) │ │ │ ├── config.py # pydantic-settings 环境配置 │ │ │ ├── database.py # SQLite (SQLAlchemy) 数据层 │ │ │ ├── llm.py # LiteLLM 多 Provider 集成 │ │ │ ├── pdf.py # Playwright PDF 渲染 │ │ │ ├── crypto.py # API Key 加解密 │ │ │ ├── routers/ # API 端点(resumes/jobs/enrichment/applications/...) │ │ │ ├── services/ # 业务逻辑(improver/cover_letter/ats/parser/refiner/...) │ │ │ ├── schemas/ # Pydantic 数据模型 │ │ │ └── prompts/ # LLM Prompt 模板 │ │ ├── data/ # SQLite 数据库与 config.json(自动创建) │ │ ├── .env.example # 环境变量模板 │ │ └── pyproject.toml # Python 依赖 │ │ │ └── frontend/ # Next.js React 前端 │ ├── app/ # 页面(dashboard/builder/tailor/tracker/settings/...) │ ├── components/ # 可复用组件(builder/preview/resume/ui/...) │ ├── hooks/ # 自定义 Hooks(use-enrichment-wizard 等) │ ├── lib/ # 工具与 API 客户端 │ ├── messages/ # 多语言语言包 │ ├── .env.sample # 环境变量模板 │ └── package.json # Node.js 依赖 │ ├── docs/ # 额外文档(agent 架构指南、portable 设计系统等) ├── docker-compose.yml # Docker Compose 配置 ├── Dockerfile # 容器构建 └── README.md # 项目总览

8.3 进一步阅读

  • SETUP.md:完整安装指南(本文章节三至七的原始出处)
  • docs/agent/architecture/backend-guide.md:后端架构与 API 细节
  • docs/agent/architecture/frontend-workflow.md:用户流程与组件架构
  • docs/agent/features/enrichment.md:简历内容增强(Enrichment)功能设计
  • docs/agent/features/jd-match.md:JD 匹配与关键词高亮机制
  • docs/agent/features/application-tracker.md:职位申请追踪器(Kanban 看板)
  • docs/portable/swiss-design-system/README.md:Swiss International Style UI 设计系统
  • apps/backend/tests 与 apps/frontend/tests:覆盖 LLM 契约、健康检查、PDF 渲染、i18n 等环节的测试用例,可作为理解各功能预期行为的权威参考

九、结语

Resume Matcher 把"简历投递"这件事工程化为一条可重复的流水线:Master Resume 作为单一事实来源,LLM 负责针对 JD 的定向改写、求职信生成、面试准备与评分建议,模板与 PDF 导出解决最终交付格式,而 LiteLLM 抽象层让本地 Ollama 到云端 Claude/GPT/Gemini/DeepSeek 等 100+ 模型的切换只需改一个环境变量。无论你是想本地免费跑通整套流程的求职者,还是希望理解"多 Provider LLM 应用 + 前后端分离 + 容器化"工程架构的开发者,都可以以本仓库的 README.md、SETUP.md 与上述源码路径为索引,逐步深入。

【免费下载链接】Resume-MatcherThe #1 AI Harness for Building Resumes, PDFs, Cover Letters & more, locally with 100+ LLMs support.项目地址: https://gitcode.com/GitHub_Trending/re/Resume-Matcher

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 13:02:20

AI Coding新玩法:200个Agent并行协作的工程实践与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 13:01:57

经典ASP问卷调查系统源码部署与二次开发实战指南

简介:基于ASP技术的在线问卷调查系统源码,是面向Web开发初学者的完整练习项目,也可供有经验者了解经典ASP架构。压缩包内含133个文件,以41份ASP脚本和46份JavaScript文件为主体,配合CSS、HTML页面模板、GIF、PNG与SVG等…

作者头像 李华
网站建设 2026/9/11 13:01:44

Linux驱动开发系统路径:从内核模块到设备树与I2C/CAN实战

1. 我为什么坚持按“模块→字符设备→设备树→I2C/CAN”这个顺序带人入门先说个背景。这几年我带过不少新人做嵌入式Linux驱动,也帮朋友的公司做过内训,发现一个普遍现象:很多人一上来就盯着RK3568、i.MX8M这类平台的BSP包死磕设备树&#xf…

作者头像 李华
网站建设 2026/9/11 13:01:03

从一段氨基酸序列到三维结构:AlphaFold蛋白质结构预测上手实战

从一段氨基酸序列到三维结构:AlphaFold蛋白质结构预测上手实战 【免费下载链接】alphafold Open source code for AlphaFold 2. 项目地址: https://gitcode.com/GitHub_Trending/al/alphafold 当你手里只有一段氨基酸序列,却需要知道它在空间里怎…

作者头像 李华
网站建设 2026/9/11 13:01:02

敏捷思维:提升团队效率与项目成功率的关键

1. 为什么我们需要敏捷思维?我清楚地记得2018年带领的第一个项目团队,那是一个典型的瀑布式开发项目。我们花了三个月做需求分析,两个月做设计,等到真正开始编码时,才发现前期很多假设都不成立。团队成员互相指责&…

作者头像 李华