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端到端测试
- 性能基准测试