更新项目文档

This commit is contained in:
zk
2026-04-24 16:36:03 +08:00
parent 521720bf76
commit 7efa402e9c
+30 -17
View File
@@ -38,15 +38,19 @@ offerpie_python_ai/
│ ├─ resume_diagnoser/ # 简历 AI 诊断模块 │ ├─ resume_diagnoser/ # 简历 AI 诊断模块
│ │ ├─ prompts.py # 诊断 Prompt 模板(分模块诊断 + 汇总评价 + 润色优化) │ │ ├─ prompts.py # 诊断 Prompt 模板(分模块诊断 + 汇总评价 + 润色优化)
│ │ └─ diagnoser.py # AI 并行诊断(diagnose_all 入口 + generate_summary 汇总评价 + polish_content 润色优化) │ │ └─ diagnoser.py # AI 并行诊断(diagnose_all 入口 + generate_summary 汇总评价 + polish_content 润色优化)
─ skill_gap_analyzer/ # 技能差距分析 + 定制简历 AI 模块 ─ skill_gap_analyzer/ # 技能差距分析 + 定制简历 AI 模块
├─ prompts.py # 差距分析 + 简历优化 + Agent 规划(原子化操作)/ 单条记录修改 / 新增记录 Prompt 模板 + MODULE_SCHEMAS ├─ prompts.py # 差距分析 + 简历优化 + Agent 规划(原子化操作)/ 单条记录修改 / 新增记录 Prompt 模板 + MODULE_SCHEMAS
└─ analyzer.py # AI 调用逻辑(差距分析 + summary优化 + 经历优化 + Agent规划 + 单条记录修改 + 新增记录) └─ analyzer.py # AI 调用逻辑(差距分析 + summary优化 + 经历优化 + Agent规划 + 单条记录修改 + 新增记录)
│ └─ job_agent/ # 求职助手 Agent 对话 AI 模块
│ ├─ prompts.py # 对话 System Prompt 模板
│ └─ chat.py # AI 对话引擎(构造 prompt + 拼 messages + 调 LLM + 解析返回)
├─ api/ # **路由层**REST API 接口) ├─ api/ # **路由层**REST API 接口)
│ ├─ health.py # 健康检查接口 GET /health/ │ ├─ health.py # 健康检查接口 GET /health/
│ ├─ resume.py # 简历接口 POST /resume/upload(上传文件AI解析) │ ├─ resume.py # 简历接口 POST /resume/upload(上传文件AI解析)
│ ├─ resume_diagnose.py # 简历诊断接口(POST 触发诊断 / GET 查询报告 / PUT 标记处理+用户评价 / POST 润色优化) │ ├─ resume_diagnose.py # 简历诊断接口(POST 触发诊断 / GET 查询报告 / PUT 标记处理+用户评价 / POST 润色优化)
─ skill_gap.py # 技能差距分析 + 定制简历接口(差距分析 / 生成定制简历 / 查询 / 编辑 / 回滚 / AI对话编辑) ─ skill_gap.py # 技能差距分析 + 定制简历接口(差距分析 / 生成定制简历 / 查询 / 编辑 / 回滚 / AI对话编辑)
│ └─ job_agent_chat.py # 求职助手对话接口 POST /job-agent/chat
├─ models/ # **ORM 模型层**SQLAlchemy 声明式映射) ├─ models/ # **ORM 模型层**SQLAlchemy 声明式映射)
│ ├─ func_permission.py # 功能权限定义表(bg_func_permission │ ├─ func_permission.py # 功能权限定义表(bg_func_permission
@@ -60,7 +64,8 @@ offerpie_python_ai/
│ ├─ user_resume_competition.py # 简历-竞赛经历表(bg_user_resume_competition │ ├─ user_resume_competition.py # 简历-竞赛经历表(bg_user_resume_competition
│ ├─ resume_diagnosis_report.py # 简历诊断报告表(bg_resume_diagnosis_report │ ├─ resume_diagnosis_report.py # 简历诊断报告表(bg_resume_diagnosis_report
│ ├─ resume_diagnosis_issue.py # 简历诊断问题表(bg_resume_diagnosis_issue │ ├─ resume_diagnosis_issue.py # 简历诊断问题表(bg_resume_diagnosis_issue
─ job.py # 岗位表(bg_job,只读,用于技能差距分析) ─ job.py # 岗位表(bg_job,只读,用于技能差距分析)
│ └─ job_agent_config.py # 求职助手配置表(bg_job_agent_config
├─ tool/ # **工具层**(无状态、无业务依赖的通用工具) ├─ tool/ # **工具层**(无状态、无业务依赖的通用工具)
│ ├─ file_parser.py # 文件解析工具(PDF/Word/TXT → 纯文本,parse_to_text 入口方法) │ ├─ file_parser.py # 文件解析工具(PDF/Word/TXT → 纯文本,parse_to_text 入口方法)
@@ -68,13 +73,15 @@ offerpie_python_ai/
│ └─ snowflake.py # 雪花 ID 生成工具(next_id │ └─ snowflake.py # 雪花 ID 生成工具(next_id
├─ schemas/ # **Schema 层**Pydantic 请求/响应/缓存模型) ├─ schemas/ # **Schema 层**Pydantic 请求/响应/缓存模型)
─ skill_gap.py # 技能差距分析 SchemaSkillGapParam、CustomizeResumeParam、AiEditParam、CustomizeResume 等) ─ skill_gap.py # 技能差距分析 SchemaSkillGapParam、CustomizeResumeParam、AiEditParam、CustomizeResume 等)
│ └─ job_agent_chat.py # 求职助手对话 SchemaJobAgentChatParam、JobAgentChatDto、ToolParams
└─ services/ # **业务逻辑层** └─ services/ # **业务逻辑层**
├─ func_permission_service.py # 功能权限服务(校验+扣减+回退,逻辑与Java端一致) ├─ func_permission_service.py # 功能权限服务(校验+扣减+回退,逻辑与Java端一致)
├─ resume_parse_service.py # 简历解析服务(文件解析→AI结构化→写入主表+5张子表) ├─ resume_parse_service.py # 简历解析服务(文件解析→AI结构化→写入主表+5张子表)
├─ resume_diagnose_service.py # 简历诊断服务(加载简历→AI并行诊断→统计评级→写入报告) ├─ resume_diagnose_service.py # 简历诊断服务(加载简历→AI并行诊断→统计评级→写入报告)
─ skill_gap_service.py # 技能差距分析服务(差距分析→定制简历生成/查询/编辑/回滚→AI对话编辑) ─ skill_gap_service.py # 技能差距分析服务(差距分析→定制简历生成/查询/编辑/回滚→AI对话编辑)
└─ job_agent_chat_service.py # 求职助手对话服务(查简历→序列化→调AI模块完成对话)
``` ```
## 2️⃣ 各层模块职责 ## 2️⃣ 各层模块职责
@@ -82,11 +89,11 @@ offerpie_python_ai/
|------|----------|-------------| |------|----------|-------------|
| **config** | 统一配置管理,基于 Pydantic Settings,支持 .env 文件加载 | `Settings`(数据库、Redis、LLM供应商、JWT、CORS、日志等全部配置项) | | **config** | 统一配置管理,基于 Pydantic Settings,支持 .env 文件加载 | `Settings`(数据库、Redis、LLM供应商、JWT、CORS、日志等全部配置项) |
| **core** | 核心基础设施:数据库连接、Redis连接、鉴权、日志、中间件、异常处理、统一响应 | `database.py``redis.py``auth.py``middleware.py``exceptions.py``logger.py``StandardResponse` | | **core** | 核心基础设施:数据库连接、Redis连接、鉴权、日志、中间件、异常处理、统一响应 | `database.py``redis.py``auth.py``middleware.py``exceptions.py``logger.py``StandardResponse` |
| **ai** | AI 模型管理 + 业务 AI 能力 | `LLM` 枚举、`resume_extractor/`(简历并行提取)、`resume_diagnoser/`(简历诊断)、`skill_gap_analyzer/`(技能差距分析 + 定制简历优化 + Agent 原子化规划 + 单条记录修改/新增) | | **ai** | AI 模型管理 + 业务 AI 能力 | `LLM` 枚举、`resume_extractor/`(简历并行提取)、`resume_diagnoser/`(简历诊断)、`skill_gap_analyzer/`(技能差距分析 + 定制简历优化 + Agent 原子化规划 + 单条记录修改/新增)`job_agent/`(求职助手对话) |
| **api** | REST API 路由定义 | `health.py`(健康检查)、`resume.py`(简历上传解析)、`resume_diagnose.py`(简历诊断)、`skill_gap.py`(技能差距分析 + 定制简历) | | **api** | REST API 路由定义 | `health.py`(健康检查)、`resume.py`(简历上传解析)、`resume_diagnose.py`(简历诊断)、`skill_gap.py`(技能差距分析 + 定制简历)`job_agent_chat.py`(求职助手对话) |
| **models** | SQLAlchemy ORM 模型,与 Java 端共享同一数据库 | `FuncPermission``UserFuncPermissionStock``UserFuncUsageLog``UserResume``UserResumeEducation`/`Work`/`Internship`/`Project`/`Competition``ResumeDiagnosisReport``ResumeDiagnosisIssue``Job`(只读) | | **models** | SQLAlchemy ORM 模型,与 Java 端共享同一数据库 | `FuncPermission``UserFuncPermissionStock``UserFuncUsageLog``UserResume``UserResumeEducation`/`Work`/`Internship`/`Project`/`Competition``ResumeDiagnosisReport``ResumeDiagnosisIssue``Job`(只读)`JobAgentConfig` |
| **tool** | 无状态通用工具,不依赖数据库/Redis/用户上下文 | `file_parser.py`PDF/Word/TXT 文件解析为纯文本)、`json_helper.py`AI 输出 JSON 解析,去 markdown 代码块 + json_repair 容错)、`snowflake.py`(雪花ID生成) | | **tool** | 无状态通用工具,不依赖数据库/Redis/用户上下文 | `file_parser.py`PDF/Word/TXT 文件解析为纯文本)、`json_helper.py`AI 输出 JSON 解析,去 markdown 代码块 + json_repair 容错)、`snowflake.py`(雪花ID生成) |
| **services** | 业务逻辑实现 | `FuncPermissionService`(功能权限校验、扣减、回退)、`ResumeParseService`(简历文件解析→AI结构化→入库)、`ResumeDiagnoseService`(简历诊断→AI并行分析→评级→入库)、`SkillGapService`(技能差距分析→定制简历生成/查询/编辑/回滚→AI对话编辑(原子化操作:delete直接删/update按记录并发/add并发生成)) | | **services** | 业务逻辑实现 | `FuncPermissionService`(功能权限校验、扣减、回退)、`ResumeParseService`(简历文件解析→AI结构化→入库)、`ResumeDiagnoseService`(简历诊断→AI并行分析→评级→入库)、`SkillGapService`(技能差距分析→定制简历生成/查询/编辑/回滚→AI对话编辑(原子化操作:delete直接删/update按记录并发/add并发生成))`JobAgentChatService`(求职助手对话→查简历→调AI模块) |
## 3️⃣ 技术栈 ## 3️⃣ 技术栈
| 类别 | 技术选型 | 说明 | | 类别 | 技术选型 | 说明 |
@@ -124,14 +131,20 @@ offerpie_python_ai/
## 6️⃣ AI 模型配置 ## 6️⃣ AI 模型配置
| 供应商 | 模型 | 枚举值 | | 供应商 | 模型 | 枚举值 |
|--------|------|--------| |--------|------|--------|
| 火山引擎 | doubao-pro-256k | `LLM.DOUBAO_PRO_256K` | | 火山引擎 | doubao-1-5-pro-32k-250115 | `LLM.DOUBAO_PRO_32K` |
| 火山引擎 | doubao-pro-32k | `LLM.DOUBAO_PRO_32K` |
| 火山引擎 | doubao-lite-128k | `LLM.DOUBAO_LITE_128K` |
| 火山引擎 | deepseek-v3-250324 | `LLM.DEEPSEEK_V3` | | 火山引擎 | deepseek-v3-250324 | `LLM.DEEPSEEK_V3` |
| 火山引擎 | deepseek-r1-250528 | `LLM.DEEPSEEK_R1` | | 火山引擎 | deepseek-r1-250528 | `LLM.DEEPSEEK_R1` |
| 心缘 | gpt-4o | `LLM.GPT_4O` | | 火山引擎 | doubao-seed-2-0-lite-260215 | `LLM.DOUBAO_SEED_LITE` |
| 心缘 | gpt-4o-mini | `LLM.GPT_4O_MINI` | | 火山引擎 | doubao-seed-2-0-pro-260215 | `LLM.DOUBAO_SEED_PRO` |
| 心缘 | claude-sonnet-4-20250514 | `LLM.CLAUDE_SONNET_4` | | 加鱼 | gpt-4o | `LLM.GPT_4O` |
| 接口 | gpt-4o-mini | `LLM.GPT_4O_MINI` |
| 接口 | gemini-2.5-flash | `LLM.GEMINI_FLASH` |
| 加鱼 | claude-sonnet-4.5 | `LLM.JIAYU_CLAUDE_SONNET_4_5` |
| 加鱼 | claude-haiku-4.5 | `LLM.JIAYU_CLAUDE_HAIKU_4_5` |
| 加鱼 | deepseek-3.2 | `LLM.JIAYU_DEEPSEEK_3_2` |
| 加鱼 | glm-5 | `LLM.JIAYU_GLM_5` |
| 加鱼 | qwen3-coder-next | `LLM.JIAYU_QWEN3_CODER_NEXT` |
| 加鱼 | minimax-m2.5 | `LLM.JIAYU_MINIMAX_M2_5` |
所有模型通过 `LLM.XXX.create(**kwargs)` 创建 LangChain `ChatOpenAI` 实例,kwargs 透传 temperature、max_tokens 等参数。 所有模型通过 `LLM.XXX.create(**kwargs)` 创建 LangChain `ChatOpenAI` 实例,kwargs 透传 temperature、max_tokens 等参数。