apply-helper / docs /services.spec.md
hanbinChen's picture
update
1ee9de7

服务层规格说明 — 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端到端测试
  • 性能基准测试