第 1 章 · 03 整体架构与 Agent 流水线 本节摘要:本节把 AutoHedge 的所有部件拼成一张完整的架构图。控制流是这样的:用户给一个 task 字符串 → AutoHedge 主类维护的 Conversation 记录它 → Director Agent 接管,通过 handoffs 自主调度四个专家(情绪/量化/风控/执行)→ 专家各自用模型与工具产出 → 结果汇回。此外,AutoHedge 实际有两条执行链路:一条是「股票分析」(只生成订单结构,不真实下单),另一条是「Solana 实盘」(ultratools 真实签名并广播)。本节讲清这条流水线怎么流动、两条链路的差异。读完本节,你脑子里有了 AutoHedge 的全景图,后续章节就是放大看每个部件。
本节摘要:本节把 AutoHedge 的所有部件拼成一张完整的架构图。控制流是这样的:用户给一个 task 字符串 → AutoHedge 主类维护的 Conversation 记录它 → Director Agent 接管,通过 handoffs 自主调度四个专家(情绪/量化/风控/执行)→ 专家各自用模型与工具产出 → 结果汇回。此外,AutoHedge 实际有两条执行链路:一条是「股票分析」(只生成订单结构,不真实下单),另一条是「Solana 实盘」(ultra_tools 真实签名并广播)。本节讲清这条流水线怎么流动、两条链路的差异。读完本节,你脑子里有了 AutoHedge 的全景图,后续章节就是放大看每个部件。
内容来源:综合
main.py、workers.py、tools/ultra_tools.py,精读并套用体系化模板。
⚠️ 现实澄清:架构图看起来很完整,但要记住——股票端「执行 Agent」并不真实下单,Solana 端虽有真实下单但缺成熟风控。架构完整 ≠ 功能完整。
阅读完本节,你应当能够:
从 main.py 的 run() 方法看,一次完整的交易周期是这样流转的:
对应的核心代码(main.py,精简):
def run(self, task: str, *args, **kwargs): self.conversation.add(role="user", content=f"Task: {task}") try: output = director_agent.run(task=task) # 交给 Director self.conversation.add(role="director", content=output) if self.output_type == "list": return self.conversation.return_messages_as_list() if self.output_type == "dict": return self.conversation.return_messages_as_dictionary() if self.output_type == "str": return self.conversation.return_history_as_string() return self.conversation.return_messages_as_list() except Exception as e: logger.error(f"Error in trading cycle: {str(e)}") raise
注意:AutoHedge 主类本身不做交易决策,它只是「记一笔用户任务 → 调 Director → 记一笔结果 → 按格式返回」。所有智能都在 Director 与专家 Agent 里。
Director 收到 task 后,在自己的 system_prompt 引导下,通过 handoffs 把子任务分给专家:
每个专家的产出约定(由 workers.py 里追加的 prompt 段定义):
ticker, technical_score, volume_score, trend_strength, volatility, probability_score, key_levels。仓位大小、最大回撤风险、市场风险敞口、整体风险评分。订单类型(市价/限价)、数量、入场价、止损、止盈、有效期。💡 关键观察:Director 是唯一的「编排者」,四个专家平级、互不直接交接,只通过 Director 串联。这是一种典型的 Orchestrator-Worker(编排者-工人)模式,清晰但依赖 Director 的判断力。
AutoHedge 宣称能交易,但实际有两条完整度悬殊的链路:
task(如"分析石油市场") → Director → 调 sentiment/quant/risk/execution → execution_agent 只"生成订单结构"(文字/JSON) → 写入 logs(对话日志 CSV)
关键:这条链路的「执行」止于生成订单的文字描述,不会真的去交易所下单。execution_agent 没有 tools=[下单函数],它只是个会写订单格式的 LLM。所谓「全自主股票交易」在这条链路上并未实现。
触发条件 → get_order(input/output mint, amount) 取未签名交易 → execute_trade(unsigned_tx, request_id): Keypair 从 SOLANA_PRIVATE_KEY 恢复 VersionedTransaction.from_bytes 解析 sign_message 用私钥签名 POST 给 Jupiter /execute 端点广播
关键:这条链路是项目里唯一真实动钱的代码(在 ultra_tools.py)。它通过 Jupiter Ultra Swap API + solders 签名,能真的在 Solana 上完成代币兑换。第 8 章会逐行精读。
| 维度 | 链路 A 股票分析 | 链路 B Solana 实盘 |
|---|---|---|
| 真实下单 | ❌ 只生成订单结构 | ✅ 真实签名广播 |
| 触发方式 | Director 自动编排 | 需显式调 get_order/execute_trade |
| 风控成熟度 | 依赖 LLM 文字输出 | 几乎无链上风控 |
| 教学价值 | 多 Agent 编排示范 | Solana 签名实战 |
⚠️ 现实澄清:README 把两条链路混为一谈,宣称「完全自主交易」。实际上股票端不下单,Solana 端虽下单但风控脆弱。两者都不能算「可用的自主交易」。
Agent 能做的事,取决于给它配了什么工具(tools/ 目录):
| 工具 | 作用 | 谁在用 |
|---|---|---|
exa_search |
Exa.ai 自然语言网页搜索 | 情绪 Agent |
yahoo_api |
股票报价/历史 | (可被量化用) |
jupiter_price/search |
Solana 代币价/搜索 | (可被量化用) |
polygon_api |
占位(实际 massive.com) | 几乎无用 |
ultra_tools(get_order/execute_trade/get_holdings) |
Solana 真实交易 | 链路 B |
注意:从 workers.py 看,目前只有情绪 Agent 显式带了 tools=[exa_search],其他专家的 tools 多为空或未在实例化时绑定。这意味着很多工具是「存在但未接入 Agent」——这也是项目「未完成」的体现。第 6~8 章会详讲工具层。
把所有部件叠在一起,AutoHedge 的全景:
用户 task │ ▼ [第5章 CLI] rich REPL ── 接收输入、记历史 │ ▼ [第5章 main.py] AutoHedge.run ── Conversation 记账 ── 调 Director │ ▼ [第3章 workers.py] Director(gpt-4.1) ──handoffs──► 情绪 / 量化 / 风控 / 执行 专家 │ │ │ [第4章 prompts.py] │ │ 每个 Agent 的 system_prompt │ │ ▼ │ [第6章 tools/ exa_search] [第7章 tools/ yahoo/jupiter 数据] │ │ │ ▼ │ [第8章 tools/ultra_tools.py] Solana 真实签名 │ ▼ 输出 list/dict/str + logs CSV
后续每一章,就是放大看这张图里的一个框。
AutoHedge.run → Conversation 记账 → director_agent.run → 专家产出 → 按 output_type 返回;主类本身不做决策。至此第 1 章结束,你对 AutoHedge 有了全景认识。下一章,我们配好环境、跑通 example.py,让这些 Agent 真正转起来。