mcpField
B
backend-dev

backend-dev

github.com/srbhr开发29.1k52 次安装今天更新
代码仓库

关于 backend-dev

用于开发 FastAPI 端点、Pydantic 模型、数据库操作、LLM 集成及 Python 服务的后端技能,结合项目架构文档、实现示例和必需的编码规则。

主要功能

  1. 01FastAPI 端点模式
  2. 02Pydantic 模型指引
  3. 03TinyDB 操作示例
  4. 04LiteLLM 集成模式
  5. 05错误处理约定
  6. 06强制类型提示

适用场景

  1. 01创建或修改 API 端点
  2. 02定义请求与响应模型
  3. 03实现数据库操作
  4. 04在服务中添加 LLM 调用

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/srbhr/resume-matcher --skill backend-dev

安装后在 Claude Code 中输入/backend-dev确认已加载。

详细介绍

后端开发

在创建或修改 FastAPI 端点、Pydantic 模式、数据库操作、LLM 集成或 Python 服务逻辑时使用。

编写代码之前

  1. 阅读 docs/agent/architecture/backend-guide.md 了解架构
  2. 阅读 docs/agent/apis/front-end-apis.md 了解 API 契约
  3. 阅读 docs/agent/llm-integration.md 了解 LLM 模式
  4. 先检查相关目录中的现有代码

不可协商的规则

  1. 所有函数必须包含类型提示,没有例外
  2. 对可变默认值使用 copy.deepcopy()
  3. 在服务端记录详细错误,向客户端返回通用消息
  4. 对共享资源初始化使用 asyncio.Lock()
  5. 通过 api_key= 将 API 密钥直接传递给 litellm,切勿使用 os.environ

项目结构

apps/backend/app/
├── main.py          # FastAPI app, CORS, lifespan, routers
├── config.py        # Pydantic BaseSettings from env
├── database.py      # TinyDB wrapper (JSON file storage)
├── llm.py           # LiteLLM wrapper (multi-provider)
├── routers/         # API endpoint handlers
├── services/        # Business logic layer
├── schemas/         # Pydantic request/response models
└── prompts/         # LLM prompt templates (Jinja2)

模式

新建端点
from fastapi import APIRouter, HTTPException
from app.schemas.my_schema import MyRequest, MyResponse
import logging

logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api/v1", tags=["my-feature"])

@router.post("/my-endpoint", response_model=MyResponse)
async def create_thing(request: MyRequest) -> MyResponse:
    try:
        result = await process_data(request)
        return result
    except Exception as e:
        logger.error(f"Failed to create thing: {e}")
        raise HTTPException(status_code=500, detail="Operation failed. Please try again.")
新建模式
from pydantic import BaseModel, Field

class MyRequest(BaseModel):
    name: str = Field(..., min_length=1, max_length=200)
    description: str | None = None

class MyResponse(BaseModel):
    id: str
    name: str
    status: str = "created"
数据库操作
import copy
from app.database import get_db

DEFAULT_DATA = {"sections": [], "metadata": {}}

async def get_or_create(doc_id: str) -> dict:
    db = get_db()
    existing = db.get(doc_id)
    if existing:
        return existing
    data = copy.deepcopy(DEFAULT_DATA)  # ALWAYS deepcopy mutable defaults
    db.insert(data)
    return data
LLM 调用
from app.llm import get_completion
from app.config import settings

async def improve_text(text: str) -> str:
    prompt = f"Improve this resume text:\n\n{text}"
    result = await get_completion(
        prompt=prompt,
        model=settings.LLM_MODEL,
        api_key=settings.LLM_API_KEY,  # Pass directly, not via env
        json_mode=True,
    )
    return result

错误处理模式

except Exception as e:
    logger.error(f"Operation failed: {e}")  # Detailed for server logs
    raise HTTPException(
        status_code=500,
        detail="Operation failed. Please try again."  # Generic for client
    )

检查清单

  • 所有函数都有类型提示
  • 可变默认值使用 copy.deepcopy()
  • 错误处理会记录详情,并返回通用消息
  • 新端点已在 main.py 的路由包含列表中注册
  • 所有请求/响应体都已定义模式
  • 通过 api_key= 参数传递 API 密钥

评论

支持 Markdown