用途
Backend Dev 是 Resume Matcher 项目中的后端开发技能,适用于创建或修改 FastAPI 端点、Pydantic 数据模型(schemas)、数据库操作、LLM 集成以及 Python 服务逻辑的场景。
编写代码前的准备
技能要求在动手写代码之前先完成以下阅读与检查:
- 阅读 docs/agent/architecture/backend-guide.md 了解架构
- 阅读 docs/agent/apis/front-end-apis.md 了解 API 契约
- 阅读 docs/agent/llm-integration.md 了解 LLM 使用模式
- 先查看相关目录中已有的代码
强制规则
技能列出了一组不可协商的规则:
- 所有函数必须带类型提示,没有例外
- 可变默认值必须使用 copy.deepcopy()
- 服务端记录详细错误,向客户端返回通用信息
- 共享资源初始化使用 asyncio.Lock()
- API 密钥通过 api_key= 直接传给 litellm,绝不使用 os.environ
项目结构
后端代码位于 apps/backend/app/ 目录下,包含:
- main.py:FastAPI 应用、CORS、lifespan、路由
- config.py:基于环境变量的 Pydantic BaseSettings
- database.py:TinyDB 封装(JSON 文件存储)
- llm.py:LiteLLM 封装(多提供商)
- routers/:API 端点处理器
- services/:业务逻辑层
- schemas/:Pydantic 请求/响应模型
- prompts/:LLM 提示词模板(Jinja2)
代码模式
技能给出了若干可直接参考的模式示例。
新增端点:使用 APIRouter 并设置 prefix 与 tags,通过 response_model 声明返回类型,在 try/except 中调用业务逻辑,出错时用 logger.error 记录详细信息并抛出 HTTPException 返回通用提示。
新增 Schema:使用 Pydantic BaseModel 与 Field 定义字段约束,例如 name 字段设置 min_length=1、max_length=200,可选字段用 str | None。
数据库操作:通过 get_db() 获取数据库,先查询已有文档,不存在时使用 copy.deepcopy() 复制可变默认值再插入,示例中 DEFAULT_DATA 为 {"sections": [], "metadata": {}}。
LLM 调用:从 app.llm 导入 get_completion,从 app.config 导入 settings,调用时传入 prompt、model、api_key(直接传参而非环境变量)以及 json_mode 参数。
错误处理模式:在 except 块中先用 logger.error 记录详细错误供服务端日志使用,再抛出 HTTPException,status_code 为 500,detail 为通用提示信息。
检查清单
技能附带一份开发检查清单:
- 所有函数都有类型提示
- 可变默认值使用 copy.deepcopy()
- 错误处理记录详细信息、返回通用信息
- 新端点已在 main.py 的路由中包含注册
- 所有请求/响应体都定义了 Schema
- API 密钥通过 api_key= 参数传递
适用场景与限制
该技能面向 Resume Matcher 项目的后端开发工作,与该项目既有的目录结构、技术栈(FastAPI、Pydantic、TinyDB、LiteLLM)和文档体系紧密绑定。关于该技能的安装方式、版本信息、收费情况等,资料中暂未提供。