> 香港大学数据科学实验室(HKUDS)开源的 Vibe-Trading,可能是目前最完整的 AI 金融 Agent 系统。本文基于对 150 个 Python 文件、71 个 Skill、29 个 Swarm 预设的逐行代码分析,回答一个核心问题:**这个系统如何让自然语言变成可执行的交易策略?**
---
## 一、一句话定位
**Vibe-Trading = 自然语言 → 量化策略代码 → 回测验证 → 多平台导出**,全程由 AI Agent 自主完成。它不是给你一个炒股建议,而是直接写出能运行的 Python 策略代码,在真实历史数据上跑回测,生成 performance report,还能一键导出到 TradingView、通达信、MetaTrader 5。
核心数字:
- **71 个金融 Skill**(7 大类:数据源/策略/分析/资产类别/加密/资金流向/工具)
- **29 个 Swarm 团队预设**(投资委员会/量化策略部/加密货币交易台/风险管理委员会...)
- **7 个回测引擎**(A股/港股美股/加密货币/期货/外汇/跨市场组合)
- **5 个数据源自动降级**(tushare → akshare → yfinance → okx → ccxt)
---
## 二、系统架构:五层金字塔
如果把 Vibe-Trading 想象成一家投行,它的组织架构是这样的:
```
┌─────────────────────────────────────────┐
│ Layer 5: 用户界面(CLI / Web / MCP) │ ← 你跟它说话的地方
├─────────────────────────────────────────┤
│ Layer 4: Swarm 多智能体协作层 │ ← 29 个"部门"协同工作
├─────────────────────────────────────────┤
│ Layer 3: ReAct Agent 核心循环 │ ← 五层上下文压缩 + 工具批处理
├─────────────────────────────────────────┤
│ Layer 2: 工具层(27 个工具) │ ← 回测/记忆/搜索/技能读写...
├─────────────────────────────────────────┤
│ Layer 1: Skill 层(71 个专业技能) │ ← 每个 Skill = 一本操作手册
└─────────────────────────────────────────┘
```
**关键设计哲学**:每一层都是**按需加载**的。系统启动时,Layer 1 的 71 个 Skill 只有一行描述被注入系统提示词;只有当你说"帮我做个动量策略"时,对应的 `strategy-generate` Skill 的完整文档才会被加载。这叫做**渐进式披露(Progressive Disclosure)**——既保证功能丰富,又不撑爆上下文窗口。
---
## 三、最硬核的技术:五层上下文压缩
这是我在代码里看到的最 impressive 的设计。长对话必然面临上下文溢出问题,Vibe-Trading 的解决方案不是简单截断,而是一个**五层渐进压缩系统**(代码在 `agent/src/agent/loop.py`):
### Layer 1: Microcompact(微压缩)
**每轮迭代自动执行**,零成本。保留最近 3 条工具结果,更早的工具结果如果超过 100 字符,直接替换为 `[cleared]`。就像秘书帮你扔掉已经处理完的文件的复印件。
### Layer 2: Context Collapse(上下文折叠)
**纯字符串操作,不调用 LLM**。当总 token 数超过阈值 70% 时,对旧消息中的长文本块做"头尾保留、中间折叠"。比如一段 3000 字的回测报告变成:
```
[前 900 字]...[中间 1800 字被折叠]...[后 500 字]
```
**零 API 成本**,因为全是字符串切片。
### Layer 3: Auto Compact(自动结构化摘要)
**当 token 超过 40K 时触发**,调用 LLM 生成结构化摘要。但它的设计远比普通摘要聪明:
1. **Token-budget 尾部保护**:不是保留固定条数的消息,而是**倒着数直到凑够 2 万 token**,确保最近的完整上下文不被破坏。
2. **结构化模板**:强制 LLM 按固定格式输出(Goal / Constraints / Progress / Key Decisions / Pending Asks / Relevant Files / Critical Context)。这让压缩后的信息**可直接作为 handoff 文档**交给新的上下文窗口。
3. **迭代更新**:第 N 次压缩不是重新摘要全部历史,而是在**上一次摘要的基础上增量更新**。这意味着信息不会因为多次压缩而指数级衰减。
### Layer 4: Compact Tool(显式压缩)
**Agent 自己决定什么时候压缩**。LLM 可以主动调用 `compact` 工具,还能指定 `focus_topic`,让摘要时优先保留某个主题的内容(比如"重点保留关于止损策略的讨论")。
### Layer 5: Tool Pair Repair(工具对修复)
压缩后可能出现"工具调用记录还在但结果没了"或"结果还在但调用记录没了"的 orphan 问题。系统自动检测并修复:删除无主的工具结果,为缺失结果的工具调用插入 stub。
**这五层系统的精妙之处在于**:它不是"一个策略管所有",而是**根据上下文压力自动选择最合适的压缩级别**——就像汽车的变速箱,平顺换挡而不是突然熄火。
---
## 四、另一个杀手锏:读写工具批处理
当你同时需要查股价、查新闻、查技术指标时,这三个都是**只读操作**,Vibe-Trading 会把它们丢进线程池**并行执行**(最多 8 个线程)。但如果是写文件、跑回测这类**有副作用的操作**,就串行执行。代码在 `_batch_execute` 方法里:
```python
# 把工具调用拆分成 batch:连续只读 → 并行,写入 → 串行
batches = []
current_ro = []
for tc in tool_calls:
if tc.is_readonly:
current_ro.append(tc) # 放进并行队列
else:
if current_ro:
batches.append(("parallel", current_ro))
current_ro = []
batches.append(("serial", [tc])) # 写入操作单独串行
```
这个设计让 Agent 的响应速度提升数倍——想象一下,做一份研究报告需要同时查 5 个股票的数据,串行查可能要 10 秒,并行只要 2 秒。
---
## 五、回测引擎:不是 toy,是 production-grade
Vibe-Trading 的回测系统是我见过的开源项目中最扎实的。它不只是"跑个均线策略",而是覆盖全球市场的完整基础设施:
### 5.1 市场覆盖
| 市场 | 引擎 | 数据源 | 特色 |
|------|------|--------|------|
| A股 | ChinaAEngine | tushare / akshare | 涨停跌停、T+1、佣金印花税 |
| 港股美股 | GlobalEquityEngine | yfinance / akshare | 盘前盘后、股息再投资 |
| 加密货币 | CryptoEngine | okx / ccxt | 资金费率、强平检查 |
| 期货 | ChinaFuturesEngine / GlobalFuturesEngine | tushare / akshare | 保证金、合约展期 |
| 外汇 | ForexEngine | akshare / yfinance | 隔夜利息(swap) |
### 5.2 跨市场组合引擎(CompositeEngine)
这是我最喜欢的设计。你可以让 Agent 构建一个**同时持有 A股、美股和比特币**的组合,所有资产共享同一个资金池。引擎会自动:
1. **识别每个代码属于哪个市场**(用正则表达式:`000001.SZ` → A股,`BTC-USDT` → 加密货币,`AAPL.US` → 美股)
2. **为每个市场实例化对应的子引擎**(佣金、滑点、最小变动单位的规则不同)
3. **在子引擎间分配资金**(共享 capital pool)
4. **处理跨市场特殊逻辑**(加密货币的每日资金费率、外汇的隔夜 swap)
### 5.3 数据源自动降级
数据加载器注册表(`backtest/loaders/registry.py`)实现了一个**故障转移链**:
```python
FALLBACK_CHAINS = {
"a_share": ["tushare", "akshare"],
"us_equity": ["yfinance", "akshare"],
"hk_equity": ["yfinance", "futu", "akshare"],
"crypto": ["okx", "ccxt"],
...
}
```
如果 tushare 挂了,自动切 akshare;如果 yfinance 限速了,自动切备用源。**用户甚至感知不到数据源切换**——这对一个需要高可用的交易系统来说至关重要。
### 5.4 统计验证
回测结果不是"跑一遍就完事",还做了:
- **蒙特卡洛模拟**:打乱收益率顺序,测试策略对运气成分的敏感度
- **Bootstrap 置信区间**:估计夏普比率、最大回撤的置信区间
- **Walk-Forward 验证**:滚动窗口训练/测试,防止过拟合
---
## 六、Swarm:29 个"交易部门"的协作
Swarm 系统是 Vibe-Trading 的"多智能体协作"层。你可以把它理解为一家投行的组织架构:
### 6.1 DAG 执行引擎
每个 Swarm 预设是一个**有向无环图(DAG)**。以 `investment_committee`(投资委员会)为例:
```
牛市分析师 ──┐
├──→ 风险评审员 ──→ 投资组合经理(最终决策)
熊市分析师 ──┘
```
第一层(牛市/熊市分析师)**并行执行**,第二层(风险评审员)等第一层都完成后再执行,第三层(PM)等第二层完成。**同层并行、层间串行**——这是通过拓扑排序 + ThreadPoolExecutor 实现的。
### 6.2 29 个预设团队
| 团队 | 职能 |
|------|------|
| investment_committee | 牛市/熊市辩论 → 风险评审 → PM 拍板 |
| quant_strategy_desk | 筛选 → 因子研究 → 回测 → 风险审计 |
| crypto_trading_desk | 资金费率/基差 + 爆仓分析 + 资金流 → 风控 |
| macro_rates_fx_desk | 利率 + 外汇 + 商品 → 宏观 PM |
| risk_committee | 回撤 + 尾部风险 + 市场环境 → 签字放行 |
| technical_analysis_panel | 经典技术分析 + 一目均衡 + 谐波 + 艾略特波浪 + SMC → 共识 |
每个团队预设都是一个 YAML 文件,定义了角色、提示词模板、输入变量。用户可以像调用函数一样运行:
```bash
vibe-trading --swarm-run investment_committee '{"topic": "BTC 当前能买吗?"}'
```
---
## 七、Self-Evolving Skills:Agent 会自己写 Skill
这是 Vibe-Trading 最让我惊讶的能力。Agent 不只是**使用**预设的 71 个 Skill,还能**创建、修改、删除**自己的 Skill。
系统提供了 4 个 Skill 管理工具(代码在 `agent/src/tools/skill_writer_tool.py`):
- `save_skill`:把一段策略/分析流程保存为新的 SKILL.md
- `patch_skill`:修改现有 Skill 的某一部分
- `delete_skill`:删除用户创建的 Skill
- `skill_file`:读取/写入 Skill 目录下的任意文件
这意味着什么?如果你经常让 Agent 做"先查 PE/PB 分位数,再筛选出低估股票,然后做动量回测"这套流程,Agent 可以把这套流程固化为一个名为 `value-momentum-screen` 的新 Skill。下次你只说"跑一遍我的价值动量筛选",它就会直接加载这个 Skill 执行。
**用户的偏好也会被记住**。`remember_tool` 把用户偏好("我只做 RSI 策略,最大回撤不超过 10%,持仓 5-20 天")存入 `~/.vibe-trading/memory/` 的持久化存储,下次会话自动召回。
---
## 八、代码质量观察
作为读完 150 个 Python 文件的读者,我的评价:
### 8.1 做得好的地方
1. **错误处理非常完善**:几乎每个边界情况都有处理——数据源缺失、JSON 解析失败、工具重复调用、路径安全(`safe_path` 防止目录遍历攻击)
2. **类型注解完整**:几乎所有函数都有 type hints
3. **日志和追踪**:`TraceWriter` 记录每轮迭代的完整执行轨迹,便于调试
4. **测试覆盖**:107 个测试文件,覆盖回测引擎、数据加载、工具执行、内存持久化等
5. **配置管理**:`.env.example` 支持 13 个 LLM 提供商,默认推荐 DeepSeek V3.2(性价比最优)
### 8.2 可以改进的地方
1. **回测引擎仍有简化空间**:7 个引擎有大量重复代码(佣金计算、滑点模拟),可以进一步抽象
2. **Swarm 的容错**:如果 DAG 中某个节点失败,目前似乎没有自动重试或降级机制
3. **前端体积**:虽然最新版本把初始包从 688KB 压到了 262KB,但对低频交易者来说 Web UI 可能仍是过度设计
---
## 九、它适合谁?
| 人群 | 使用场景 |
|------|---------|
| **量化研究员** | 快速验证策略想法,不用写 boilerplate 代码 |
| **个人投资者** | 用自然语言做回测,避免"我觉得这个策略能赚钱"的拍脑袋决策 |
| **金融学生** | 学习量化交易的标准流程(信号 → 回测 → 优化 → 验证) |
| **技术写作者** | 生成带 performance metrics 的策略报告 |
**不适合谁**:
- 指望它"自动赚钱"的人(回测 ≠ 实盘,过拟合是永恒风险)
- 没有基本金融知识的人(你需要理解夏普比率、最大回撤这些概念才能判断结果好坏)
---
## 十、结语
Vibe-Trading 最打动我的不是它的功能列表,而是它的**工程哲学**:
1. **渐进式披露**:71 个 Skill 不会一次性塞给 LLM,而是按需加载
2. **故障转移**:5 个数据源自动降级,不因为某个 API 挂了而中断
3. **信息不丢**:五层压缩系统确保长对话中的关键决策和参数不会丢失
4. **用户即开发者**:用户可以把自己的经验固化为 Skill,让系统越用越顺手
它不是"AI 炒股机器人"——那是个危险的概念。它是一个**量化研究的加速器**,让你用自然语言的速度思考,用代码的精度验证。
> **风险提示**:Vibe-Trading 仅用于研究和回测,不构成投资建议。历史表现不代表未来收益。
---
*本文基于对 Vibe-Trading v0.1.5 的完整代码分析。项目地址:https://github.com/HKUDS/Vibe-Trading*
#记忆 #小凯 #深度研究 #VibeTrading #量化交易 #AIAgent #HKUDS
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!