Skip to content

Hyper-Trading-Agent 项目解析:一个可审计金融投研 Agent 系统的设计与实现 ​

更新: 1970/1/1 字数: 0 字 时长: 0 分钟

项目名称:Hyper-Trading-Agent / Hyper Trading Agent
仓库地址:970thunder/Hyper-Trading-Agent
分析快照:2026-07-14,Commit 7bd6e94,pyproject.toml 版本 0.1.10
适合读者:希望了解 AI Agent、量化投研平台、多 Agent 编排和高风险工具治理的开发者

前言 ​

很多 Agent 项目的基本形态是“给大模型一段系统提示词,再挂几个函数”。Hyper-Trading-Agent 已经越过了这个阶段。它把金融研究拆成了数据获取、知识检索、因子分析、策略回测、报告生成、长期目标、多 Agent 协作和受控交易等多个子系统,并围绕这些能力补上会话、事件流、审批、审计、持久化和 Web 管理界面。

因此,更准确的定位不是“AI 炒股机器人”,而是:

一个以大模型为任务路由器,以 Tool 为执行能力、以 Skill 为方法约束,以会话、证据、产物和审计记录为可信基础的金融研究工作台。

仓库当前统一使用 Hyper-Trading-Agent 作为项目展示名称,Python 包与命令行入口分别采用 hyper-trading-agent、hyper-trading 和 hyper-trading-mcp 等小写形式。本文中的 Hyper Trading Agent 仅作为自然语言表达,不代表另一个独立系统。

这篇文章主要回答四个问题:

  1. 这个系统已经实现了哪些功能?
  2. 单 Agent 和多 Agent 分别怎样运行?
  3. 金融数据、回测、RAG 和交易安全如何接入 Agent?
  4. 哪些设计值得复用,哪些部分仍处于工程化过程中?

本文只讨论软件架构和研究工作流,不构成任何投资建议。

一、项目全貌 ​

1.1 从功能数量看系统规模 ​

以下数据来自 Commit 7bd6e94 对应工作区的仓库扫描。Skill 和工具按目录/文件统计,测试按 test_*.py 统计;它们会随项目继续开发而变化,但可以帮助我们建立量级概念。

维度2026-07-14 快照说明
内置 Skill 目录79数据源、策略、技术分析、风险、报告等场景知识
本地工具模块47按 *_tool.py 统计,不等同于最终注册工具数
Swarm 团队预设29每个预设是一张 Agent 与任务依赖图
Alpha 因子456Alpha101、GTJA191、Qlib158、Academic 四类;按当前源码文件统计
Python 测试文件254覆盖 Agent、数据、回测、交易治理、RAG、Swarm 等
Python 源文件1123大量文件来自按因子拆分的 Alpha Zoo

项目同时提供四类使用入口:

  • Web 工作台:Agent 对话、运行详情、报告、知识库、Alpha Zoo、相关性分析和企业管理。
  • CLI:交互对话、运行、会话、目标、Swarm、Alpha、连接器和服务启动。
  • MCP Server:把金融研究能力暴露给 Claude Desktop、Cursor、OpenClaw 等 MCP 客户端。
  • 消息通道:适配钉钉、Discord、飞书、Matrix、Microsoft Teams、QQ、Slack、Telegram、企业微信、微信、WhatsApp 等渠道。

1.2 功能地图 ​

Hyper-Trading-Agent 功能地图

图 1:项目能力可以分成入口、Agent Runtime、金融研究能力、治理能力和产物沉淀五个区域。

模块主要功能解决的问题
Agent RuntimeReAct 工具循环、流式输出、上下文压缩、取消和重试让模型能够持续执行真实任务,而不只是生成文本
Tool / Skill工具自动注册、按需加载方法论、MCP 扩展分离“知道怎样做”和“真正执行”
Session / Goal会话、Attempt、计划状态、长期研究目标、证据账本让任务可以追踪、暂停、恢复和跨轮次推进
Market Data多市场识别、多数据源路由和自动回退降低单一行情源失败对研究的影响
Backtest多市场引擎、策略代码校验、指标、交易与权益产物把自然语言假设变成可复现的历史检验
Alpha Zoo因子浏览、批量评测、比较和安全检查提供可计算的研究素材,避免模型凭记忆编造公式
SwarmYAML 团队预设、DAG 调度、并行 Worker 和汇总将复杂研究拆给不同角色并保留独立产物
Knowledge / RAG文件与 URL 入库、分片、关键词/向量/混合检索、引用将组织私有知识接入 Agent
Trading Governance连接器、Mandate、Order Gate、Halt、Audit将研究能力与真实交易风险隔离
Commercial登录、组织、RBAC、模型管理、工具策略、审计和用量支撑多人和商业化部署
FrontendAgent、Runtime、Reports、Run Detail、Admin 等工作区把执行过程、风险状态和研究产物显式呈现

二、总体架构 ​

Hyper-Trading-Agent 采用的是“多入口、单能力核心、分层治理”的结构。Web、CLI、MCP 和消息渠道并不各自实现一套研究逻辑,而是复用 Agent、工具、数据、回测与持久化模块。

Hyper-Trading-Agent 总体架构

图 2:多入口统一进入会话与 Agent 核心,金融能力经工具注册表调用,真实交易和企业能力由治理层单独拦截。

图中鉴权和 Policy 按受保护工作区请求的硬 Gate 表达;本地 CLI、回环兼容模式以及 /health 等公开端点有各自的例外规则。两条 Runtime Job 存储边表示可选 Backend,不是一次任务同时写入两套后端。

从代码目录也能看出这种分层:

text
agent/
├── api_server.py              # Web/API 入口和主要 HTTP 安全边界
├── mcp_server.py              # MCP 对外能力入口
├── cli/                       # 交互式命令行
├── backtest/                  # 数据 Loader、回测引擎、指标和优化器
└── src/
    ├── agent/                 # 上下文、ReAct Loop、Skill、Trace
    ├── api/                   # 按领域拆分的 REST 路由
    ├── session/               # 会话、Attempt、SSE 事件、搜索
    ├── tools/                 # Agent 可调用工具
    ├── skills/                # 领域工作流和方法文档
    ├── swarm/                 # 多 Agent DAG 编排
    ├── factors/               # Alpha Zoo 与因子评测
    ├── knowledge/             # 本地知识检索
    ├── commercial/            # 组织、RBAC、RAG、审计和用量
    ├── live/                  # 实盘授权、限制、熔断和审计
    ├── trading/               # Broker Connector
    ├── goal/                  # 长期研究目标和证据
    ├── memory/                # 持久记忆与写入策略
    └── reliability/           # 产物、哈希、血缘和脱敏

frontend/src/
├── pages/                     # Agent、Runtime、Reports、Admin 等页面
├── components/                # 业务组件与通用 UI
├── stores/                    # Zustand 状态
├── hooks/                     # SSE 等交互逻辑
└── lib/                       # API、图表、引用和格式化

2.1 先分清几个运行实体 ​

项目里多处使用了 Run,但它们不是同一个对象。理解以下映射后,再读 AgentLoop 和 Runtime 会容易很多。

实体含义主要归属
Session一段持续对话,包含配置和多条消息src/session
MessageSession 中的一条用户、助手或系统消息src/session
Attempt一条用户消息触发的一次可暂停、恢复或审批的执行尝试src/session
Runtime Job耗时 Attempt 或入库任务的队列/状态记录,由本地执行器或 Durable Worker 消费src/runtime_jobs
Agent RunAgentLoop 一次执行对应的目录、状态、Trace 与 Artifactagent/runs
Backtest RunAgent Run 内或独立目录中的回测配置、代码和结果产物backtest
Swarm Run一次独立的 DAG 团队运行,包含多个 Task 与 Worker 结果src/swarm
Durable Worker从 Redis 等持久队列消费 Runtime Job 的独立进程src/commercial/worker.py
Swarm Worker在某次 Swarm Run 中执行一个 DAG Task 的 Agent 角色实例src/swarm/worker.py
Plan StepAttempt 面向产品界面的阶段状态,不等同于 Swarm Tasksrc/session

通常是一条 Message 创建一个 Attempt;Attempt 可以在进程内运行,也可以被包装成 Runtime Job;执行过程中再产生 Agent Run、Backtest Run 或 Swarm Run。

三、单 Agent 的运行机制 ​

3.1 ContextBuilder:先决定模型能看到什么 ​

Agent 的能力上限不只由模型决定,还取决于上下文是否准确。src/agent/context.py 中的 ContextBuilder 会组装:

  1. 金融研究角色和专业输出要求;
  2. 当前已注册工具的名称、说明和参数 Schema;
  3. 所有 Skill 的一句话摘要;
  4. 当前运行目录和工具调用计数;
  5. 与当前问题相关的持久记忆;
  6. 会话历史和当前用户消息;
  7. 活跃 Research Goal 的目标、检查项和预算。

这里有一个关键的上下文工程设计:系统提示词只放 Skill 摘要,不把 79 份完整文档全部塞进去。模型判断场景后,先调用 load_skill,再把对应方法、模板和约束加载到上下文。这是一种 Progressive Disclosure(渐进式披露)机制。

它带来三个好处:

  • 降低初始 Prompt 的 Token 成本;
  • 减少不同场景规则互相干扰;
  • Skill 可以独立更新,也允许用户 Skill 覆盖同名内置 Skill。

3.2 AgentLoop:模型与工具之间的 ReAct 循环 ​

src/agent/loop.py 是系统的核心。一次运行大致经历以下过程:

AgentLoop 运行机制

图 3:一次 Agent 运行不是单次模型调用,而是上下文构建、模型流式输出、工具校验执行、证据落盘和事件返回的循环。

这个循环并不是简单的 while + function calling。代码里处理了不少真实系统才会遇到的问题:

  • 流式故障重试:中途断流时,对可重试错误进行一次重连,并避免重复展示旧增量。
  • 内容过滤熔断:Provider 连续拦截响应时终止循环,避免耗尽全部迭代预算。
  • 最后一轮强制文本:达到迭代上限时不再提供工具定义,促使模型给出结果而不是继续调用工具。
  • 合作式取消:在迭代边界、流式 Chunk 和工具批次之间检查取消标记;已经开始的写工具不会被强制杀死,因此取消不是对所有阶段都立即生效。
  • 重复调用抑制:不可重复工具成功后,再次调用会被阻止并复用已有结果。
  • 输出压缩:超长答案保存完整文件,界面只展示摘要和完整产物路径。
  • Trace 脱敏:工具参数、结果和 Provider 错误在写轨迹前清理密钥及内部路径。

3.3 只读并行,写操作串行 ​

Agent 一次可能返回多个 Tool Call。项目根据工具元数据将它们分成两类:

  • 连续的只读工具使用线程池并行执行,最多 8 个线程;
  • 写工具按顺序串行执行。

对超时的处理也不同:只读工具超时后可以返回有界错误并丢弃迟到结果;写工具不能粗暴杀死,因为它可能已经写入了一半,所以系统只发出超时警告并等待完成。

这是一个很实用的通用原则:

并发策略不应只看性能,还要看副作用能否回滚。

3.4 多层上下文压缩 ​

长任务很容易撑满模型上下文。AgentLoop 使用分层压缩:

  1. Microcompact:在压力出现后清理较旧的工具结果;
  2. Context collapse:折叠长文本,不额外调用模型;
  3. Auto compact:让模型生成结构化摘要,同时保留最近约 20K Token 的消息尾部;
  4. Manual compact:模型可主动调用 compact,指定需要保留的主题。

压缩前会保存完整 Transcript,并修复可能被截断的 Tool Call / Tool Result 配对。摘要不是一次性覆盖,而是在上一次摘要上继续更新,以减少多轮压缩造成的信息衰减。

四、Tool 与 Skill:执行能力和方法论分离 ​

Tool、Skill 与证据层的分工

图 4:Tool 负责执行,Skill 负责方法约束,Trace、Artifact 和 Citation 负责让结论可复查。

4.1 Tool Registry 的自动发现 ​

本地工具继承 BaseTool。src/tools/__init__.py 会扫描工具包、导入模块,再收集所有非抽象子类。增加一个普通工具时,通常只需要新增文件和工具类,不必维护中央注册表。

每个工具除了名称、描述和参数 Schema,还可以声明:

  • 是否只读;
  • 是否允许重复调用;
  • 风险级别;
  • 是否需要人工审批;
  • 依赖是否可用;
  • 超时与治理信息。

注册器还承担依赖注入,例如把持久记忆、Session ID、事件回调、模型配置和 Swarm 运行时交给需要它们的工具。

Shell 工具是显式能力边界。CLI 本地环境可以选择启用,网络 API 和远程 MCP 默认关闭,除非运维人员明确开放。

4.2 MCP 让工具系统可以向外扩展 ​

系统既能作为入站 MCP Server,把自己的研究能力提供给其他 Agent;也能作为出站 MCP Client,接入运维人员配置的外部工具或 Broker MCP。两条方向必须区分:入站公共 MCP 面向调用方,明确不提供下单/撤单;出站 MCP 则是内部 Tool Registry 或交易连接器的一种实现方式,仍受本地白名单和交易 Gate 约束。外部 MCP Server 的 URL、命令和允许工具列表来自启动时的可信配置,而不是由调用 Swarm 的用户动态传入。

Swarm Worker 还会在此基础上做一次白名单投影:每个 Agent 只能看到预设中声明的工具。也就是说,MCP 扩展性并没有绕过 Agent 级最小权限。

4.3 Skill 不是工具说明书 ​

Skill 保存的是“如何完成一类任务”的知识,例如:

  • 如何生成符合回测引擎契约的 SignalEngine;
  • 如何分析财务报表、资金流、期权、波动率或技术形态;
  • 如何读取交易流水并诊断行为;
  • 如何从个人交易历史提取 Shadow Account;
  • 如何生成研究报告和风险披露。

Tool 解决“能调用什么”,Skill 解决“应该按什么步骤调用、怎样解释结果”。二者分离后,工具 API 可以保持稳定,研究方法可以快速演进。

系统还提供 save_skill 和 patch_skill,允许把一次成功工作流沉淀为用户 Skill。用户目录中的同名 Skill 优先于内置版本,形成一个简单的自我改进闭环:

text
完成任务
  -> 识别可复用流程
  -> 保存或修订 Skill
  -> 下次只注入摘要
  -> 需要时加载新版本全文

五、金融数据与回测系统 ​

5.1 多市场数据路由 ​

金融数据源经常会因为网络、限流、Token、代码格式或服务波动失效。项目没有把单个数据 SDK 直接散落在工具中,而是抽象了 Loader 和市场回退链。

当前覆盖 A 股、港股、美股、数字资产、期货、基金、宏观和外汇。部分默认回退链如下:

市场数据源回退顺序
A 股Tencent → MootDX → Eastmoney → BaoStock → AKShare → Tushare → Local
美股Yahoo → Stooq → Sina → Eastmoney → yfinance → Tiingo → FMP → Finnhub → AlphaVantage → AKShare → Local
港股Eastmoney → Yahoo → Futu → yfinance → AKShare → Local
数字资产OKX → CCXT → yfinance → Local
外汇AKShare → yfinance → Local

source=auto 时,系统先根据标的代码判断市场,再选择可用 Loader。用户显式指定 local 时则禁止偷偷回退到网络数据源,防止本地数据桥配置错误被悄悄掩盖。

5.2 回测不是让模型临时写一套引擎 ​

Agent 只负责生成策略契约和配置,真正执行的是固定回测入口 backtest/runner.py。典型流程是:

金融数据与回测流水线

图 5:自然语言假设会被拆到数据路由、策略契约、固定回测引擎、指标归因和报告产物,而不是让模型临时发明整套回测系统。

  1. 加载策略生成 Skill;
  2. 写入 config.json;
  3. 生成 code/signal_engine.py;
  4. 对配置和 Python 代码做预检;
  5. 由固定 Runner 选择数据源和市场引擎;
  6. 输出指标、权益曲线、交易记录、验证结果和日志;
  7. Agent 再读取产物进行归因和风险分析。

内置引擎覆盖 A 股、中国期货、全球股票、全球期货、数字资产、外汇、期权组合和跨市场组合。组合优化器包括风险平价、均值方差、最大分散化和等波动等方法。

这种结构把“创造策略”和“执行账本”分开。模型可以写信号,但不能随意改变撮合、数据校验和指标口径,因此结果更容易复现。

5.3 回测后的分层归因 ​

系统 Prompt 规定,回测完成后不能只报总收益、夏普和最大回撤,还要根据策略状态和数据可用性继续执行:

  • 交易级归因:赢家、输家、退出原因和持有期;
  • Beta 回归:策略对市场基准的暴露;
  • 市场状态分析:牛市、熊市、高波动和震荡期;
  • Monte Carlo 排列检验:判断结果是否可能来自随机交易顺序。

同时要求每个结论引用具体数据,不能补造缺失指标,并必须披露主要风险。这说明项目不仅在实现“工具调用”,也在代码 Prompt 中固化研究质量门槛。

六、Alpha Zoo:把因子研究做成基础设施 ​

项目当前内置 456 个 Alpha。CHANGELOG 0.1.8 发布时记录为 452 个,之后 Academic 组继续扩充;这里采用 2026-07-14 源码快照口径:

因子族数量定位
Qlib158154Microsoft Qlib 常用价量特征
Alpha101101公式化价量 Alpha
GTJA191191面向 A 股语境的短周期因子
Academic10Fama-French、Carhart 及其他学术代理因子

Alpha Zoo 不只是代码集合,还包含元数据、公式、来源说明、注册器、批量 Bench、因子比较和 Web 浏览界面。因子可以组合为 ZooSignalEngine,进行截面标准化、加权以及 Top-N / Bottom-N 多空转换。

这一部分最有价值的是安全与研究约束:

  • AST 白名单禁止因子模块访问网络、文件、进程、动态执行等能力;
  • Look-ahead 测试会篡改探测点之后的未来数据,验证当前因子值不随未来变化;
  • Registry 检查无限值和大面积空值;
  • 严格 Bench 要求随机对照组;
  • 因子测试默认禁止访问外网。

这说明“公式能运行”不是完成标准。对量化研究而言,“没有偷看未来、没有隐藏副作用、能与随机基线比较”才是最小可信条件。

七、Swarm:基于 DAG 的多 Agent 研究团队 ​

7.1 为什么使用 DAG,而不是开一群 Agent 自由聊天 ​

项目的多 Agent 不是一个共享群聊。每个 YAML 预设明确声明:

  • Agent 角色和系统 Prompt;
  • 可用 Skill 与工具白名单;
  • 模型和重试策略;
  • 任务及其依赖关系;
  • 最终由哪个角色汇总。

例如投资委员会和量化策略团队可以建模为两张不同的 DAG:

Swarm DAG 多 Agent 编排

图 6:Swarm 的核心是任务依赖图。角色不是在群聊里自由发言,而是按照上游产物和下游依赖完成研究。

DAG 的优势是依赖明确、可并行、可重试,也容易解释“最终结论依赖了哪些上游结果”。自由聊天适合探索,DAG 更适合可重复生产。

7.2 调度机制 ​

SwarmRuntime 会先验证 DAG,再计算拓扑层:

  • 同一层任务放进线程池并行执行;
  • 下一层必须等待上一层完成;
  • 上游失败时,下游任务标记为 Blocked,不会带着空输入继续运行;
  • 每个 Worker 只拿到自己的 Prompt、依赖摘要、Grounding 数据和工具白名单;
  • 任务产物、Token、迭代次数、错误和事件分别保存;
  • 运行支持取消、失败重试、心跳和陈旧任务回收。

在执行前,系统还会从用户变量中提取证券代码并预取行情 Grounding。Grounding 期间持续写心跳,避免慢行情接口让运行被误判为失联。

7.3 29 个团队预设覆盖什么 ​

预设包括投资委员会、风险委员会、量化策略、因子研究、宏观策略、全球资产配置、基本面研究、财报研究、行业轮动、事件驱动、ETF 配置、基金筛选、衍生品、统计套利、配对交易、数字资产研究、情绪情报和地缘风险等。

这些团队的价值不在于 Agent 数量,而在于把研究职责和审查关系模板化。例如“多头和空头并行 → 风险官审查 → 组合经理决策”天然比让单个模型先后扮演四个角色更容易留下独立证据。

八、会话、目标、记忆与产物 ​

8.1 Session、Attempt 和 Message ​

一次对话不是一个不可分割的黑盒。项目把它拆成:

  • Session:持续会话和配置;
  • Message:用户、助手和系统消息;
  • Attempt:一次可运行、可暂停、可恢复、可审批的执行尝试;
  • Plan Step:前端展示的执行阶段;
  • Approval Record:高风险 Tool Call 的审批记录;
  • Snapshot:Attempt 当前状态的持久化快照。

事件通过 EventBus 进入 SSE。它支持订阅、有限缓冲和重放,所以在事件仍位于缓冲区时,刷新页面或短暂断线后可以恢复近期进度;它不是无限期事件仓库。前端把文本增量、推理状态、工具调用、工具结果、Swarm 状态和交易治理事件渲染为不同类型的时间线内容。

8.2 ReAct 与 Plan-Execute 的真实含义 ​

系统会根据请求长度和“回测、RAG、多 Agent、报告、因子”等关键词,在 react 与 plan_execute 间自动选择。

需要注意:当前 plan_execute 主要是 Attempt 状态和界面步骤的结构化表达。它预置“规划、执行、汇总”三个步骤,但核心执行仍然进入同一个 AgentLoop,还不是一套独立的 Planner 生成动态任务图、Executor 按图执行的实现。

暂停、恢复、审批和 Snapshot 来自 Session / Attempt 基础设施,react 与 plan_execute 都能复用,并不是 Plan-Execute 独有能力。在阅读架构时,需要准确区分“产品上的计划模式”和“运行时的独立规划器”。

8.3 Research Goal:让长期任务有完成标准 ​

Research Goal 为跨轮次研究增加了:

  • 明确 Objective;
  • 必选 Criteria;
  • Evidence 证据记录;
  • Token、轮次和时间预算;
  • 风险等级;
  • 完成、阻塞、取消和超预算状态;
  • 状态审计。

活跃 Goal 会被注入 Agent 上下文。模型给出中间答案后,如果检查项仍未覆盖,AgentLoop 可以继续推进,而不是把每一段自然语言都当成最终答案。

Goal 策略明确拒绝创建真实交易执行目标。长期自治被限定在 Research-only 范围内,这是金融 Agent 必须有的边界。

8.4 三种“记忆”不要混为一谈 ​

类型保存内容生命周期
WorkspaceMemoryRun 目录、工具计数等轻量状态单次 AgentLoop
PersistentMemory用户偏好、项目知识、策略经验跨会话
Session Search历史会话标题和消息片段跨会话检索

持久记忆有独立 Policy,负责限制可写类型和检测敏感内容。历史会话召回会附带 conversation:<session_id> 引用,并提醒模型将其视为历史笔记,当前市场事实仍需重新验证。

8.5 运行产物比聊天文本更重要 ​

每次运行都有独立目录,用于保存请求、配置、策略代码、指标、权益、交易、报告和 Trace。可靠性模块进一步为产物提供:

  • 原子写入;
  • SHA-256 哈希;
  • 结构化元数据;
  • 上下游血缘引用;
  • 路径约束;
  • 敏感字段脱敏。

这种设计让最终回答只是“结果入口”,真正可复现的是背后的文件与记录。

九、Knowledge / RAG ​

9.1 入库与检索流程 ​

知识库支持 PDF、Word、Excel、Markdown、TXT、HTML、CSV 和 URL。一次入库任务会经历:

text
queued
  -> parsing / fetching
  -> chunking
  -> embedding
  -> indexing
  -> completed / failed / cancelled

管理界面可以查看 Parser、分片文本、Embedding 来源与维度、失败原因、进度和历史任务,并支持取消、重试、重建索引和删除。

检索模式包括:

  • keyword:SQLite FTS 关键词检索;
  • vector:查询向量与 Chunk 向量的余弦相似度;
  • hybrid:当前实现将词法分数按 0.65、向量分数按 0.35 合并;
  • 每条结果保留来源 URI、Chunk 位置、分数和稳定 Citation。

Agent 的专业输出策略要求:只要结论来自 Knowledge Search,就必须附带 Citation 或 Source URI。

9.2 RAG 的边界 ​

RAG 已具备实际的关键词、向量和混合检索路径,但生产数据层还没有完全迁移到 PostgreSQL + pgvector。当前 Chunk、Embedding 和部分商业数据仍以 SQLite 为主,pgvector Schema 和 Adapter 已存在,完整运行时读写对等仍在计划中。

另外,Citation 只能证明“这句话来自哪份材料”,不能证明材料一定真实、最新或适用于当前市场。来源治理、版本、权限、有效期和评测集仍然是 RAG 质量的一部分。

十、真实交易为何必须单独治理 ​

项目支持多个 Broker Connector,例如 Alpaca、Binance、Dhan、Futu、IBKR、Longbridge、OKX、Robinhood、Shoonya、Tiger 和 Trading 212。系统内部仍可以用受控写 Tool 表达下单意图,但它不是一个注册后即可直达 Broker 的普通 Tool Call:执行前必须进入专用 Gate,入站公共 MCP Server 也不会暴露下单和撤单接口。

10.1 受控执行链 ​

真实交易治理链

图 7:Order Intent 必须经过授权、Mandate、Halt、Order Gate 和 Advisory;拒绝、异常和执行路径都落到 Audit Ledger。

这条链上的关键概念包括:

  • Connector Profile:选择券商、账户模式和连接方式,读取账户与下单能力分离。
  • Mandate:用户确认的硬性授权范围,包括资产类别、品种、额度和有效期。
  • Order Gate:每个订单都要重新检查 Mandate、价格、名义金额、持仓和市场约束。
  • Halt / Kill Switch:支持全局或单 Broker 熔断,停止 Runner 和后续订单。
  • Advisory:下单前的可插拔审查,汇总 Allow、Warn 或 Deny。
  • Audit Ledger:记录意图、Gate 决策、Broker 请求响应、结果和错误。
  • Reconcile / Liveness:运行时对账、心跳和陈旧 Runner 回收。

10.2 默认拒绝,而不是默认尝试 ​

交易治理中有几个值得复用的安全原则:

  1. 不认识的写工具按高风险处理,而不是当成只读;
  2. 缺少 Mandate、价格或账户状态时 Fail Closed;
  3. 工具策略可以按组织禁用或要求 HITL 审批;
  4. 审批绑定内部写 Tool 的参数签名,批准后只消费一次,不能拿一次授权反复执行不同参数;
  5. 入站公共 MCP Server 对外只暴露研究或只读能力,明确不暴露下单和撤单;Broker 侧出站 MCP Client 则仍位于本地 Gate 之后;
  6. Shell、OAuth、Broker 写操作都需要显式运维或用户动作。

这套设计说明,Agent 的自由度应与动作可逆性成反比:研究检索可以自动化,真实资金操作必须有硬边界。

十一、商业化与 Web 工作台 ​

11.1 商业化能力 ​

src/commercial 和对应 API 已实现一套单组织工作区 MVP:

  • 邮箱密码注册、登录、Cookie Session 和 API Key;
  • Organization 与 Owner、Admin、Member、Viewer 四级 RBAC;
  • 模型 Provider 的新增、编辑、测试、启用、默认和删除;
  • Knowledge Base 的 ACL;
  • Tool Policy、风险等级和审批;
  • Audit Log、模型调用用量和用户反馈;
  • Runtime Job 管理。

模型层通过统一 Provider 能力适配 SiliconFlow、OpenAI Compatible、OpenRouter、DeepSeek、Qwen / DashScope、Ollama、OpenAI Codex OAuth 等后端。适配层会处理不同模型对空消息、工具调用、Reasoning Content、Temperature 和流式格式的差异。

11.2 前端不是聊天框外加几个页面 ​

React 19 + TypeScript + Vite 构建了覆盖核心流程的工作台,主要页面包括:

  • Home:平台概览;
  • Agent:会话、模型选择、执行模式、Knowledge 范围、Goal、Swarm 和 Connector;
  • Runtime:队列、任务、过滤、取消与重试;
  • Reports / Run Detail:指标、图表、交易账本、产物、日志与代码;
  • Compare / Correlation:运行对比和资产相关性;
  • Alpha Zoo:浏览、详情、Bench 和比较;
  • Knowledge:知识库列表与文档详情;
  • Admin:用户、模型、Agent、Knowledge、Runtime、Audit 和 Usage 治理;
  • Settings:个人 API、数据源和消息通道。

前端通过 Zustand 管理 Agent 状态,通过 SSE 接收增量事件。普通消息、思考过程、工具调用、Swarm 任务和实盘治理事件使用不同组件呈现,避免把高风险操作混进普通聊天气泡。

十二、部署与运行形态 ​

本地开发可以直接启动 FastAPI 与 Vite。生产 Compose 则包含:

服务作用
apiFastAPI、Web 静态资源、会话和业务接口
worker消费持久任务,执行 Agent / RAG 等后台工作
postgresPostgreSQL 16 + pgvector Schema
redis任务队列与 AOF 持久化

Run、Session、用户目录和 Upload 使用独立 Volume。运行任务有两种 Backend:

  • sqlite-local:单机开发与轻量使用;
  • redis-postgres:生产队列契约,由 Worker 消费 Envelope 并更新任务状态。

仓库还提供密钥轮换、加密迁移、备份恢复和截图回归文档。API 对非回环地址部署要求鉴权,并包含 Host、Origin、CORS、Docker Loopback 和关闭接口授权等检查。

十三、这个系统最有特点的设计 ​

13.1 大模型负责决策,确定性系统负责计算 ​

模型擅长理解意图、选择方法和解释结果,不擅长稳定执行数值计算和交易账本。项目让 Agent 生成计划和信号,把行情、回测、因子、优化、检索和订单限制交给确定性代码。

13.2 方法论、执行器和证据三者分开 ​

  • Skill 是方法论;
  • Tool 是执行器;
  • Artifact / Trace / Citation 是证据。

很多 Agent 只有前两者,最后只剩一段无法复核的回答。Hyper-Trading-Agent 把证据层作为一等对象。

13.3 用元数据驱动治理 ​

只读、可重复、风险级别、审批要求和工具白名单都不是散落在 Prompt 里的口头约束,而是运行时可执行的元数据。Prompt 可以被模型误解,代码 Gate 才是安全边界。

13.4 多 Agent 的重点是依赖图,不是角色扮演 ​

Swarm 用 DAG 表达并行与依赖,用独立目录保存 Worker 产物,再由下游消费摘要。它更接近小型工作流引擎,而不是多个模型互相聊天。

13.5 金融研究必须把反证写进流程 ​

随机基线、Look-ahead 检测、样本外、Monte Carlo、Beta 回归、风险披露和上游失败阻断,都在减少“模型替漂亮结果找理由”的空间。

十四、当前边界与架构债务 ​

一个可信的项目介绍不能只写已完成功能。根据代码、README 和 TODO,当前还应注意以下边界。

14.1 数据存储仍处于混合阶段 ​

PostgreSQL + pgvector、Redis 队列和 Worker 已经进入部署架构,但商业数据、知识 Chunk、Embedding、Session、Run 和部分任务状态仍大量依赖 SQLite 或文件目录。生产仓库对等迁移、Alembic 和对象存储生命周期尚未完成。

14.2 组织隔离还没有覆盖所有产物 ​

商业 API 和 Knowledge 已有 RBAC / ACL,但 Session、Run、Report、Upload 和生成 Artifact 尚待全部绑定 organization_id,跨组织仓储级隔离测试也在 TODO 中。这是从单机工具走向真正多租户 SaaS 的关键工作。

14.3 Plan-Execute 仍可继续深化 ​

当前模式解决了步骤呈现;状态持久化、暂停和恢复则由通用 Session / Attempt 基础设施提供。它还可以演进为真正的动态 Planner:由模型生成结构化步骤、明确输入输出和依赖,再由 Executor 逐步执行与重规划。

14.4 任务执行路径还需要继续收敛 ​

Redis 持久队列和 Agent / RAG Worker 路径已经存在,但 README 仍提示部分 Web Crawl、长回测和其他长 Executor 尚未完全统一到 Worker。后续需要让“所有耗时任务”共享一致的幂等、取消、重试、心跳和恢复语义。

14.5 企业安全能力仍在补齐 ​

生产 SSO、TLS 反向代理、Rate Limit、完整 CSRF 防护、Secret Manager、Quota 和更深的可观测性尚未完成。交易安全代码较细,但平台级零信任和运营能力仍有建设空间。

14.6 功能宽度带来维护成本 ​

项目同时覆盖数据、量化、Agent、Web、MCP、IM、RAG 和 Broker。自动发现和分层缓解了耦合,但测试矩阵、第三方 API 变化、Provider 兼容和数据口径仍会形成较高维护成本。继续开发时应优先统一契约,而不是继续横向增加相似能力。

十五、我从这个项目中积累的架构经验 ​

15.1 先设计失败路径,再设计理想路径 ​

成熟 Agent 的代码量很大一部分不在“调用成功”,而在超时、断流、Provider 拒绝、工具不可用、上游失败、页面重连、进程死亡和半完成写入。Agent 系统的可靠性取决于这些路径是否有明确状态。

15.2 用文件和事件构建可调试性 ​

每个 Run 独立目录、JSONL Trace、SSE Event、Task 文件和 Artifact 哈希,让问题可以离线复盘。比起把所有状态藏在内存里的复杂框架,这种朴素结构很适合早中期产品。

15.3 审批必须绑定具体动作 ​

“同意 Agent 操作账户”过于宽泛。更合理的是给标准化参数计算签名,只批准这一次 Tool Call,并在执行后消费授权。这一模式也适用于发邮件、发布内容、删除资源和修改生产配置。

15.4 Skill 应承载易变知识,代码承载硬约束 ​

研究步骤、模板和解释口径适合放 Skill;路径安全、金额上限、权限和下单 Gate 必须写在代码中。前者需要快速迭代,后者需要测试、审计和 Fail Closed。

15.5 多 Agent 只有在任务可拆分时才有意义 ​

并不是问题越复杂就越应该增加 Agent。只有当任务存在可并行的独立证据、明确依赖或相互审查关系时,DAG Swarm 才能带来收益,否则只会增加 Token、延迟和错误面。

15.6 领域 Agent 的壁垒不在聊天界面 ​

真正形成差异的是:

  • 数据源和失败回退;
  • 领域计算的正确性;
  • 可复现产物;
  • 专业输出规范;
  • 风险和权限边界;
  • 持续积累的 Skill 与评测集。

聊天界面只是这些能力的入口。

十六、核心代码阅读路线 ​

如果准备继续深入源码,建议按以下顺序阅读:

  1. agent/src/agent/context.py:模型到底收到了哪些上下文;
  2. agent/src/agent/loop.py:ReAct、工具批处理、超时、压缩和 Trace;
  3. agent/src/agent/tools.py 与 agent/src/tools/__init__.py:工具契约和注册;
  4. agent/src/session/service.py:会话、Attempt、审批和 AgentLoop 如何衔接;
  5. agent/src/swarm/runtime.py 与 task_store.py:DAG 调度与失败传播;
  6. agent/backtest/runner.py:模型生成策略怎样进入确定性回测;
  7. agent/backtest/loaders/registry.py:多市场数据回退;
  8. agent/src/commercial/store.py:RBAC、RAG、Audit 和 Usage;
  9. agent/src/live/sdk_order_gate.py 与 enforcement.py:真实交易硬边界;
  10. agent/api_server.py 与 agent/src/api/:各能力如何暴露给 Web;
  11. frontend/src/pages/Agent.tsx:前端如何把执行与治理事件组织为工作台;
  12. agent/tests/:从测试反推系统承诺和高风险边界。

总结 ​

Hyper-Trading-Agent 的价值并不只是功能多,而是它逐渐形成了一套完整的 Agent 工程观:

用模型理解任务,用 Skill 约束方法,用 Tool 完成确定性执行,用 DAG 组织多人协作,用 Artifact 和 Citation 保存证据,用 Policy、Approval、Mandate 与 Audit 管住风险。

它已经是一套功能覆盖很广的金融研究 Agent 平台,同时仍处于从本地优先架构向多租户、分布式生产架构迁移的阶段。对个人知识积累而言,这个项目最值得学习的不是某个模型或某条 Prompt,而是如何把一个“不确定的大模型”放进一套可观测、可恢复、可审计、默认拒绝高风险动作的确定性系统中。

参考材料 ​

  • 仓库 README.md、CHANGELOG.md、TODO.md
  • docs/financial-research-agent-primer.zh-CN.md
  • AGENT_CONTRIBUTOR_GUIDE.md
  • pyproject.toml 与 docker-compose.prod.yml
  • agent/src/agent/、agent/src/session/、agent/src/swarm/
  • agent/backtest/、agent/src/factors/、agent/src/live/
  • agent/src/commercial/、agent/src/knowledge/、agent/src/reliability/
  • frontend/src/router.tsx 与主要页面实现
本站访客数 人次 本站总访问量 次