Files
FunctionalScaffold/docs/getting-started.md
Roog (顾新培) 9ffde9b842 main:新增 Docker 开发模式命令说明
变更内容:
- 在 `getting-started.md` 文档中新增 Docker 开发模式的命令和使用示例,提高开发环境配置便捷性。
2026-02-02 19:35:51 +08:00

252 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 快速入门指南
本指南帮助算法同学快速上手 FunctionalScaffold 脚手架,在 10 分钟内完成第一个算法服务的开发和部署。
## 核心理念
**算法同学只需关注核心算法逻辑**,框架自动处理:
- HTTP 接口封装
- 参数验证
- 错误处理
- 日志记录
- 性能指标
- 健康检查
- 容器化部署
## 环境准备
### 1. 安装依赖
```bash
# 克隆项目
git clone <repository-url>
cd FunctionalScaffold
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 安装依赖
pip install -e ".[dev]"
```
### 2. 启动服务
```bash
# 开发模式(自动重载)
uvicorn src.functional_scaffold.main:app --reload --port 8000
# docker 开发者模式
cd deployment && docker compose up -d
```
### 3. 验证服务
```bash
# 健康检查
curl http://localhost:8000/healthz
# 调用示例算法
curl -X POST http://localhost:8000/invoke \
-H "Content-Type: application/json" \
-d '{"number": 17}'
```
## 添加你的第一个算法
### 步骤 1创建算法类
`src/functional_scaffold/algorithms/` 目录下创建新文件:
```python
# src/functional_scaffold/algorithms/my_algorithm.py
from typing import Dict, Any
from .base import BaseAlgorithm
class MyAlgorithm(BaseAlgorithm):
"""我的算法类"""
def process(self, input_data: Any) -> Dict[str, Any]:
"""
算法处理逻辑 - 只需实现这个方法!
Args:
input_data: 输入数据
Returns:
Dict[str, Any]: 处理结果
"""
# 在这里实现你的算法逻辑
result = self._do_calculation(input_data)
return {
"input": input_data,
"output": result,
"message": "处理成功"
}
def _do_calculation(self, data):
"""内部计算方法"""
# 你的算法实现
return data * 2
```
### 步骤 2注册算法
`src/functional_scaffold/algorithms/__init__.py` 中添加导出:
```python
from .base import BaseAlgorithm
from .prime_checker import PrimeChecker
from .my_algorithm import MyAlgorithm # 添加这行
__all__ = ["BaseAlgorithm", "PrimeChecker", "MyAlgorithm"] # 添加到列表
```
### 步骤 3添加 API 端点
`src/functional_scaffold/api/routes.py` 中添加路由:
```python
from ..algorithms.my_algorithm import MyAlgorithm
@router.post("/my-endpoint")
async def my_endpoint(
request: MyRequest, # 需要定义请求模型
request_id: str = Depends(get_request_id)
):
"""我的算法端点"""
algorithm = MyAlgorithm()
result = algorithm.execute(request.data)
if not result["success"]:
raise HTTPException(status_code=500, detail=result["error"])
return {
"request_id": request_id,
"status": "success",
"result": result["result"],
"metadata": result["metadata"]
}
```
### 步骤 4定义请求模型
`src/functional_scaffold/api/models.py` 中添加:
```python
class MyRequest(BaseModel):
"""我的请求模型"""
model_config = ConfigDict(
json_schema_extra={
"example": {"data": 10}
}
)
data: int = Field(..., description="输入数据")
```
### 步骤 5测试
```bash
curl -X POST http://localhost:8000/my-endpoint \
-H "Content-Type: application/json" \
-d '{"data": 10}'
```
## 使用异步任务
对于耗时较长的算法,使用异步任务接口:
### 创建异步任务
```bash
curl -X POST http://localhost:8000/jobs \
-H "Content-Type: application/json" \
-d '{
"algorithm": "MyAlgorithm",
"params": {"data": 10},
"webhook": "https://your-callback-url.com/notify"
}'
```
响应:
```json
{
"job_id": "a1b2c3d4e5f6",
"status": "pending",
"message": "任务已创建",
"created_at": "2026-02-02T10:00:00Z"
}
```
### 查询任务状态
```bash
curl http://localhost:8000/jobs/a1b2c3d4e5f6
```
响应:
```json
{
"job_id": "a1b2c3d4e5f6",
"status": "completed",
"algorithm": "MyAlgorithm",
"result": {"input": 10, "output": 20},
"metadata": {"elapsed_time": 0.001}
}
```
## 本地开发技巧
### 查看 API 文档
启动服务后访问:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
### 运行测试
```bash
# 运行所有测试
pytest tests/ -v
# 运行单个测试文件
pytest tests/test_algorithms.py -v
```
### 代码格式化
```bash
# 格式化代码
black src/ tests/
# 检查代码规范
ruff check src/ tests/
```
## 下一步
- [算法开发详细指南](./algorithm-development.md) - 深入了解算法开发
- [API 参考文档](./api-reference.md) - 完整的 API 说明
- [监控指南](./monitoring.md) - 了解监控和告警
- [部署指南](./deployment.md) - 生产环境部署
## 常见问题
### Q: 如何处理算法中的异常?
A: 在 `process()` 方法中抛出异常即可,框架会自动捕获并返回标准错误响应。
### Q: 如何添加自定义指标?
A: 在 `config/metrics.yaml` 中定义指标,然后在代码中使用 `incr()``observe()` 记录。
### Q: 如何访问外部服务数据库、OSS
A: 在 `config.py` 中添加配置项,通过环境变量注入连接信息。
### Q: 算法需要加载大模型文件怎么办?
A: 在算法类的 `__init__` 方法中加载模型,框架会在容器启动时初始化。