Spaces:
Sleeping
Sleeping
| # 服务层规格说明 — Services Specification | |
| ## 概述 | |
| 服务层采用薄包装(Thin Wrapper)设计模式,主要负责输入验证、错误处理和委托调用。核心业务逻辑集中在LLM服务层。 | |
| ## 1. 分析服务 (`src/services/analyse_service.py`) | |
| ### 1.1 功能职责 | |
| - 工作描述和用户信息的分析请求处理 | |
| - 基于反馈的分析结果优化 | |
| - 输入参数验证和错误处理 | |
| ### 1.2 主要接口 | |
| #### `analyse(jd: str, user_info: str) -> Dict[str, Any]` | |
| **功能**: 分析职位描述和用户背景,生成匹配度分析报告 | |
| **参数**: | |
| - `jd`: 职位描述文本,不能为空 | |
| - `user_info`: 用户简历/背景信息,不能为空 | |
| **返回值**: 结构化分析结果字典,包含: | |
| - key_skills: 提取的关键技能列表 | |
| - match_points: 匹配的优势点列表 | |
| - gap_points: 不足或差距点列表 | |
| - suggestions: 改进建议列表 | |
| - pitch: 简短自我推销文本 | |
| **异常处理**: 当输入参数为空时抛出 ValueError | |
| **处理流程**: | |
| 1. 验证输入参数非空 | |
| 2. 委托给 llm_service.analyse_llm() | |
| 3. 返回结构化分析结果 | |
| #### `refine(summary: Dict[str, Any], feedback: str) -> Dict[str, Any]` | |
| **功能**: 基于用户反馈优化分析结果 | |
| **参数**: | |
| - `summary`: 之前的分析结果,不能为空 | |
| - `feedback`: 用户反馈和优化要求,不能为空 | |
| **返回值**: 优化后的分析结果(与analyse函数格式相同) | |
| **异常处理**: 当输入参数为空时抛出 ValueError | |
| **处理流程**: | |
| 1. 验证输入参数非空 | |
| 2. 委托给 llm_service.refine_llm() | |
| 3. 返回更新的分析结果 | |
| ## 2. 生成服务 (`src/services/generation_service.py`) | |
| ### 2.1 功能职责 | |
| - 编排简历和求职信的并行生成 | |
| - 确保生成内容的一致性和质量 | |
| - 统一的错误处理和验证 | |
| ### 2.2 主要接口 | |
| #### `generate_both(summary: Dict[str, Any], user_info: str) -> Tuple[str, str]` | |
| **功能**: 基于分析结果和用户信息生成简历和求职信 | |
| **参数**: | |
| - `summary`: 分析服务返回的结构化分析结果 | |
| - `user_info`: 用户原始简历/背景信息 | |
| **返回值**: 元组 (resume_markdown, cover_letter_text) | |
| - resume_markdown: Markdown格式的简历内容 | |
| - cover_letter_text: 纯文本格式的求职信内容 | |
| **异常处理**: 当输入参数为空时抛出 ValueError,传递LLM服务层的所有异常 | |
| **处理流程**: | |
| 1. 验证输入参数非空 | |
| 2. 并行调用LLM服务生成简历和求职信 | |
| 3. 返回生成结果元组 | |
| ## 3. LLM服务 (`src/services/llm_service.py`) | |
| ### 3.1 功能职责 | |
| - 核心LLM交互逻辑 | |
| - JSON响应解析和错误处理 | |
| - 提示词模板管理和调用 | |
| - 与LiteLLM客户端的集成 | |
| ### 3.2 核心接口 | |
| #### 分析相关 | |
| - `analyse_llm()`: 调用LLM进行职位匹配度分析 | |
| - `refine_llm()`: 基于反馈优化分析结果 | |
| #### 生成相关 | |
| - `generate_resume_llm()`: 生成Markdown格式简历 | |
| - `generate_cover_letter_llm()`: 生成纯文本求职信 | |
| #### 工具函数 | |
| - `_parse_json_response()`: 解析LLM返回的JSON响应,处理代码块包装 | |
| ### 3.3 处理流程 | |
| **标准分析流程**: | |
| 1. 获取分析提示词模板 | |
| 2. 格式化提示词(插入参数) | |
| 3. 调用LLM API | |
| 4. 解析JSON响应 | |
| 5. 返回结构化结果 | |
| **JSON解析逻辑**: | |
| - 检测并处理 ```json 代码块包装 | |
| - 提取纯JSON内容 | |
| - 解析为Python字典 | |
| - 异常处理和错误消息 | |
| ## 4. 服务层交互流程 | |
| ### 4.1 标准工作流 | |
| 用户输入 → analyse_service.analyse() → llm_service.analyse_llm() → 分析结果 | |
| ↓ | |
| 分析结果 → generation_service.generate_both() → llm_service.generate_*() → 简历+求职信 | |
| ### 4.2 优化迭代流程 | |
| 用户反馈 → analyse_service.refine() → llm_service.refine_llm() → 更新分析 | |
| ↓ | |
| 更新分析 → generation_service.generate_both() → llm_service.generate_*() → 更新文档 | |
| ## 5. 错误处理策略 | |
| ### 5.1 输入验证 | |
| - 服务层边界进行输入验证 | |
| - 空值检查和类型验证 | |
| - 统一异常格式 ValueError | |
| ### 5.2 LLM调用异常 | |
| - 网络超时和连接错误 | |
| - API密钥验证失败 | |
| - 模型不可用或限额超限 | |
| - JSON解析失败处理 | |
| ### 5.3 业务逻辑异常 | |
| - 模板参数缺失 | |
| - 响应格式不符合预期 | |
| - 用户友好错误消息 | |
| ## 6. 扩展和优化 | |
| ### 6.1 性能优化 | |
| - 生成请求并行化(当前为串行) | |
| - 响应结果缓存 | |
| - 超时设置和资源管理 | |
| ### 6.2 功能扩展 | |
| - 添加数据验证(使用Pydantic) | |
| - 重试机制(使用tenacity) | |
| - 异步处理支持 | |
| - 缓存层集成 | |
| ### 6.3 测试策略 | |
| - 单元测试覆盖输入验证 | |
| - 模拟LLM服务集成测试 | |
| - 使用mock_data端到端测试 | |
| - 性能基准测试 |