feat: 初始化零工后端代码

This commit is contained in:
Daniel
2026-04-01 14:19:25 +08:00
parent c6fabe262c
commit 84f8be7c0e
41 changed files with 2813 additions and 147 deletions

View File

@@ -39,10 +39,45 @@
- `LLM_BASE_URL`OpenAI 兼容接口地址
- `LLM_API_KEY`:模型服务密钥
- `LLM_MODEL`:模型名称
- `LLM_FALLBACK_BASE_URLS`LLM 备用端点列表JSON 数组)
- `AI_RATE_LIMIT_PER_MINUTE`AI 请求每分钟限流阈值
- `AI_CIRCUIT_BREAKER_FAIL_THRESHOLD`:熔断触发失败次数
- `AI_CIRCUIT_BREAKER_COOLDOWN_SECONDS`:熔断冷却秒数
- `EMBEDDING_ENABLED`:是否启用正式 embedding
- `EMBEDDING_BACKEND``hash``openai_compatible`
- `EMBEDDING_BASE_URL` / `EMBEDDING_API_KEY` / `EMBEDDING_MODEL`embedding 配置
- `INGEST_ASYNC_ENABLED`:是否启用异步入库队列
- `INGEST_QUEUE_MAX_SIZE`:异步队列最大长度
- `MATCH_CACHE_ENABLED`:是否启用匹配缓存
- `MATCH_CACHE_TTL_SECONDS`:匹配缓存 TTL
- `QUERY_CACHE_ENABLED`:是否启用查询缓存(列表与详情)
- `QUERY_CACHE_TTL_SECONDS`:查询缓存 TTL
- `CACHE_BACKEND`:缓存后端,`memory``redis`
- `REDIS_URL`Redis 连接串
- `APP_RATE_LIMIT_PER_MINUTE`:全局请求限流阈值
- `APP_CIRCUIT_BREAKER_*`:全局熔断参数(错误率、窗口、冷却)
- `ALERT_WEBHOOK_URL`:告警 webhook可选
- `DATABASE_POOL_SIZE` / `DATABASE_MAX_OVERFLOW` / `DATABASE_POOL_TIMEOUT`:数据库连接池参数
- `MATCH_ASYNC_ENABLED`:是否启用异步匹配队列
- `MATCH_QUEUE_MAX_SIZE`:异步匹配队列最大长度
## 启动方式
1. `cd gig-poc`
2. `sh infrastructure/scripts/dev-up.sh`
3. 默认会自动执行:
- 健康检查 + bootstrap
- 一键闭环验收脚本(抽取 -> 入库 -> 匹配 -> 解释)
- 导出 `docs/openapi.json`
4. 可选开启容量基线压测:
- `RUN_BASELINE_ON_UP=true sh infrastructure/scripts/dev-up.sh`
## 生产环境启动/停止
- 启动:`sh infrastructure/scripts/prod-up.sh`
- 停止:`sh infrastructure/scripts/prod-down.sh`
- 可选环境变量:
- `WEB_PORT`(默认 `80`
- `API_PORT`(默认 `8000`
- `BOOTSTRAP_ON_UP`(默认 `true`,可设置为 `false` 跳过样本初始化)
## 样本导入方式
`dev-up.sh` 会在健康检查通过后自动触发 `/poc/ingest/bootstrap`,导入 100 岗位、300 工人和词表。
@@ -50,6 +85,11 @@
## API 地址
- `http://127.0.0.1:8000`
- OpenAPI`http://127.0.0.1:8000/docs`
- OpenAPI JSON 导出:`sh infrastructure/scripts/export-openapi.sh`
- OpenAPI 固化(离线生成并入库):`sh infrastructure/scripts/freeze-openapi.sh`
- AI 观测接口:`GET /poc/ops/ai/metrics`
- 系统观测接口:`GET /poc/ops/system/metrics`
- 异步匹配接口:`POST /poc/match/workers/async``POST /poc/match/jobs/async``GET /poc/match/queue/{task_id}`
## 前端访问地址
- `http://127.0.0.1:5173`
@@ -61,6 +101,53 @@
4. 点击入库并匹配岗位
5. 在系统状态页执行健康检查和样本导入
## 一键闭环验收
```bash
cd gig-poc
sh infrastructure/scripts/acceptance-e2e.sh
```
该脚本会自动验证两条链路:
- 岗位文本抽取 -> 岗位入库 -> 岗位匹配工人 -> 匹配解释
- 工人文本抽取 -> 工人入库 -> 工人匹配岗位 -> 匹配解释
## 容量基线压测
```bash
cd gig-poc
sh infrastructure/scripts/load-baseline.sh
```
输出文件:
- `docs/CAPACITY_BASELINE.md`
可选参数:
- `TOTAL_REQUESTS`(默认 `400`
- `CONCURRENCY`(默认 `40`
## 规模化建议(上线前)
- 应用层:开启多实例部署(建议至少 2 个 API 实例)并接入负载均衡。
- 数据层PostgreSQL、Qdrant 使用托管或主从/集群形态,避免单点。
- 链路层:优先走异步入库接口(`/poc/ingest/*/async`)吸收突发写流量。
- 匹配层:高峰请求优先走异步匹配接口(`/poc/match/*/async`)做削峰。
- 观测层:接入 `/poc/ops/system/metrics``/poc/ops/ai/metrics` 到监控告警系统。
- 发布层:每次发布前更新 `docs/openapi.json``docs/CAPACITY_BASELINE.md`
## K8s 扩容部署(基础模板)
目录:`infrastructure/k8s`
```bash
cd gig-poc
kubectl apply -k infrastructure/k8s
```
包含资源:
- API Deployment + Service + HPA默认 3~20 副本)
- Web Deployment + Service + HPA默认 2~10 副本)
- Redis Deployment + Service
- Ingress 示例路由
详细策略说明见:`docs/SCALING.md`
## 已实现范围
- 岗位抽取
- 工人抽取