用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Azure-Samples/art-voice-agent-accelerator --skill add-endpoint命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | add-endpoint |
| description | Add a new FastAPI endpoint to the API |
Add endpoints to apps/artagent/backend/api/v1/endpoints/.
"""
Endpoint Module
===============
Brief description of endpoints in this module.
"""
from __future__ import annotations
from fastapi import APIRouter, HTTPException, Request
from pydantic import BaseModel, Field
from utils.ml_logging import get_logger
logger = get_logger(__name__)
router = APIRouter()
# ═══════════════════════════════════════════════════════════════════════════════
# SCHEMAS
# ═══════════════════════════════════════════════════════════════════════════════
class MyRequest(BaseModel):
"""Request model for the endpoint."""
field1: str = Field(..., description="Required field")
field2: int | None = Field(None, description="Optional field")
class MyResponse(BaseModel):
"""Response model for the endpoint."""
success: bool
data: str
# ═══════════════════════════════════════════════════════════════════════════════
# ENDPOINTS
# ═══════════════════════════════════════════════════════════════════════════════
@router.get("/resource", response_model=MyResponse, tags=["Category"])
async def get_resource(request: Request) -> MyResponse:
"""
Get a resource.
Returns the resource data.
"""
return MyResponse(success=True, data="result")
@router.post("/resource", response_model=MyResponse, tags=["Category"])
async def create_resource(request: Request, body: MyRequest) -> MyResponse:
"""
Create a new resource.
Args:
body: The resource data to create.
"""
logger.info("Creating resource: %s", body.field1)
return MyResponse(success=True, data=body.field1)
api/v1/endpoints/ or edit existingtags=["Category"] for OpenAPI groupingapi/v1/__init__.pyIn apps/artagent/backend/api/v1/__init__.py:
from apps.artagent.backend.api.v1.endpoints import my_module
api_router.include_router(
my_module.router,
prefix="/my-resource",
tags=["MyResource"],
)
@router.get("/resource")
async def get_resource(request: Request):
redis = request.app.state.redis_client
# Use redis...
@router.get("/resource/{resource_id}")
async def get_resource(resource_id: str) -> MyResponse:
...
@router.get("/resources")
async def list_resources(
limit: int = 10,
offset: int = 0,
) -> list[MyResponse]:
...
@router.get("/resource/{id}")
async def get_resource(id: str) -> MyResponse:
resource = await fetch_resource(id)
if not resource:
raise HTTPException(status_code=404, detail="Resource not found")
return resource
Use consistent tags:
Health - Health/readiness endpointsCalls - Call managementAgents - Agent operationsVoice - Voice/speech operationsSessions - Session managementFor reusable schemas, add to api/v1/schemas/:
# api/v1/schemas/my_schemas.py
from pydantic import BaseModel
class SharedSchema(BaseModel):
field: str
For models with timestamps/IDs, extend base:
from apps.artagent.backend.api.v1.models.base import BaseModel
class MyModel(BaseModel):
field: str
# Automatically gets id, created_at, updated_at