AI 生成回测因子 API 文档
把一段自然语言的策略/想法,通过大模型生成本站可回测的因子表达式。共两步:生成(即保存)→ 预览回测。 本文档为面向使用者的说明;完整接口定义见 Swagger /docs。
接口总览与权限
| 方法 | 路径 | 权限 | 说明 |
|---|---|---|---|
| POST | /api/ai/factor |
会员 | 传入描述,生成候选择表达式并校验,生成即保存为你的私有因子(扣 1 次/日;普通用户 403 引导升级) |
| POST | /api/ai/factor/preview |
登录用户 | 对本人某个私有因子回测预览(传 factor_id,不落库) |
| GET | /api/ai/factor/mine |
登录用户 | 我的私有因子列表(按有效期/会员规则过滤) |
| DELETE | /api/ai/factor/{factor_id} |
登录用户 | 删除本人的一个私有因子 |
| PUT | /api/ai/factor/{factor_id}/favorite |
登录用户 | 收藏 / 取消收藏本人的一个私有因子(切换) |
| POST | /api/ai/factor/batch-delete |
登录用户 | 批量删除本人私有因子(body {"factor_ids":[...]},含已过期) |
认证:登录后通过 Cookie 会话访问;生成接口为会员专属(未登录 401、普通用户 403)。
未配置 OPENAI_API_KEY 时生成接口返回 503 服务未就绪,不会伪造数据(仅内部测试环境设置
GPZS_AI_DEMO=1 才启用演示模式,响应含 provider:"demo")。
生成即自动保存(7 天有效,过期后对非会员隐藏,升级会员即恢复可见),无需单独的"保存"步骤。
1. 生成候选(即保存)
{"description": "你的策略想法"}curl -X POST http://localhost:8000/api/ai/factor \
-H "Content-Type: application/json" \
-d '{"description": "低波动稳健,偏好波动率低的股票"}'
# Python
import requests
r = requests.post("http://localhost:8000/api/ai/factor",
json={"description": "低波动稳健,偏好波动率低的股票"})
print(r.json())
响应包含 factor_id、raw(expression/name/category/description)与
validation(ok、fields、lookback、canonical)。若 validation.ok 为 false,
表达式不可回测(被白名单拦截)。因子已自动保存为私有因子,可在「我的因子」查看。
2. 预览回测(登录用户)
{"factor_id": "上一步返回的 factor_id"}curl -X POST http://localhost:8000/api/ai/factor/preview \
-H "Content-Type: application/json" \
-d '{"factor_id": "ai_xxxx"}'
返回近一年回测的 metrics(年化收益/夏普/最大回撤/胜率/换手等)与近 6 年 yearly
年度明细。此操作不落库,绑定本人因子,可安全反复试跑(不计额度)。
错误码
| HTTP | 含义 |
|---|---|
| 400 | 描述为空 / 表达式未通过校验(未知字段或算子、语法错误) |
| 401 | 未登录 |
| 403 | 非会员(AI 生成为会员专属,请升级会员) |
| 404 | 预览/删除时未找到你的该私有因子 |
| 429 | 当日生成次数已用完(会员/管理员每日 100 次) |
| 503 | AI 服务未就绪:管理员未配置 OPENAI_API_KEY(不伪造数据) |
| 502 | 大模型接口调用失败(请检查 OPENAI_API_KEY / 网络) |
接入真实模型
通过环境变量切换(任选一个 OpenAI 兼容服务,如 OpenAI / DeepSeek / 通义等):
# openai 兼容
OPENAI_API_KEY=sk-xxxx
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
# 示例:DeepSeek
OPENAI_BASE_URL=https://api.deepseek.com/v1
OPENAI_MODEL=deepseek-chat
配置后重启服务即走真实模型;未配置时生成接口返回 503(不再伪造数据)。内部测试环境可设 GPZS_AI_DEMO=1 启用演示模式。
管理端:AI 自动因子工厂
管理员可在「管理后台 → AI 因子工厂」(/admin/ai-factory)一键运行
生成 → 发布入库 → 邮件通知 完整轮次:AI 按本站操作符与数据字段自动组合具有经济学意义的因子,
先生成候选存入数据库(同表达式去重、打标记避免重复生成),计算绩效后加入公共因子库(source='ai_auto'),
并向所有绑定邮箱用户发送「网站更新了 N 个因子」通知邮件(按轮次去重)。每天默认 18:00 自动跑一轮
(GPZS_AI_FACTORY_TIME 可调,未配置有效 OPENAI_API_KEY 时自动跳过)。
以下接口均仅管理员可调用(生成/发布为后台异步执行,前端轮询 stats / candidates 查看结果):
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/meta/ai-factory/stats | 统计:候选状态 / 已在因子库数 / 最近通知 / AI 服务就绪 |
| POST | /api/meta/ai-factory/generate | 批量生成候选(body {"count":10,"category":""},去重写入队列) |
| POST | /api/meta/ai-factory/run-round | 一键完整轮次:生成 + 发布 + 邮件通知 |
| GET | /api/meta/ai-factory/candidates | 候选列表(status/q/page/page_size 筛选分页) |
| POST | /api/meta/ai-factory/publish | 发布选中({"ids":[...]},空则全部待发布)入库并算绩效 |
| POST | /api/meta/ai-factory/notify | 手动发送「最近 24 小时新增 AI 因子」通知邮件 |
| GET | /api/meta/ai-factory/notices | 通知历史(最近 5 条) |
| DELETE | /api/meta/ai-factory/candidates/{id} | 删除一个候选(已发布不可删) |