RD-Agent 接模型,Qlib 接实验

最后更新:

RD-Agent 用模型提出假设、写代码并读取实验反馈;Qlib 管数据、特征、训练和回测。锁定源码确认 chat 与 embedding 都有独立配置入口,但尚未完成项目自身全循环调用,因此证据状态是 source-reviewed。

结论:这是研发循环,不是聊天式选股器

用 Agent 自动化因子、模型和量化实验研发;量化数据、因子、模型、回测和实验管理。RD-Agent 负责“提出假设 -> 实现 -> 运行实验 -> 阅读反馈 -> 再迭代”,Qlib 提供可复现的数据与评估底座。 源码审查确认 LiteLLM chat 与 embedding 的配置和调用路径,但本轮没有获得项目自身的 chat、embedding 或 Qlib loop 非空结果。配置示例是可执行起点,不是生产验证证明。

官方画面展示研究假设与实验迭代

RD-Agent 官方演示把研究假设、代码实现和实验反馈放在同一工作台中。画面体现真实产品流程,而不是投资结果宣传。

RD-Agent 官方量化研究自动迭代演示界面
项目官方截图:RD-Agent 展示研究假设、代码实现、实验反馈和迭代过程。

Qlib 的回测报告是独立证据层

Qlib 官方报告展示收益、风险、回撤和持仓分析。它验证实验输出的结构,但 Qlib 本体不是通用 LLM 消费入口;模型配置应该落在 RD-Agent。

Qlib 官方回测分析报告与风险指标图表
项目官方截图:Qlib 分析模块输出收益、回撤、风险和持仓相关的回测报告。

模型、embedding、代码和回测的完整数据流

chat 模型负责假设与代码,embedding 支持检索,代码执行器生成实验,Qlib 读取固定数据并输出指标。任何一层失败,都应保留失败和输入,而不是让模型补写实验结论。

RD-Agent + Qlib → LiteLLM chat / embedding + Qlib workflow → 研究假设 / 代码实现 / Qlib 实验 / 反馈与下一轮
LLM 生成与量化评估分层:前者提出候选,后者用固定数据和指标检验。

配置 chat 模型与独立 embedding

锁定版本允许 chat 与 embedding 使用不同模型和端点。若当前目录没有所需 embedding 模型,应使用独立、已验证的 embedding 服务,不要把聊天模型 ID 填进 embedding 字段。

.env
CHAT_MODEL=从模型页复制聊天模型ID
OPENAI_API_BASE=https://api.kkaiapi.com/v1
OPENAI_API_KEY=sk-your-key

EMBEDDING_MODEL=已验证的embedding模型ID
LITELLM_PROXY_API_BASE=https://embedding-provider.example/v1
LITELLM_PROXY_API_KEY=embedding-key

先分别预检 chat 和 embedding

两条调用必须分开检查。chat 成功只证明研究 Agent 能对话;embedding 成功只证明向量长度与接口正确,二者都不能证明 Qlib 环境和数据已经可用。

smoke_litellm.py
import os
from litellm import completion, embedding

chat = completion(
    model=os.environ["CHAT_MODEL"],
    api_base=os.environ["OPENAI_API_BASE"],
    api_key=os.environ["OPENAI_API_KEY"],
    messages=[{"role": "user", "content": "Reply exactly: ok"}],
)
assert chat.choices[0].message.content

vectors = embedding(
    model=os.environ["EMBEDDING_MODEL"],
    api_base=os.environ["LITELLM_PROXY_API_BASE"],
    api_key=os.environ["LITELLM_PROXY_API_KEY"],
    input=["factor research smoke"],
)
assert vectors.data[0]["embedding"]

证据状态和职责边界

RD-Agent 负责生成与修订研究方案,Qlib 负责数据、训练和回测。把两者的证据分开,才能判断失败来自模型调用、代码执行还是量化评估。

项目升级后要重新核对配置字段、LiteLLM 参数和 Qlib workflow。
组件职责当前证据不能替代
RD-Agent chat假设、代码、反馈总结源码路径已审查不能替代量化评估
RD-Agent embedding检索与上下文组织独立配置已审查不能用 chat smoke 代替
Qlib数据、训练、回测、指标官方流程与报告可见不是通用模型网关
完整 loop多轮研发与筛选本轮未运行不能宣称自动发现有效策略

避免回测泄漏和无效实验

Qlib 数据、实验环境、代码执行和 embedding。训练、验证和测试窗口要固定;股票池必须保留历史成分与退市样本;公告和财务字段按当时可见时间切割;模型提出的新因子不能读取测试期反馈后再改写。 每轮保存假设、生成代码、依赖版本、数据版本、随机种子、日志和 Qlib 指标。失败实验也保留,避免 Agent 重复走同一条无效路径。

成本、资源与失败恢复

一次任务成本 = 输入 token × 输入单价 + 输出 token × 输出单价 + 缓存读写费用 + 外部数据费用。模型价格和实际 token 只从当前模型目录与控制台调用日志读取,不在文章里复制一份会过时的数字。 这里还要计算代码执行、训练、存储和 embedding 费用。401 与 404 先隔离模型配置;代码容器失败要记录 stderr;Qlib 数据缺失要停止实验;超时后从明确 checkpoint 恢复,不要重放整条循环。高成本通常来自多轮代码修改和重复长日志,而不只是单次模型价格。

失败点证据恢复方式
chat / embedding请求 ID 与原始错误单独重试对应调用
代码执行代码、环境与 stderr修复后新建实验版本
Qlib 数据数据版本与缺失字段补齐数据后重跑同一配置
回测异常指标、交易明细与基准人工审查后决定是否继续

常见问题

RD-Agent 与 Qlib 已经完整跑通了吗?

没有。已审查锁定源码的 chat、embedding 和 Qlib 入口,但未完成项目自身完整研究 loop。

为什么要给 embedding 单独配置端点?

embedding 是不同 API 与模型能力;聊天接口可用不代表 embedding 可用,分开配置和验收更诚实。

Qlib 需要填写兼容模型 Base URL 吗?

Qlib 本体主要负责数据、训练和回测。兼容模型入口属于 RD-Agent 的 LiteLLM 配置。

一次实验成功能证明策略有效吗?

不能。还要检查数据泄漏、历史股票池、成本、不同时间窗口和样本外表现。

为什么要保留失败实验?

失败记录能防止重复尝试同一假设,也能还原 Agent 如何修改代码和使用反馈。