RD-Agent 接模型,Qlib 接实验
最后更新:
RD-Agent 用模型提出假设、写代码并读取实验反馈;Qlib 管数据、特征、训练和回测。锁定源码确认 chat 与 embedding 都有独立配置入口,但尚未完成项目自身全循环调用,因此证据状态是 source-reviewed。
结论:这是研发循环,不是聊天式选股器
用 Agent 自动化因子、模型和量化实验研发;量化数据、因子、模型、回测和实验管理。RD-Agent 负责“提出假设 -> 实现 -> 运行实验 -> 阅读反馈 -> 再迭代”,Qlib 提供可复现的数据与评估底座。 源码审查确认 LiteLLM chat 与 embedding 的配置和调用路径,但本轮没有获得项目自身的 chat、embedding 或 Qlib loop 非空结果。配置示例是可执行起点,不是生产验证证明。
官方画面展示研究假设与实验迭代
RD-Agent 官方演示把研究假设、代码实现和实验反馈放在同一工作台中。画面体现真实产品流程,而不是投资结果宣传。

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

模型、embedding、代码和回测的完整数据流
chat 模型负责假设与代码,embedding 支持检索,代码执行器生成实验,Qlib 读取固定数据并输出指标。任何一层失败,都应保留失败和输入,而不是让模型补写实验结论。
配置 chat 模型与独立 embedding
锁定版本允许 chat 与 embedding 使用不同模型和端点。若当前目录没有所需 embedding 模型,应使用独立、已验证的 embedding 服务,不要把聊天模型 ID 填进 embedding 字段。
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 环境和数据已经可用。
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 负责数据、训练和回测。把两者的证据分开,才能判断失败来自模型调用、代码执行还是量化评估。
| 组件 | 职责 | 当前证据 | 不能替代 |
|---|---|---|---|
| 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 如何修改代码和使用反馈。