在 LLM 应用从对话机器人走向自主行动系统的进程中,金融交易场景提供了一个独特的压力测试场:决策结果可直接量化、信息具有强时效性、容错成本极高。HKUDS 团队开源的 AI-Trader 项目,以「100% 自动化、纯代理原生」为设计目标,构建了一套由外层日级回测循环与内层代理决策环路组成双层流水线。本文聚焦这一流水线的架构设计与工程实现,为构建类似自主决策系统提供可复用的参数与模式。
一、整体架构:双层流水的职责分离
AI-Trader 的架构遵循一个清晰的分层原则:外层负责时间推进与数据准备,内层负责推理与交易决策。两层的关注点截然不同,这种职责分离是系统可维护性与可扩展性的基础。
外层日级回测循环(Daily Trading Loop)承担 orchestration 角色。它从配置文件读取起止日期,根据市场日历过滤出有效的交易日期,然后逐日迭代。每一天,它负责准备当日的市场数据上下文、更新代理签名,以及处理异常重试。如果某一天的交易会话失败,系统可以单独重试该日而无需重启整个回测流程。这种 fault-tolerant 设计对于长周期回测(如五年美股数据)至关重要。
内层代理决策环路(Agent Decision Loop)是真正的智能所在。每个交易日中,一个基于 LangChain 的 LLM 代理接收当日的市场上下文,执行多步推理与工具调用,最终输出买入、卖出或持有决策。这个环路是真正的自主决策单元 —— 它接收信息、调用工具、评估结果、做出行动,与传统基于规则的条件判断引擎有本质区别。
两层之间通过消息传递与状态文件解耦。外层将当日开盘价、昨收价、持仓状态写入系统提示模板;内层在此基础上进行深度分析与决策;内层完成后将交易结果写回 position.jsonl,外层读取后继续下一日。这种单向依赖关系使得两层可以独立演进 —— 可以更换内层的 LLM 模型而不影响外层的回测编排逻辑,反之亦然。
二、内层代理决策环路:六步执行模型
代理决策环路是 AI-Trader 最核心的工程模块,其执行流程可分解为六个明确步骤,每一步都有可配置的参数与明确的边界条件。
第一步:系统提示构建
系统提示是代理理解市场状态的唯一入口,其质量直接决定决策质量。提示构建模块从三个来源聚合数据:从 position.jsonl 读取当前持仓(反映前一日操作后的组合状态);从价格工具模块获取所有标的的昨收价与今开价;从配置读取当前日期与目标市场类型。这些信息被注入到一个模板中,模板定义了代理的角色定位(交易分析师)、决策约束(如 T+1 规则)以及结束信号标记。
市场特定提示工程是此步的亮点。项目维护了三套独立的提示模板:美股模板(支持 NASDAQ-100 全量标的、无 T+1 限制)、A 股模板(适用 SSE-50,包含 T+1 交割与涨跌幅限制规则)、加密货币模板(7×24 小时交易、支持分数股买卖)。这种差异化设计反映了一个关键认知:同一个 LLM 在不同市场中需要不同的决策约束知识,通用提示无法有效处理市场特异性规则。
第二步:LangChain 代理初始化
此步创建当天交易会话的 LangChain 代理实例。关键实现点在于 MCP 工具绑定:代理通过 MultiServerMCPClient 连接到多个 MCP 工具服务器,这些服务器提供价格查询、新闻情绪检索、数学运算、以及模拟买卖执行等功能。LLM 模型连接跨日复用,仅代理实例本身每日重建,这避免了重复建立模型连接的 overhead。
特殊处理存在于 DeepSeek 模型适配。DeepSeek 的工具调用参数格式与标准 OpenAI API 存在差异,项目实现了一个自定义 ChatOpenAI 封装层来桥接这一差异。这意味着底层 LLM 模型可以灵活切换(GPT-4、Claude、本地模型),而不影响上层代理逻辑。
第三步:初始查询注入
以一句固定的用户消息触发代理推理:「Please analyze and update today's positions」。这条消息与所有后续对话被记录到当日的 JSONL 日志文件中。日志文件是回测结果审计与错误追溯的核心依据 —— 每一轮工具调用的输入输出都被完整保留。
第四步:工具调用循环
这是决策环路的主体。代理进入多步推理循环,每一步中可能调用一个或多个 MCP 工具。工具类型包括:价格查询工具(实时获取指定标的的开盘价、收盘价、成交量)、新闻检索工具(搜索相关标的的最新资讯与情绪分析)、数学运算工具(计算收益率、夏普比率、回撤等指标)、交易执行工具(模拟买入或卖出操作)。
循环的控制参数需要重点关注。最大步数默认设置为 30,这是防止无限循环的安全阀 —— 实际交易中代理通常在 5-10 步内完成决策,过长的推理链往往意味着陷入了无意义的循环。LLM API 调用失败时采用指数退避重试策略,最多重试 3 次,每次等待时间翻倍(1s→2s→4s),这对处理 API 限流非常重要。LangChain 的递归限制设置为 100,这是一个保守值,确保即使在复杂推理场景下也不会触发 LangChain 的深度限制。
第五步:结束信号检测
代理在认为当日分析与交易完成后,会在响应文本中输出预定义的结束信号标记。环路持续监控代理的每一次响应,当检测到此标记时立即终止工具调用循环。此外,如果达到最大步数限制而未检测到结束信号,循环也会强制退出并记录该日为异常会话。
第六步:交易结果记录
环路结束后,系统检查当天是否实际发生了交易操作。交易执行工具在操作成功后设置 IF_TRADE 运行时标志;如果此标志为真,则记录该日为 traded session;如果为假,则向 position.jsonl 追加一条空交易记录,将前一交易日的持仓状态顺延到当前日期。position.jsonl 的每一行代表一天的组合状态,这种设计使得完整的持仓历史可以被后续分析工具直接读取。
文件并发安全由文件锁机制保障。在并行化回测场景下(多个日期同时运行不同代理实例),多个进程可能同时写入 position.jsonl,文件锁防止了数据竞争导致的状态损坏。
三、外层日级回测循环:编排与时间演进
日级回测循环是整个系统的调度层,它将内层代理决策环路包装在一个完整的时间序列框架中。这一层的核心职责是管理时间演进,而非决策本身。
循环首先调用 get_trading_dates 函数生成有效交易日期列表。这个函数根据市场类型过滤日期 —— 美股跳过周末与节假日、A 股额外处理调休交易日、加密货币理论上无休但通常仍按日粒度处理。日期列表是严格有序的,确保回测结果的时间连续性。
循环的伪代码逻辑如下:遍历日期列表,设置当前日期与代理签名,调用 run_trading_session 执行内层环路,如果捕获到异常则触发 retry_session 重试该日,最后记录当日结果。这一逻辑看似简单,但它是确保回测「逐日无泄漏」的关键 —— 每一日的决策仅基于该日及之前的信息,绝不会因为系统实现疏漏而引入未来数据。
配置驱动是此层的重要特性。日期范围、目标市场、初始资金、佣金费率等参数全部由配置文件或环境变量指定,而非硬编码。这种设计使得同一套代码可以复用于不同的回测场景:一套参数跑美股五年回测,改动配置后立即可以跑 A 股三个月仿真。
四、MCP 工具链:能力扩展的接口设计
Model Context Protocol(MCP)在 AI-Trader 中扮演了关键角色:它是 LLM 代理与外部能力之间的桥梁。MCP 的设计目标是标准化 AI 模型与工具之间的交互,而 AI-Trader 恰好提供了一个金融交易场景的最佳实践。
项目中实现的 MCP 工具服务器包括:价格数据服务器(对接 Alpha Vantage、AKShare、yfinance 等多数据源)、新闻情绪服务器(提供相关标的的舆情检索能力)、数学计算服务器(提供收益率、夏普比率、最大回撤等绩效指标计算)、交易执行服务器(模拟市价单成交,扣除手续费,计算成交后组合状态)。
这种工具分离设计带来了极好的可扩展性。如果需要添加新的数据源(如财新 API 或彭博终端),只需实现一个新的 MCP 工具服务器并在配置中注册,代理无需修改即可自动获得新工具的调用能力。MCP 的标准接口确保了工具实现的语言无关性 —— 可以用 Python 实现价格工具,用 Node.js 实现情绪分析工具,代理端无需感知底层实现细节。
五、关键参数与阈值配置
基于上述架构分析,以下是构建或复现此类系统时需要重点配置的参数及其推荐值。
代理推理参数方面,最大步数建议设置为 30,这是安全与深度的平衡点 —— 对于大多数日级决策场景,5-10 步足够完成完整分析。对于需要更复杂多步推理的场景(如宏观事件驱动的策略),可考虑提升至 50,但需同步监控代理输出的理智性。LLM API 重试次数建议设为 3 次,重试间隔采用指数退避(base=1s, factor=2)。
数据与回测参数方面,起止日期范围应覆盖至少一个完整市场周期(建议 3-5 年),以验证策略在不同市场状态下的适应性。回测频率设定为日级,这是该系统的原生粒度 —— 日内高频交易不在当前架构的设计范围内。
市场特异性参数方面,美股市场需配置允许做空、无限仓、T+0;A 股市场需开启涨跌幅限制(默认 10%,科创板 20%)与 T+1 交割约束;加密货币市场需开启 7×24 交易、允许分数股买卖、设置 USDT 作为本位货币。
并发控制参数方面,并行回测日期数建议不超过 4(受限于 position.jsonl 的文件锁竞争),日志级别建议设为 verbose 以保留完整推理轨迹用于事后分析。
六、架构启示与演进方向
AI-Trader 的双层流水线架构揭示了一个重要的设计模式:复杂自主决策系统需要将「时间编排」与「推理决策」显式分离。外层循环处理时间演进、数据准备、异常恢复;内层环路专注于信息处理与行动决策。这种分离使得两层可以独立优化 —— 可以改进外层的并行调度策略而不触及内层决策逻辑,反之亦然。
从 MCP 工具链的设计可以看出,工具化是扩展 LLM 代理能力的推荐路径而非硬编码工具调用。标准化接口(MCP)使得新增能力时无需修改核心逻辑,这与微服务架构中「关注点分离」的原则一脉相承。
当前架构仍有明确的演进空间。多代理协同是近期最值得关注的方向 —— 当前单代理模式限制了策略多样性与风控能力,未来可引入研究代理(负责信息收集)、策略代理(负责决策生成)、风控代理(负责规则校验)等角色,形成更复杂但更安全的决策流水线。实时交易扩展是另一个方向,当前系统基于回测数据运行,要进入实盘需要解决行情延迟、订单路由、滑点建模等工程问题。
资料来源
- HKUDS/AI-Trader GitHub 仓库:https://github.com/HKUDS/AI-Trader
- Leeroopedia HKUDS AI Trader Agent Decision Loop 工作流:https://leeroopedia.com/index.php/Workflow:HKUDS_AI_Trader_Agent_Decision_Loop
内容声明:本文无广告投放、无付费植入。
如有事实性问题,欢迎发送勘误至 i@hotdrydog.com。