15 KiB
created, type, status, deadline, tags
| created | type | status | deadline | tags | |||||
|---|---|---|---|---|---|---|---|---|---|
| 2026-03-21 | project | active |
|
Trading Agents 混合架构方案
目标
基于 TradingAgents 原始架构分析 的多角色辩论架构,在现有 OpenClaw 环境上实现 AI 驱动的交易决策系统。数据层使用 openbb-invest-api(133+ 端点,K8s 部署),通过 OpenClaw 的 sessions_spawn + sessions_send 混合架构实现多 Agent 辩论。
一、现有环境
| 组件 | 详情 |
|---|---|
| OpenClaw | v2026.2.13,192.168.68.108(yiukai-ubuntu),systemd 服务 |
| openbb-invest-api | K8s 集群,invest-api.k8s.home(192.168.68.240:8000) |
| 已有 Agent | 5 个 ds-* agent(主 Guild)+ 1 个 invest-analyst(Stock Guild) |
| 已有 Skill | invest-api(调用 openbb-invest-api) |
| 渠道 | Discord(6 bot)+ Telegram |
| 模型 | kimi-coding/k2p5(主),claude-opus-4-6-thinking(备选) |
| Agent 间通信 | ds-* 系列已启用,invest-analyst 独立 |
| Skill 开发 | 在本地 openbb-invest-api 仓库,deploy 脚本推送到远程 |
二、架构设计
Agent 规划(新增 4 个 agent)
在现有 invest-analyst 基础上扩展,不影响 ds-* 系列:
| Agent ID | 角色 | 用途 | Discord 账户 |
|---|---|---|---|
invest-analyst (已有) |
编排者/裁判 | 调度分析、主持辩论、最终裁决 | invest-analyst (已有) |
invest-bull (新) |
多方研究员 | 看多论证 | invest-bull (新 bot) |
invest-bear (新) |
空方研究员 | 看空论证 | invest-bear (新 bot) |
invest-hawk (新) |
激进风控 | 高风险高回报视角 | invest-hawk (新 bot) |
invest-dove (新) |
保守风控 | 资产保护视角 | invest-dove (新 bot) |
复用 invest-analyst 作为编排者(已有 invest-api skill 和 Stock Guild 绑定)。 分析师做成 skill 而非独立 agent(省资源,数据采集不需要对话)。 只有需要"对话"的辩论角色才需要独立 agent。 经实测确认:辩论 agent 通过
sessions_spawn调用(@ mention 会导致无限循环,sessions_send会 gateway 死锁,详见 Trading Agents 调试与优化记录)。 辩论 agent 的 Discord 已禁用(enabled: false),不在频道输出,只在后台运行。
通信模式(最终确认)
用户: /trade-analyze NVDA
│
v
invest-analyst (编排者)
│
├── exec curl 收集 4 类数据(technical, metrics, sentiment, macro)
│
├── sessions_spawn → invest-bull(Bull Case)
│ 等待 announce → Bull 结果返回
│
├── sessions_spawn → invest-bear(Bear Case,附带 Bull 论点)
│ 等待 announce → Bear 结果返回
│
├── sessions_spawn → invest-bull(Final Rebuttal)
│ 等待 announce → Bull 最终反驳返回
│
├── sessions_spawn → invest-hawk(激进风控评估)
│ 等待 announce → Hawk 结果返回
│
├── sessions_spawn → invest-dove(保守风控评估)
│ 等待 announce → Dove 结果返回
│
└── 综合所有结果 → 最终 BUY/SELL/HOLD 裁决
只有 invest-analyst 输出到 Discord
为什么不用群聊辩论
OpenClaw Multi-Agent Group Chat 尚未实现。即使实现了,sessions_send 方案也更优:
| 维度 | 群聊辩论 | sessions_send 辩论 |
|---|---|---|
| 流程控制 | 混乱,谁先说不确定 | 结构化,轮次可控 |
| 循环风险 | 高(可能死循环) | 无(maxPingPongTurns 硬限制) |
| 上下文 | 所有人共享一个上下文窗口 | 每个 agent 独立上下文,更专注 |
| Token 成本 | N 个 agent × 完整群聊历史 | 仅辩论双方共享必要上下文 |
| 当前可用性 | ❌ 未实现 | ✅ 已可用 |
学术依据
- ICLR 2025 MAD 研究:异构 agent + 结构化拓扑效果最好
- Adaptive HMAD:异构辩论准确率高 4-6%,事实错误减少 30%+
- 无结构多 agent 网络会放大错误达 17.2 倍
三、openbb-invest-api 数据覆盖
openbb-invest-api 已完全覆盖 TradingAgents 所有数据需求,且更丰富。
| TradingAgents 数据需求 | openbb-invest-api 端点 | 额外优势 |
|---|---|---|
| 股票行情 OHLCV | /stock/{s}/historical |
✅ |
| 技术指标 (RSI, MACD, BB, ATR) | /stock/{s}/technical/* |
14种 + Ichimoku, Fibonacci |
| 基本面 (财报、资产负债表) | /stock/{s}/financials, /metrics |
✅ |
| 公司新闻 | /stock/{s}/news |
✅ |
| 宏观新闻 | /macro/overview, /economy/* |
CPI, GDP, FOMC 等 |
| 内幕交易 | /stock/{s}/insider-trades |
✅ |
| 情感分析 | /stock/{s}/sentiment |
多源复合 (Finnhub+AV+Reddit) |
独有数据(TradingAgents 没有)
- 做空数据
/shorts/*— 空头量、FTD、暗池 - 期权数据
/market/options/*— Greeks、IV - 固收数据
/fixed-income/*— 收益率曲线、SOFR - DeFi 数据
/defi/*— TVL、收益池 - A股/港股
/cn/*— 实时行情 + 历史 - 投资组合
/portfolio/*— HRP、风险平价、t-SNE 聚类 - 回测
/backtest/*— SMA/RSI/动量策略
四、实现步骤
Phase 0:环境准备(SSH 远程操作)
- 升级 OpenClaw:
npm install -g openclaw@latest(2026.2.13 → 2026.3.13) - 创建 4 个 Discord bot: invest-bull, invest-bear, invest-hawk, invest-dove
- 加入 Stock Guild (
1479926167141355560),开启 Message Content Intent
- 加入 Stock Guild (
- 创建 4 个 agent workspace:
openclaw agents add invest-bull --workspace ~/.openclaw/workspace-invest-bull openclaw agents add invest-bear --workspace ~/.openclaw/workspace-invest-bear openclaw agents add invest-hawk --workspace ~/.openclaw/workspace-invest-hawk openclaw agents add invest-dove --workspace ~/.openclaw/workspace-invest-dove - 更新 openclaw.json: agent list、Discord accounts、bindings、agentToAgent allow、maxPingPongTurns: 5
Phase 1:分析师 Skills
在 openbb-invest-api 仓库的 openclaw-skills/ 目录开发,部署到 invest-analyst workspace。
| Skill | 调用的 API 端点 | 输出 |
|---|---|---|
| market-analysis | /stock/{s}/historical, /technical/composite, /technical/ichimoku |
技术趋势、动量、波动率 |
| fundamental-analysis | /stock/{s}/metrics, /financials, /price-targets, /upgrades |
估值、成长性、分析师共识 |
| sentiment-analysis | /stock/{s}/sentiment, /insider-trades, /reddit/trending |
多源情感、内幕交易动向 |
| macro-analysis | /macro/overview, /fixed-income/yield-curve, /economy/cpi, /shorts/volume |
宏观环境、利率、做空压力 |
API 基础 URL: http://invest-api.k8s.home:8000/api/v1
Phase 2:辩论者 SOUL.md
| Agent | 人格 | 行为 |
|---|---|---|
| invest-bull | 坚定的价值发现者 | 引用数据看多,承认风险但强调上行空间 |
| invest-bear | 谨慎的风险猎手 | 引用数据看空,质疑乐观假设 |
| invest-hawk | 积极进取的交易者 | 更大仓位、更紧止损、积极入场 |
| invest-dove | 稳健的资产守护者 | 分批建仓、更宽止损、保守仓位 |
Phase 3:编排 Skill(trade-analyze)
trade-analyze/SKILL.md 核心编排逻辑:
- 执行 4 个分析 skill → 4 份报告
sessions_send→ invest-bull,ping-pong 到 invest-bear(3-5 轮)sessions_send→ invest-hawk,ping-pong 到 invest-dove(2-3 轮)- 综合裁决 → BUY/SELL/HOLD + 仓位 + 止损 + 理由
- 存入
memory/YYYY-MM-DD.md
Phase 4:记忆 + 复盘
- 每次决策存
memory/YYYY-MM-DD.md(决策、置信度、价格、理由、辩论要点) MEMORY.md持久存储(持仓、胜率、教训)- 每周 cron 复盘:对比预期 vs 实际收益,更新教训
Phase 5:优化 + 扩展
- 加入做空/期权/DeFi 数据
- 日报集成(纳入现有 daily-invest-briefing cron)
- 回测验证 agent 决策历史表现
五、配置变更清单
openclaw.json 变更
{
agents: {
list: [
// ... 现有 6 个保持不变 ...
{ id: "invest-bull", workspace: "~/.openclaw/workspace-invest-bull" },
{ id: "invest-bear", workspace: "~/.openclaw/workspace-invest-bear" },
{ id: "invest-hawk", workspace: "~/.openclaw/workspace-invest-hawk" },
{ id: "invest-dove", workspace: "~/.openclaw/workspace-invest-dove" }
]
},
tools: {
agentToAgent: {
enabled: true,
allow: [
"ds-commander", "ds-strategist", "ds-builder", "ds-creator", "ds-guardian",
"invest-analyst", "invest-bull", "invest-bear", "invest-hawk", "invest-dove"
]
}
},
session: { agentToAgent: { maxPingPongTurns: 5 } },
channels: {
discord: {
accounts: {
// ... 现有 6 个保持不变 ...
"invest-bull": { token: "BOT_TOKEN_BULL" },
"invest-bear": { token: "BOT_TOKEN_BEAR" },
"invest-hawk": { token: "BOT_TOKEN_HAWK" },
"invest-dove": { token: "BOT_TOKEN_DOVE" }
}
}
},
bindings: [
// ... 现有保持不变 ...
{ agentId: "invest-bull", match: { channel: "discord", accountId: "invest-bull" } },
{ agentId: "invest-bear", match: { channel: "discord", accountId: "invest-bear" } },
{ agentId: "invest-hawk", match: { channel: "discord", accountId: "invest-hawk" } },
{ agentId: "invest-dove", match: { channel: "discord", accountId: "invest-dove" } }
]
}
六、文件清单
本地开发(openbb-invest-api 仓库)
openclaw-skills/
├── trade-analyze/SKILL.md # 主编排 skill
├── market-analysis/SKILL.md # 技术分析 skill
├── fundamental-analysis/SKILL.md # 基本面分析 skill
├── sentiment-analysis/SKILL.md # 情感分析 skill
├── macro-analysis/SKILL.md # 宏观环境分析 skill
├── souls/
│ ├── invest-bull.md # Bull SOUL.md
│ ├── invest-bear.md # Bear SOUL.md
│ ├── invest-hawk.md # Hawk SOUL.md
│ └── invest-dove.md # Dove SOUL.md
├── agents/
│ ├── invest-bull.md # Bull AGENTS.md
│ ├── invest-bear.md # Bear AGENTS.md
│ ├── invest-hawk.md # Hawk AGENTS.md
│ └── invest-dove.md # Dove AGENTS.md
└── deploy.sh # SCP 部署脚本
部署脚本
#!/bin/bash
REMOTE="yiukai@192.168.68.108"
CLAW="~/.openclaw"
# Skills → invest-analyst workspace
for s in trade-analyze market-analysis fundamental-analysis sentiment-analysis macro-analysis; do
scp -r "openclaw-skills/$s" "$REMOTE:$CLAW/workspace-invest-analyst/skills/"
done
# SOUL.md + AGENTS.md → 各辩论 agent workspace
for a in invest-bull invest-bear invest-hawk invest-dove; do
scp "openclaw-skills/souls/$a.md" "$REMOTE:$CLAW/workspace-$a/SOUL.md"
scp "openclaw-skills/agents/$a.md" "$REMOTE:$CLAW/workspace-$a/AGENTS.md"
done
ssh $REMOTE "openclaw gateway restart"
七、验证方案
- 网络连通: SSH →
curl http://invest-api.k8s.home:8000/health - 单个 Skill: Discord
/market-analysis NVDA→ 技术分析报告 - 辩论 Ping-Pong:
sessions_sendinvest-bull → ping-pong invest-bear - 完整流程:
/trade-analyze AAPL→ 4 报告 + 辩论 + 裁决 - 回归检查: invest-analyst 日报 cron + ds-* agents 正常
八、风险与应对(Review 发现)
风险 1:sessions_send 消息回声 Bug
Issue #7804:sessions_send 的 A2A flow 会把 assistant 回复作为新的 role=user 消息回注,导致 agent 看到自己的输出并再次回复,形成混乱循环。
应对:在辩论 agent 的 AGENTS.md 中加入明确指令——如果收到的消息与自己上一条回复内容相同,回复
REPLY_SKIP终止循环。升级 OpenClaw 到最新版后此问题可能已修复。
风险 2:Token 成本失控
每次完整辩论 = 4 次分析 + 6-10 轮辩论 + 4-6 轮风控 + 裁决 ≈ 15-20 次 LLM 调用。研究显示输出 token 价格是输入的 4-8 倍。
应对:
- 分析 skill 要求 LLM 输出结构化 JSON(省 15% token)
- 辩论 agent SOUL.md 加入字数限制(每轮 300-500 字)
- 风控辩论设
maxPingPongTurns: 3(风控观点 2-3 轮即收敛)- 分析师用便宜模型(Haiku),辩论用强模型(Opus/Sonnet)
风险 3:Agent Stuck 导致流程卡死
知识库记录 invest-analyst 曾出现 stuck 并被 health-monitor 重启。如果辩论 agent stuck,整个流程会卡住。
应对:
sessions_send使用timeoutSeconds参数(建议 120s)- 超时后跳过辩论,直接基于分析报告出裁决
- 输出中标注"⚠️ 辩论未完成,置信度降低"
- 依赖 OpenClaw health-monitor 自动重启 stuck agent
最佳实践参考
- Hub-and-Spoke 优于 Mesh:中心编排者模式在生产环境更可预测、更易调试
- 3-7 个 Agent 最佳:低于 3 个不需要多 agent,高于 7 个协调开销超过收益
- 异构 Agent 效果更好:不同角色用不同人格和模型,比同构 agent 准确率高 4-6%
- 结构化输出优于散文:JSON 报告比自然语言更高效传递信息
九、与 TradingAgents 的差异
| 维度 | TradingAgents (LangGraph) | OpenClaw 混合架构 |
|---|---|---|
| 编排 | 显式状态机,条件路由 | sessions_spawn + sessions_send |
| 并行 | 4 分析师真并行 | Skill 串行(分析师不需要并行,数据采集很快) |
| 辩论 | 多轮循环,独立 LLM 调用 | ping-pong 机制,最多 5 轮 |
| 记忆 | 自建 BM25 | OpenClaw 内建(BM25 + 向量 + 时间衰减) |
| 数据 | yfinance 直调 | openbb-invest-api(133+ 端点) |
| 交互 | 纯 CLI/API | Discord/Telegram 直接对话 |