Hyper-Trading-Agent 项目解析:一个可审计金融投研 Agent 系统的设计与实现
更新: 1970/1/1 字数: 0 字 时长: 0 分钟
项目名称:Hyper-Trading-Agent / Hyper Trading Agent
仓库地址:970thunder/Hyper-Trading-Agent
分析快照:2026-07-14,Commit7bd6e94,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 仅作为自然语言表达,不代表另一个独立系统。
这篇文章主要回答四个问题:
- 这个系统已经实现了哪些功能?
- 单 Agent 和多 Agent 分别怎样运行?
- 金融数据、回测、RAG 和交易安全如何接入 Agent?
- 哪些设计值得复用,哪些部分仍处于工程化过程中?
本文只讨论软件架构和研究工作流,不构成任何投资建议。
一、项目全貌
1.1 从功能数量看系统规模
以下数据来自 Commit 7bd6e94 对应工作区的仓库扫描。Skill 和工具按目录/文件统计,测试按 test_*.py 统计;它们会随项目继续开发而变化,但可以帮助我们建立量级概念。
| 维度 | 2026-07-14 快照 | 说明 |
|---|---|---|
| 内置 Skill 目录 | 79 | 数据源、策略、技术分析、风险、报告等场景知识 |
| 本地工具模块 | 47 | 按 *_tool.py 统计,不等同于最终注册工具数 |
| Swarm 团队预设 | 29 | 每个预设是一张 Agent 与任务依赖图 |
| Alpha 因子 | 456 | Alpha101、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 功能地图
图 1:项目能力可以分成入口、Agent Runtime、金融研究能力、治理能力和产物沉淀五个区域。
| 模块 | 主要功能 | 解决的问题 |
|---|---|---|
| Agent Runtime | ReAct 工具循环、流式输出、上下文压缩、取消和重试 | 让模型能够持续执行真实任务,而不只是生成文本 |
| Tool / Skill | 工具自动注册、按需加载方法论、MCP 扩展 | 分离“知道怎样做”和“真正执行” |
| Session / Goal | 会话、Attempt、计划状态、长期研究目标、证据账本 | 让任务可以追踪、暂停、恢复和跨轮次推进 |
| Market Data | 多市场识别、多数据源路由和自动回退 | 降低单一行情源失败对研究的影响 |
| Backtest | 多市场引擎、策略代码校验、指标、交易与权益产物 | 把自然语言假设变成可复现的历史检验 |
| Alpha Zoo | 因子浏览、批量评测、比较和安全检查 | 提供可计算的研究素材,避免模型凭记忆编造公式 |
| Swarm | YAML 团队预设、DAG 调度、并行 Worker 和汇总 | 将复杂研究拆给不同角色并保留独立产物 |
| Knowledge / RAG | 文件与 URL 入库、分片、关键词/向量/混合检索、引用 | 将组织私有知识接入 Agent |
| Trading Governance | 连接器、Mandate、Order Gate、Halt、Audit | 将研究能力与真实交易风险隔离 |
| Commercial | 登录、组织、RBAC、模型管理、工具策略、审计和用量 | 支撑多人和商业化部署 |
| Frontend | Agent、Runtime、Reports、Run Detail、Admin 等工作区 | 把执行过程、风险状态和研究产物显式呈现 |
二、总体架构
Hyper-Trading-Agent 采用的是“多入口、单能力核心、分层治理”的结构。Web、CLI、MCP 和消息渠道并不各自实现一套研究逻辑,而是复用 Agent、工具、数据、回测与持久化模块。
图 2:多入口统一进入会话与 Agent 核心,金融能力经工具注册表调用,真实交易和企业能力由治理层单独拦截。
图中鉴权和 Policy 按受保护工作区请求的硬 Gate 表达;本地 CLI、回环兼容模式以及 /health 等公开端点有各自的例外规则。两条 Runtime Job 存储边表示可选 Backend,不是一次任务同时写入两套后端。
从代码目录也能看出这种分层:
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 |
| Message | Session 中的一条用户、助手或系统消息 | src/session |
| Attempt | 一条用户消息触发的一次可暂停、恢复或审批的执行尝试 | src/session |
| Runtime Job | 耗时 Attempt 或入库任务的队列/状态记录,由本地执行器或 Durable Worker 消费 | src/runtime_jobs |
| Agent Run | AgentLoop 一次执行对应的目录、状态、Trace 与 Artifact | agent/runs |
| Backtest Run | Agent 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 Step | Attempt 面向产品界面的阶段状态,不等同于 Swarm Task | src/session |
通常是一条 Message 创建一个 Attempt;Attempt 可以在进程内运行,也可以被包装成 Runtime Job;执行过程中再产生 Agent Run、Backtest Run 或 Swarm Run。
三、单 Agent 的运行机制
3.1 ContextBuilder:先决定模型能看到什么
Agent 的能力上限不只由模型决定,还取决于上下文是否准确。src/agent/context.py 中的 ContextBuilder 会组装:
- 金融研究角色和专业输出要求;
- 当前已注册工具的名称、说明和参数 Schema;
- 所有 Skill 的一句话摘要;
- 当前运行目录和工具调用计数;
- 与当前问题相关的持久记忆;
- 会话历史和当前用户消息;
- 活跃 Research Goal 的目标、检查项和预算。
这里有一个关键的上下文工程设计:系统提示词只放 Skill 摘要,不把 79 份完整文档全部塞进去。模型判断场景后,先调用 load_skill,再把对应方法、模板和约束加载到上下文。这是一种 Progressive Disclosure(渐进式披露)机制。
它带来三个好处:
- 降低初始 Prompt 的 Token 成本;
- 减少不同场景规则互相干扰;
- Skill 可以独立更新,也允许用户 Skill 覆盖同名内置 Skill。
3.2 AgentLoop:模型与工具之间的 ReAct 循环
src/agent/loop.py 是系统的核心。一次运行大致经历以下过程:
图 3:一次 Agent 运行不是单次模型调用,而是上下文构建、模型流式输出、工具校验执行、证据落盘和事件返回的循环。
这个循环并不是简单的 while + function calling。代码里处理了不少真实系统才会遇到的问题:
- 流式故障重试:中途断流时,对可重试错误进行一次重连,并避免重复展示旧增量。
- 内容过滤熔断:Provider 连续拦截响应时终止循环,避免耗尽全部迭代预算。
- 最后一轮强制文本:达到迭代上限时不再提供工具定义,促使模型给出结果而不是继续调用工具。
- 合作式取消:在迭代边界、流式 Chunk 和工具批次之间检查取消标记;已经开始的写工具不会被强制杀死,因此取消不是对所有阶段都立即生效。
- 重复调用抑制:不可重复工具成功后,再次调用会被阻止并复用已有结果。
- 输出压缩:超长答案保存完整文件,界面只展示摘要和完整产物路径。
- Trace 脱敏:工具参数、结果和 Provider 错误在写轨迹前清理密钥及内部路径。
3.3 只读并行,写操作串行
Agent 一次可能返回多个 Tool Call。项目根据工具元数据将它们分成两类:
- 连续的只读工具使用线程池并行执行,最多 8 个线程;
- 写工具按顺序串行执行。
对超时的处理也不同:只读工具超时后可以返回有界错误并丢弃迟到结果;写工具不能粗暴杀死,因为它可能已经写入了一半,所以系统只发出超时警告并等待完成。
这是一个很实用的通用原则:
并发策略不应只看性能,还要看副作用能否回滚。
3.4 多层上下文压缩
长任务很容易撑满模型上下文。AgentLoop 使用分层压缩:
- Microcompact:在压力出现后清理较旧的工具结果;
- Context collapse:折叠长文本,不额外调用模型;
- Auto compact:让模型生成结构化摘要,同时保留最近约 20K Token 的消息尾部;
- Manual compact:模型可主动调用
compact,指定需要保留的主题。
压缩前会保存完整 Transcript,并修复可能被截断的 Tool Call / Tool Result 配对。摘要不是一次性覆盖,而是在上一次摘要上继续更新,以减少多轮压缩造成的信息衰减。
四、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 优先于内置版本,形成一个简单的自我改进闭环:
完成任务
-> 识别可复用流程
-> 保存或修订 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:自然语言假设会被拆到数据路由、策略契约、固定回测引擎、指标归因和报告产物,而不是让模型临时发明整套回测系统。
- 加载策略生成 Skill;
- 写入
config.json; - 生成
code/signal_engine.py; - 对配置和 Python 代码做预检;
- 由固定 Runner 选择数据源和市场引擎;
- 输出指标、权益曲线、交易记录、验证结果和日志;
- Agent 再读取产物进行归因和风险分析。
内置引擎覆盖 A 股、中国期货、全球股票、全球期货、数字资产、外汇、期权组合和跨市场组合。组合优化器包括风险平价、均值方差、最大分散化和等波动等方法。
这种结构把“创造策略”和“执行账本”分开。模型可以写信号,但不能随意改变撮合、数据校验和指标口径,因此结果更容易复现。
5.3 回测后的分层归因
系统 Prompt 规定,回测完成后不能只报总收益、夏普和最大回撤,还要根据策略状态和数据可用性继续执行:
- 交易级归因:赢家、输家、退出原因和持有期;
- Beta 回归:策略对市场基准的暴露;
- 市场状态分析:牛市、熊市、高波动和震荡期;
- Monte Carlo 排列检验:判断结果是否可能来自随机交易顺序。
同时要求每个结论引用具体数据,不能补造缺失指标,并必须披露主要风险。这说明项目不仅在实现“工具调用”,也在代码 Prompt 中固化研究质量门槛。
六、Alpha Zoo:把因子研究做成基础设施
项目当前内置 456 个 Alpha。CHANGELOG 0.1.8 发布时记录为 452 个,之后 Academic 组继续扩充;这里采用 2026-07-14 源码快照口径:
| 因子族 | 数量 | 定位 |
|---|---|---|
| Qlib158 | 154 | Microsoft Qlib 常用价量特征 |
| Alpha101 | 101 | 公式化价量 Alpha |
| GTJA191 | 191 | 面向 A 股语境的短周期因子 |
| Academic | 10 | Fama-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:
图 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 三种“记忆”不要混为一谈
| 类型 | 保存内容 | 生命周期 |
|---|---|---|
| WorkspaceMemory | Run 目录、工具计数等轻量状态 | 单次 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。一次入库任务会经历:
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 默认拒绝,而不是默认尝试
交易治理中有几个值得复用的安全原则:
- 不认识的写工具按高风险处理,而不是当成只读;
- 缺少 Mandate、价格或账户状态时 Fail Closed;
- 工具策略可以按组织禁用或要求 HITL 审批;
- 审批绑定内部写 Tool 的参数签名,批准后只消费一次,不能拿一次授权反复执行不同参数;
- 入站公共 MCP Server 对外只暴露研究或只读能力,明确不暴露下单和撤单;Broker 侧出站 MCP Client 则仍位于本地 Gate 之后;
- 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 则包含:
| 服务 | 作用 |
|---|---|
api | FastAPI、Web 静态资源、会话和业务接口 |
worker | 消费持久任务,执行 Agent / RAG 等后台工作 |
postgres | PostgreSQL 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 与评测集。
聊天界面只是这些能力的入口。
十六、核心代码阅读路线
如果准备继续深入源码,建议按以下顺序阅读:
agent/src/agent/context.py:模型到底收到了哪些上下文;agent/src/agent/loop.py:ReAct、工具批处理、超时、压缩和 Trace;agent/src/agent/tools.py与agent/src/tools/__init__.py:工具契约和注册;agent/src/session/service.py:会话、Attempt、审批和 AgentLoop 如何衔接;agent/src/swarm/runtime.py与task_store.py:DAG 调度与失败传播;agent/backtest/runner.py:模型生成策略怎样进入确定性回测;agent/backtest/loaders/registry.py:多市场数据回退;agent/src/commercial/store.py:RBAC、RAG、Audit 和 Usage;agent/src/live/sdk_order_gate.py与enforcement.py:真实交易硬边界;agent/api_server.py与agent/src/api/:各能力如何暴露给 Web;frontend/src/pages/Agent.tsx:前端如何把执行与治理事件组织为工作台;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.mdAGENT_CONTRIBUTOR_GUIDE.mdpyproject.toml与docker-compose.prod.ymlagent/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与主要页面实现