LLM 交易运维手册¶
适用版本:axon-llm v0.2.0+ 读者:运维 / SRE / on-call 工程师 前置阅读:overview.md risk-safety.md metrics-alerting.md
本文档提供 LLM 交易系统的部署、升级、故障排查、回滚的完整 runbook。所有命令假定 cargo workspace 根目录。
axon-llm 是 lib,无独立 server 进程。本文档假设应用方用 Rust(或经 PyO3 调用的 Python)实现 bin/llm-trading-agent 主程序,本 runbook 只覆盖 axon-llm 相关部分,主程序细节由各团队自定。
1. 部署¶
1.1 系统要求¶
- Rust:1.96.0+(
rust-toolchain.toml强制) - Python:3.14.6(默认,pyenv 管理;仅 Python 绑定需要)
- CPU:至少 4 cores
- 内存:开发 4GB / 生产 8GB+
- 网络:对接交易所需允许出站 HTTPS(443) + WSS(9443)
1.2 部署步骤¶
# 1. 拉取最新代码
git clone https://github.com/pengwow/axon_quant.git /opt/axon_quant
cd /opt/axon_quant
# 2. 选择 release tag
git checkout v0.2.0 # 或 main / develop
# 3. Release 构建(LTO,1 codegen-unit)
cargo build --workspace --release
# 4. (可选)安装 Python 绑定
make python-install
# 5. 启动应用(由各团队自定,这里只是示例)
RUST_LOG=info /opt/axon_quant/target/release/llm-trading-agent \
--config /etc/axon_quant/config.toml
1.3 配置示例(/etc/axon_quant/config.toml)¶
[trading]
backend = "exchange" # mock | exchange | oms | backtest
api_key = "${AXON_API_KEY}" # 从环境变量读取
api_secret = "${AXON_API_SECRET}"
testnet = true # 测试网
[safety]
mode = "TwoPhase" # DryRun | TwoPhase | Direct
[risk]
max_order_notional = 50000.0
max_daily_orders = 100
max_position_abs = 10.0
allowed_symbols = ["BTC-USDT", "ETH-USDT"]
[gate]
type = "RejectionCircuitBreaker"
threshold = 5
cooldown_ms = 60000
[metrics]
# 应用方注册到自己的监控后端
callback = "prometheus:http://localhost:9100/metrics"
2. 升级¶
2.1 滚动升级步骤¶
axon-llm 是 lib,升级影响的是 target/release/llm-trading-agent。标准滚动升级:
# 1. 拉取新代码
cd /opt/axon_quant
git fetch --tags
git checkout v0.2.0 # 假设的新版本
# 2. 编译新二进制(不中断旧服务)
cargo build --workspace --release
# 3. 健康检查新二进制
./target/release/llm-trading-agent --version
./target/release/llm-trading-agent --self-check
# 4. 逐实例替换(systemd / k8s / supervisor)
systemctl restart llm-trading-agent.service
# 或
kubectl rollout restart deployment/llm-trading-agent
# 5. 观察新实例的 metrics / 日志
journalctl -u llm-trading-agent -f
# 或
kubectl logs -f deployment/llm-trading-agent
2.2 数据库 / 状态兼容¶
axon-llm 无服务端持久化状态(所有状态在进程内 / 在 backend 中),升级前注意:
RiskLimits::DailyCounter:进程内,重启归零。如果应用方需要持久化,需在外部存储镜像(Redis / DB)RejectionCircuitBreaker:进程内,重启重置TradingMetrics:进程内,重启清零TwoPhase::PendingOrder:进程内,重启 token 失效(影响见 风控与安全 §1.2)
重要:无状态升级是安全的,无需特殊迁移脚本。
2.3 Breaking Change 检查¶
升级前必须阅读 CHANGELOG 的 BREAKING CHANGES 段,典型破坏性变更:
TradingBackendtrait 新增必选方法(虽然设计上都是默认实现 + 尽量保持向后兼容)RiskLimits新增必填字段Tooltrait 签名变更
应用方适配流程:在 staging 环境先跑 E2E 测试套件 cargo test -p axon-llm --test llm_trading_*_e2e,通过后再升级生产。
3. 故障排查¶
3.1 LLM agent 下单全部失败¶
症状:trading_risk_rejections_total 持续增长,trading_orders_total{status="success"} = 0。
排查步骤:
-
检查 SafetyMode:
如果是 DryRun / TwoPhase,确认 SafetyMode 配置正确。 -
检查 RiskLimits:
看到"order notional X exceeds limit Y"等消息,说明 LLM 决策超出风控规则。 行动:调宽max_order_notional/max_daily_orders/max_position_abs,或约束 LLM prompt。 -
检查 RiskGate:
看到"circuit breaker open",说明连续拒绝次数达阈值,闸门开。 行动:等待 cooldown(默认 60s),或手动调gate.reset()(应用方实现)。 -
检查后端:
看到网络错误 / 拒绝 / 超时,继续 §3.2。
3.2 后端调用失败¶
症状:trading_backend_errors_total 持续增长。
排查步骤:
- 确认后端类型:
exchange:检查交易所 API status(https://www.binance.com/en/support/announcement)oms:检查 axon-oms 服务状态 / 端口backtest:无网络问题,检查MarketData数据完整性-
mock:无网络问题,检查 mock state -
Exchange 后端:
-
OMS 后端:
-
Backtest 后端:
- 检查
MarketData是否有有效数据 - 检查时间范围是否覆盖策略需要的区间
3.3 性能下降¶
症状:trading_tool_execute_duration_seconds P99 > 1s。
排查步骤:
- 确认是 LLM 调用慢还是后端调用慢:
- 拆解:
trading_tool_execute_duration_seconds包含 LLM 决策时间 + 风控 + 后端 -
在应用方代码中加额外的 histogram:
llm_decision_duration_seconds、risk_check_duration_seconds、backend_call_duration_seconds -
后端慢:
- Exchange:检查交易所 API 延迟
- OMS:检查 OMS 服务健康
-
Backtest:检查
L1MatchingEngine撮合性能(cargo bench -p axon-backtest) -
风控开销:
- 单纯
RiskLimits::check耗时 < 1μs,不应成为瓶颈 RejectionCircuitBreaker耗时 < 100ns,不应成为瓶颈
3.4 进程崩溃¶
症状:llm-trading-agent 进程退出,systemd / k8s 持续重启。
排查步骤:
-
查看 panic 信息:
-
常见 panic 原因:
unwrap()在MockTradingBackend未初始化的字段上:检查setup()是否调用tokio::Runtime嵌套:检查block_on是否在已运行 runtime 的线程中调用-
序列化错误:检查
serde_json反序列化参数 -
core dump:
4. 回滚¶
4.1 快速回滚¶
cd /opt/axon_quant
# 1. 切回旧 tag
git checkout v0.2.0
# 2. 重新编译
cargo build --workspace --release
# 3. 重启服务
systemctl restart llm-trading-agent
# 4. 观察旧版本 metrics
journalctl -u llm-trading-agent -f
4.2 灰度回滚(k8s)¶
# 回滚到上一个 deployment 版本
kubectl rollout undo deployment/llm-trading-agent
# 暂停回滚(如果回滚后仍有问题)
kubectl rollout pause deployment/llm-trading-agent
5. 日常运维清单¶
5.1 每日¶
- 检查
trading_orders_total趋势是否正常 - 检查
trading_risk_rejections_total是否突增 - 检查
trading_backend_errors_total是否突增 - 检查
trading_daily_orders_count是否接近max_daily_orders - 检查 LLM agent 日志是否有异常(panic / unwrap / 超时)
5.2 每周¶
- 审查本周 LLM 决策样本(从
RiskLimits拒绝样本中抽样) - 检查 axon-llm 是否有新版本发布(CHANGELOG)
- 检查交易所 API 是否有 breaking change 公告
- 检查
RejectionCircuitBreaker触发频率,评估是否需要调阈值
5.3 每月¶
- 跑回归测试套件
cargo test --workspace - 跑 LLM 集成 E2E 测试
cargo test -p axon-llm --test llm_trading_*_e2e - 检查 axon-llm release notes,规划升级
- 复盘本月 PnL,评估 RiskLimits 阈值是否合理
6. 紧急联系¶
| 角色 | 联系方式 |
|---|---|
| axon-llm 维护者 | (GitHub Issues / 团队 Slack) |
| 交易所对接 | (各交易所官方支持) |
| OMS 维护者 | (内部团队) |
| LLM provider 故障 | OpenAI / Anthropic / 其他官方 status page |