PA Agent 架构深潜:两阶段 Orchestrator 流水线与 JSON 校验自动重试机制完全解析
【免费下载链接】PA_Agent项目地址: https://gitcode.com/gh_mirrors/pa/PA_Agent
PA Agent 是一个面向主观交易者的AI K线分析辅助工具,它的核心是一套两阶段 Orchestrator 流水线:阶段一做市场诊断,阶段二做交易决策,中间由JSON 校验 + 自动重试机制兜底,保证大模型输出的每一分结论都能被程序可靠地解析、校验和落盘。这篇文章带你从源码视角看懂这条流水线的完整运转逻辑。
一、PA Agent 是做什么的?
PA Agent 从MT5 / TradingView / yfinance / AkShare等数据源读取真实 K 线(不是截图识图),把结构化 K 线数据与预计算特征送入大模型,完成"市场诊断 → 策略路由 → 交易决策"的两阶段分析。它不连接券商、不执行下单,只做决策辅助。
上图:PA Agent 所对接的交易数据源界面,K 线数据是整条分析流水线的起点。
二、两阶段 Orchestrator 流水线:9 步全貌
整条管道由 two_stage.py 中的TwoStageOrchestrator类编排,submit()方法按固定步骤执行:
| 步骤 | 动作 | 说明 |
|---|---|---|
| 1 | 构建部分记录 | 先建好含元信息的AnalysisRecord骨架,任何时刻终止都能落盘 |
| 2 | 取消检查 | 每阶段前、每次 API 调用后都检查CancelToken |
| 3 | 预检数据闸门 | K 线数据不足时直接返回insufficient_data |
| 4-5 | 阶段一 | 组装诊断 Prompt → 调用大模型 |
| 6 | 校验阶段一 JSON | 失败则触发自动重试(见下文) |
| 7 | 策略路由 | 根据阶段一的detected_patterns标签,挑选要加载的策略文件 |
| 8 | 经验库检索 | 按周期位置/方向/形态加载历史经验条目 |
| 9 | 阶段二 | 组装决策 Prompt → 调用大模型 → 校验 → 落盘完整记录 |
两个设计亮点值得新手注意:
- 闸门短路:若阶段一输出
gate_result = wait / unknown,程序会跳过阶段二的模型调用,直接由 decision_tree.py 短路生成"等待"结果——省 Token,也更符合交易纪律。 - 全链路落盘:无论成功、校验失败、用户取消还是网络错误,pending_writer.py 都会把 Prompt、原始响应、Token 用量完整写入记录,方便复盘。
策略路由:标签驱动的文件加载
阶段一的detected_patterns字段是英文标签(如wedge、mtr、h1),pattern_routing.py 路径下 pa_agent/ai/pattern_routing.py 中的判定表决定阶段二加载哪些策略文件,例如识别到楔形就加载 文件14-楔形形态分析交易.txt、识别到 MTR 就叠加 文件25-主要趋势反转MTR.txt。这套"标签 → 文件"映射让提示词工程模块 prompt_engineering/ 中 20 多个策略文档按需注入,而不是全量塞给模型。
三、JSON 校验器:5 类错误的精准分类
大模型输出不可信,这是所有 LLM 应用的通病。json_validator.py 将每次校验结果归入 5 个类别,这个分类直接决定了后续是否重试:
| 类别 | 含义 | 是否可重试 |
|---|---|---|
a | JSON 语法错误 | ✅ 最多 3 次 |
b | 缺少必填字段 | ✅ 最多 3 次 |
c | 字段值/一致性违规(枚举错误、类型不符) | ⚠️ 仅格式类子集,最多 1 次 |
d | 正文为空或纯文字(没有 JSON 结构) | ✅ 最多 3 次 |
e | 服务商错误(配额/计费耗尽) | ❌ 0 次 |
校验器还很"抗造":会自动剥离```json围栏、把中文弯引号还原成直引号、提取文本中第一个顶层{...}对象、修复字符串内的裸换行,甚至能从"思考区"(reasoning_content)里捞回模型忘写进正文的 JSON。
四、自动重试机制:带"防作弊"的反馈循环
这是整套架构中最精巧的部分,核心在 validation_retry.py 的validate_with_retry():
1. 校验失败 → 生成结构化反馈。retry_feedback.py 会把错误打包成一条中文 user 消息追加到对话里,明确列出:
- 失败类型(如"缺少必填字段")
- 必须修正的字段清单(最多 6 项)
- 禁止为通过校验而修改的字段(如
direction、order_type) - 阶段一还附带程序计算的 K 线几何表,防止模型编造 bar_type
2. 重新调用 API,循环直到通过或耗尽次数。重试次数由 settings.py 中的ValidationSettings控制:retry_enabled(总开关,默认开)、retry_max=3(格式类错误)、retry_max_semantic=1(语义类错误)、retry_stage2(阶段二独立开关)。
3. 防作弊检测(detect_cheat)。这是防止"模型为了过校验而篡改结论"的关键防线:retry_policy.py 定义了不可变字段——阶段一的direction、cycle_position等。若重试后这些字段变了值、且没有增量更新的合法依据(如incremental_delta.changed_fields声明),程序会判定为"作弊",直接以cheat:错误拒绝整条结果。换句话说:格式可以改,观点不能改。
五、决策输出:从 JSON 到决策树
阶段二校验通过后,最终 JSON 会包含订单类型(限价/突破/市价/不下单)、交易者方程、下一根 K 线预测等内容。程序端还配套了决策树可视化——赛博科幻风格的交互式流程图,自动播放"闸门 → 策略路径"的动画演示:
上图:PA Agent 的二元决策树演示图,展示从"无法决定/等待"到趋势延续、区间交易、突破等策略路径的完整分支。
另外,网络层也有自己的重试:_stream_chat_resilient()在遇到连接超时/重置时,会按模型配置自动切换到备用网关(WorkBuddy / TRAE Work CN / Cursor / QClaw)再试一次,让"网络抖动"不至于毁掉一次分析。
六、如何验证这套机制?
项目自带了完善的测试矩阵,可以边读源码边跑:
- test_two_stage_happy_path.py:两阶段完整成功路径
- test_two_stage_stage1_syntax.py:阶段一语法错误触发重试
- test_validation_retry.py:重试策略与防作弊逻辑单测
- test_gate_shortcircuit.py:闸门短路行为
写在最后
PA Agent 的架构给所有 LLM 应用开发者上了三堂课:先建骨架再填充(部分记录随时可落盘)、错误分类驱动重试策略(5 类错误差异化处理)、程序权威优先(不可变字段防篡改)。如果你想进一步了解界面操作,可阅读 PA_Agent使用文档.md。
免责声明:本工具仅供学习与研究,不构成投资建议。交易有风险,决策后果自负。
【免费下载链接】PA_Agent项目地址: https://gitcode.com/gh_mirrors/pa/PA_Agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考