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_idraw(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}删除一个候选(已发布不可删)