arbitrage-engine/docs/AI_HANDBOOK.md

9.4 KiB
Raw Blame History

AI 使用手册Arbitrage Engine

面向 Codex / OpenClaw / 其他 AI 助手。
目标:让 AI 在本项目中 安全、可预期、可回溯 地修改代码,而不是“乱改一通”。

本项目的唯一权威系统说明是:docs/arbitrage-engine-full-spec.md
本手册描述AI 进入项目时的阅读顺序、允许/禁止修改的范围,以及每次改动必须遵守的流程。


1. 进入项目前必须阅读的内容

在对本项目做任何非文档类修改之前AI 必须先做下面几件事:

  1. 打开并理解 docs/arbitrage-engine-full-spec.md 中至少以下章节:
    • 项目概述、技术栈
    • 数据库结构(尤其是 strategies / signal_indicators / paper_trades
    • 信号引擎signal_engine逻辑
    • paper trading 行为与 PnL 计算
  2. 浏览以下后端文件的结构(无需逐行记住):
    • backend/main.pyFastAPI 路由与业务分层)
    • backend/signal_engine.py(信号引擎与策略工厂)
    • backend/paper_monitor.py(模拟盘平仓逻辑)
  3. 浏览前端入口结构:
    • frontend/app/ 下的页面目录(尤其是 /strategy-plaza / /signals / /paper

如发现文档与代码实际行为有冲突,应优先相信 full-spec,并在必要时向人类维护者报告。


2. 修改范围:可以动什么 / 不可以动什么

为减少细节 bug 和隐性破坏,本项目对 AI 的修改范围划分为三类:

  • 允许自由修改:只要本地检查通过即可。
  • 允许修改,但需要特别小心:需要有清晰计划 + 局部验证。
  • 禁止修改,除非任务明确要求且更新了 full-spec

下面按类型具体说明。

2.1 允许自由修改的内容(默认安全区)

这些改动一般不会破坏系统核心语义,可以在合理前提下自由进行:

  1. 文档与注释
    • 新增或修改 Markdown 文档(除非明确标为“权威规范”,如 full-spec
    • 在代码中添加/改进注释,不改变实际逻辑。
  2. 测试代码
    • 新增/改进单元测试、集成测试、前端测试。
    • 修复由于实现变化导致的测试用例不匹配(前提是确认测试的预期确实已变化)。
  3. 前端 UI 层展示
    • 不改变 API 调用与数据结构的前提下:
      • 布局调整、视觉优化、文案修改。
      • 新增只读型组件(图表、表格、标签等)。
  4. 纯新增的本地脚本与工具
    • 放在 scripts/ 或明确的工具目录里,用于开发、调试、分析(不接入生产 PM2 流程)。
  5. 无行为变更的小型重构
    • 拆分过长函数、提取私有辅助函数。
    • 增加类型标注、引入更严格的 linters在配置合理的前提下

2.2 可以修改但需要特别小心的内容(受控区)

这类改动一旦出错,会引入细节 bug 或统计偏差,但不至于破坏整个系统结构。修改前必须:

  1. 在回答中给出明确的改动计划(改哪些文件、改变哪些行为)。
  2. 改完后尽量做局部验证(至少跑相关命令 / 人工检查相关页面)。

受控区包括:

  1. 现有 API 的实现细节
    • 位于 backend/main.py 中的 /api/* 路由实现。
    • 允许:
      • 优化 SQL 查询;
      • 修复明显的边界条件 bug
      • 增加非破坏性字段(向响应 json 增加可选字段)。
    • 不允许:
      • 静默改变已有字段的含义(例如把 score 从 0100 改成 01
      • 在无任务说明的前提下移除现有字段。
  2. 前端与现有 API 的交互逻辑
    • 包括 frontend/app/* 中对 /api/* 的调用与数据展示逻辑。
    • 修改前需确认:
      • 请求路径、查询参数、响应结构与 full-spec 和实际后端实现一致。
  3. 信号引擎的非核心逻辑
    • backend/signal_engine.py 中:
      • 日志输出格式;
      • 错误处理与异常保护;
      • 非打分核心的辅助逻辑(例如冷启动保护、调试输出等)。
    • 修改“评分公式”“门控条件”的逻辑时,属于 禁止区(见 2.3)。
  4. paper trading 的展示与统计层
    • 后端统计接口(如 /api/paper/stats/api/paper/stats-by-strategy)的实现细节;
    • 前端 /paper 以及策略广场中与统计展示相关的逻辑。
    • 改动时需确认:
      • 不改变 pnl_r / status 的语义;
      • 汇总方式与 full-spec 中定义的规则保持一致。

2.3 禁止修改的内容(红线区)

以下内容 默认禁止 AI 修改
只有在任务说明/人类明确要求的情况下,才可以动,并且必须同步更新 arbitrage-engine-full-spec.md 中对应章节。

  1. 数据库结构与关键字段语义
    • 表结构(尤其是):
      • strategies
      • signal_indicators
      • paper_trades
      • agg_trades
      • liquidations
      • market_indicators
    • 禁止:
      • 修改已有字段的含义;
      • 删除字段;
      • 改名字段;
      • 在没有文档更新的前提下添加字段。
    • 如确需变更,必须:
      • 在任务文档中有清晰需求;
      • 编写迁移 SQL 并在 full-spec 中更新结构说明。
  2. 核心业务指标的定义与计算方式
    • 包括但不限于:
      • pnl_r 的计算规则;
      • status 枚举值含义(tp / sl / sl_be / timeout / signal_flip 等);
      • 胜率、盈亏比、权益曲线的汇总算法;
      • 信号评分各层direction/environment/auxiliary/momentum的含义与权重机制。
    • 如果任务要求调整这些规则,必须:
      • 明确标注新旧行为差异;
      • 说明对历史数据/统计的影响;
      • 更新 full-spec 中对应章节。
  3. 信号引擎核心打分/开仓/平仓逻辑
    • evaluate_factory_strategyV5.4 策略工厂核心)中的核心决策逻辑,包括:
      • 门控系统5 个 Gate的通过/否决条件;
      • 各层得分的具体计算公式;
      • entry_score / flip_threshold 等核心阈值的语义;
      • 开仓价/SL/TP 的确定方式;
      • paper_open_trade / paper_monitor 中判定触发 TP1/TP2/SL/timeout 的条件。
    • 除非任务明确指出“需要调整策略模型/打分方式”,否则 AI 不应主动更改这些部分。
  4. 策略 ID / 名称约定与历史数据映射
    • strategies.strategy_idUUIDpaper_trades.strategy_idsignal_indicators.strategy_id 的关联关系;
    • strategy 字段中已有的命名约定(例如 custom_ 前缀)。
    • 禁止:
      • 修改已有策略的 strategy_id
      • 静默重命名已有策略的 strategy 文本值;
      • 移除 custom_ 策略路由或相关兼容逻辑。
  5. 认证与安全配置
    • auth.py 中的认证逻辑和权限控制;
    • JWT Secret、数据库连接信息、PM2 配置等运维层配置。
    • AI 不应在代码中硬编码新的敏感信息,也不应修改现有的密钥配置。

3. 每次修改必须遵守的流程AI 视角)

无论修改的是允许区还是受控区AI 在本项目中的工作流程应遵循:

  1. 确认任务范围
    • 从用户指令或任务文档中提取:
      • 要实现/修复的目标;
      • 涉及的页面/API/模块。
  2. 查阅相关文档
    • 总是先查 docs/arbitrage-engine-full-spec.md
    • 如涉及信号引擎/策略工厂/模拟盘,需额外查阅对应的 GUIDE 文档(如果存在)。
  3. 列出改动计划
    • 在回答中简要列出:
      • 计划修改的文件;
      • 每个文件预期的改动类型bugfix/重构/新增功能)。
  4. 实施改动(保持最小必要范围)
    • 避免“一次改太多文件”;
    • 避免引入与任务无关的重构。
  5. 本地验证
    • 尽量运行至少以下检查之一(视任务而定):
      • 后端:相关单测 / 手工调用关键 API
      • 前端:npm run build 或启动本地开发服务器检查关键页面;
      • 如无法真实运行,至少从代码结构和文档上做自洽性检查。
  6. 更新文档(如必要)
    • 若改动影响 full-spec 中描述的行为/结构,必须同步更新 full-spec
    • 若改动属于策略/信号模型的重大变更,应在决策记录中添加条目(例如 DECISIONS.md)。

4. 冲突处理原则

当出现以下冲突时AI 应遵循:

  1. 代码 vs full-spec
    • 如果代码实现与 full-spec 的描述不一致:
      • 默认以 full-spec 为“期望行为”;
      • 优先考虑修代码使其符合 full-spec
      • 如判断 full-spec 已过时,应在回答中明确提出,并建议人类确认后更新文档。
  2. 用户即时指令 vs 文档约束
    • 如果用户指令要求做的事情与本手册“禁止修改”部分冲突:
      • AI 必须在回答中提醒用户这是“红线操作”;
      • 只有在用户明确确认且任务需求足够清晰时,才执行,并同步修改 full-spec。

5. 总结

本手册的核心目的只有一个:

让本项目在 AI 长期参与维护的前提下,仍然保持:

  • 核心业务逻辑不被轻易破坏;
  • 历史数据和统计口径具有可比性;
  • 每一次变更都有据可查、可解释。

如果本手册与 arbitrage-engine-full-spec.md 或实际代码行为存在不一致,应优先保持三者的一致性,并在必要时征求人类维护者的确认。