【免费下载链接】worldquant-miner
Leverage WorldQuant API to generate alpha signals, and mine promising alpha expressions.
worldquant-miner是一个利用 WorldQuant API 挖掘量化 alpha 信号的开源项目,其中第二代系统(generation_two)最具亮点的,就是它的自纠错AST(Self-Correcting AST):AI 生成的 alpha 模板表达式经常带病上线,而项目的模板验证器(Template Validator)能像编译器一样解析、定位并自动修复错误,还会把每一次失败沉淀为"知识",让同类错误不再犯第二次。本文将带你完整读懂这套模板验证与错误学习机制的设计思路。
一、为什么 alpha 模板需要"自纠错"?
在 WorldQuant Brain 平台上,alpha 用 FASTEXPR 表达式语言书写,例如ts_rank(field, 20)。AI 大模型批量生成这类表达式时,几乎必然会"翻车",常见错误包括:
- 🔢参数数量不对:
power(field)缺少第二个输入 - ⏱️缺失 lookback 参数:
ts_rank(field)少了时间窗口 - 📉event 输入不兼容:
rank这类横截面算子不支持 event 型数据字段 - ✏️语法细节:漏写逗号
ts_rank(field 20)、括号不配对
如果每个错误都靠人工排查,批量挖掘就无从谈起。worldquant-miner 的答案是:把表达式当作"源代码",构建一条解析 → 诊断 → 修复 → 验证 → 学习的自纠错流水线。
二、自纠错AST的三大核心组件
整套机制由 generation_two/core/ 下的三个模块协作完成:
1. FASTEXPR 解析器:把字符串变成树
fast_expr_ast.py 实现了FASTEXPRParser,它基于operatorRAW.json中登记的全量算子定义与数据字段元数据,把模板字符串解析为抽象语法树(AST)。解析时不仅做语法检查,还输出结构化错误:错误类型、出错位置(position)、以及建议的修复片段(suggested_fix),这是后续精准修复的基础。
2. SelfCorrectingAST:会"记笔记"的纠错器
SelfCorrectingAST 类 是"自纠错"三个字的落点,它内部维护着四本账:
| 记录 | 内容 | 用途 |
|---|---|---|
error_history | (原始模板, 报错, 修复后模板) | 追溯修复轨迹 |
correction_rules | 按错误类型分类的修复规则 | 同类错误自动套用 |
successful_templates | 验证通过的模板 | 正样本参考 |
failed_templates | 失败模板与错误信息 | 反样本避坑 |
修复时它会先按错误信息归类(invalid_field、type_mismatch、unbalanced_parens等),再依次应用:学习到的修复规则 → 类型不匹配时自动换用兼容字段 → 解析器给出的 suggested_fix(见 correct_template 方法)。
3. 多阶段表达式编译器
expression_compiler.py 实现了标准的编译器管线,与 compiler_knowledge.json 中记录的阶段定义一一对应:
词法分析 → 语法解析(AST) → 语义分析 → 中间表示(IR) → 代码生成 → 可选优化
每一阶段都能独立暴露问题,让"验证"不再只是简单的括号配对检查,而是真正意义上把模板"编译"一遍,验证通过的表达式才算合格。
三、自纠错循环:refeed_with_correction 的5步流水线
当模拟(simulation)返回错误时,refeed_with_correction 方法 会启动一个循环修复过程,每一步各司其职:
- 知识库直修(Step 0):优先用数据库里学到的规则修复——补 lookback、补逗号、替换未知变量、替换未知算子,这些是零成本的确定性修复;
- 参数数量修复(Step 1):解析报错
Invalid number of inputs : 2, should be exactly 1中的数字,精准增删参数; - event 输入修复(Step 1.5):把
rank批量替换为ts_rank这类时间序列版本,替换映射直接来自 compiler_knowledge.json; - AST 纠错 + AI 提示词工程(Step 2-3):AST 修复不了的,再交给本地 Ollama 模型,用精心设计的"诊断 → 修复"双提示词处理,并附上从数据库查询到的成功模板作为范例;
- 编译验证与重试(Step 4):修复后的模板再过一遍编译器,成功即结束;失败则带着新错误信息进入下一轮。
💡 细节设计很值得借鉴:event 输入类、参数数量类、缺逗号类错误被视为"必须修好"的问题,重试上限被放宽到 999 次,保证模板要么修对、要么明确失败。
四、错误学习机制:让每次失败都变成知识
这才是"自纠错"区别于普通重试的关键——学习闭环由 learn_from_simulation_error 方法 驱动,失败经验会写入三处持久化存储:
1. compiler_knowledge 表:算子兼容性知识
每当遇到 "does not support event inputs" 类错误,_learn_event_input_compatibility 会从报错中正则提取算子名,连同替换方案、来源模板、AST 结构一并存入compiler_knowledge表(表结构见 backtest_storage.py)。下次启动时,SelfCorrectingAST会自动加载这些知识,在解析阶段就提前拦截同类错误——从"事后修复"升级为"事前预防"。
2. ast_patterns 表:正负样本库
失败的模板会被解析成抽象结构(如FUNC(ts_rank)[FIELD(...)])存入ast_patterns表,并区分successful/failed两种模式、累计成功与失败次数。这套正负样本既指导模板生成器避开危险结构,也为 AI 提示词工程提供了"成功范例"(按 Sharpe 比率取 Top 5)。
3. 本地规则文件:跨会话的记忆
学习到的修复规则(正则 pattern + replacement)还会通过 _save_learned_patterns 保存到用户目录下的~/.generation_two/fast_expr_patterns.json,重启程序后依然生效,实现真正的"越用越聪明"。
五、动手体验与延伸阅读
想亲手验证这套机制,可以直接从项目测试入口开始,它展示了模板生成、验证、修复与回测的完整链路:
- 📖 官方文档:generation_two/DOCUMENTATION.md —— 其中 "Template Validation & Correction" 一节系统介绍了 AST 纠错、提示词工程与错误学习
- 🔬 集成测试:generation_two/tests/test_generation_two.py
- 🧪 模拟测试器:generation_two/core/simulator_tester.py
- 📊 知识存储层:generation_two/storage/backtest_storage.py
- 🎨 GUI 工作台:generation_two/gui/ —— 可视化查看挖掘与验证全过程
一句话总结:worldquant-miner 的自纠错AST把"表达式验证"从一次性检查变成了持续学习系统——解析器负责定位,知识库负责预防,编译器负责验收,而每一个错误都经过归类、修复、沉淀,最终成为下一次生成前的护栏。这套"解析 → 修复 → 验证 → 学习"的模式,对所有需要批量处理 AI 生成代码的项目,都是一份值得参考的架构蓝图。
【免费下载链接】worldquant-miner
Leverage WorldQuant API to generate alpha signals, and mine promising alpha expressions.
相关推荐
深入解析SOpt项目:多语言编程示例与最佳实践
深入解析SOpt项目:多语言编程示例与最佳实践 SOpt是一个汇集了多种编程语言示例代码与最佳实践的开源项目,旨在为开发者提供丰富的编程参考资料。项目包含C、C
Formtastic错误处理机制:如何优雅显示表单验证错误
Formtastic错误处理机制:如何优雅显示表单验证错误 Formtastic是一个强大的Rails表单构建器,它提供了极其优雅和直观的表单验证错误处理机制。
后端UI组件lift-oQ3.5 保姆级教程:3 种方式在 Mac 上运行 9B 视觉语言模型
lift oQ3.5 保姆级教程:3 种方式在 Mac 上运行 9B 视觉语言模型 lift oQ3.5 是一个专为 结构化信息提取 打造的 9B 视觉语言模型
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考