From d7184ce7c1ffa29e3081cd7bde320191c489e4c0 Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Sat, 23 May 2026 22:57:59 +0800 Subject: [PATCH] Update Chinese monthly review docs --- README.zh-CN.md | 25 +++++++++++++------ tests/test_monthly_publish_workflow_config.py | 12 +++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/README.zh-CN.md b/README.zh-CN.md index 1baaf21..fb2c4b4 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -380,7 +380,9 @@ make monthly-review-briefing ## 自动化 AI 月度审阅 -月报 bundle 组装完成后,workflow 会自动创建一个 GitHub Issue,内容为完整的 `ai_review_input.md`。另一个独立的 workflow(`ai_review.yml`)监听带有 `monthly-review` 标签的 Issue,触发 Claude Code Action(Anthropic API,Sonnet 模型)进行分析。 +月报 bundle 组装完成后,workflow 会自动创建一个 GitHub Issue,内容为完整的 `ai_review_input.md`。默认自动审阅路径会 dispatch `QuantStrategyLab/CryptoCodexAuditBridge`,由 self-hosted VPS runner 上已登录的 Codex CLI 读取月报 Issue、回帖审计结果,并在发现安全、低风险的问题时直接创建修复 PR。 + +旧的 API 双 AI 审阅仍保留为兼容性 fallback。只有在设置 `LEGACY_AI_REVIEW_ENABLED=true`,并同时配置 `ANTHROPIC_API_KEY` 与 `OPENAI_API_KEY` 时,月度 workflow 才会在 Codex bridge dispatch 失败后调用 `ai_review.yml`。如果 Codex dispatch 失败且 legacy API fallback 未启用或缺少凭据,monthly publish workflow 会直接失败,而不是静默跳过审阅。 AI 审阅覆盖范围: @@ -388,27 +390,34 @@ AI 审阅覆盖范围: - **异常检测**:标记意外的 warning、过时的产物、验证失败或可疑的排名分数 - **下游影响**:分析对 BinancePlatform(下游执行引擎)的影响,包括池子变动和降级风险 - **操作员待办事项**:汇总 checklist 并补充 AI 识别出的跟进事项 -- **代码改进**:如果发现具体、低风险的改进,Claude 可能会自动提 PR(不会自动合并) +- **代码改进**:Codex 可以为低风险的 reporting、validation、workflow、test 或 documentation 问题直接创建聚焦 PR;涉及 selector、threshold、universe 或交易行为的变更仍需人工决策 + +审阅结果会回帖到月度 Issue。legacy API workflow 在启用时仍会渲染中英文输出。 -所有分析结果同时以英文和中文输出。 +### 可选 Legacy API Fallback Secrets -### 需要配置的 GitHub Secret +- `ANTHROPIC_API_KEY`:Claude Code Action 使用的 Anthropic API key +- `OPENAI_API_KEY`:二次月度审阅使用的 OpenAI API key -- `ANTHROPIC_API_KEY`:Anthropic API 密钥 +默认生产配置不需要这些 API secrets,因为默认使用 `CryptoCodexAuditBridge`。只有需要启用 legacy 双 AI fallback 时才配置它们。 -配置方式: +配置方式示例: ```bash +gh variable set LEGACY_AI_REVIEW_ENABLED --body true gh secret set ANTHROPIC_API_KEY --body "sk-ant-..." +gh secret set OPENAI_API_KEY --body "sk-..." ``` +legacy AI review workflow 运行在 `ubuntu-latest`(不需要 self-hosted runner),每月运行一次费用约 $0.01-0.05。它保留用于开源兼容和应急 fallback,不是当前默认生产路径。 + ### Monthly Publish 的 GitHub 配置 `monthly_publish.yml` 现在这样读取配置: - `GCP_SERVICE_ACCOUNT_KEY` 继续放在 GitHub secret -- `GCP_PROJECT_ID`、`GCS_BUCKET` 优先从 GitHub variable 读取 -- 如果这两个旧值还在 secret 里,也会继续兼容 +- `GCP_PROJECT_ID`、`GCS_BUCKET` 等非密发布目标必须从 GitHub variable 读取 +- workflow 不再从 `secrets.GCP_PROJECT_ID` 或 `secrets.GCS_BUCKET` 读取旧 fallback 推荐配置: diff --git a/tests/test_monthly_publish_workflow_config.py b/tests/test_monthly_publish_workflow_config.py index 2d24540..bdd5328 100644 --- a/tests/test_monthly_publish_workflow_config.py +++ b/tests/test_monthly_publish_workflow_config.py @@ -7,6 +7,7 @@ PROJECT_ROOT = Path(__file__).resolve().parents[1] WORKFLOW_PATH = PROJECT_ROOT / ".github" / "workflows" / "monthly_publish.yml" AI_REVIEW_WORKFLOW_PATH = PROJECT_ROOT / ".github" / "workflows" / "ai_review.yml" +README_ZH_PATH = PROJECT_ROOT / "README.zh-CN.md" class MonthlyPublishWorkflowConfigTests(unittest.TestCase): @@ -84,6 +85,17 @@ def test_ai_review_workflow_supports_dispatch_and_comment_posting(self) -> None: self.assertNotIn("allowed_tools:", workflow) self.assertNotIn("custom_instructions:", workflow) + def test_chinese_readme_matches_current_monthly_review_defaults(self) -> None: + readme = README_ZH_PATH.read_text(encoding="utf-8") + + self.assertIn("CryptoCodexAuditBridge", readme) + self.assertIn("LEGACY_AI_REVIEW_ENABLED=true", readme) + self.assertIn("OPENAI_API_KEY", readme) + self.assertIn("不需要这些 API secrets", readme) + self.assertIn("必须从 GitHub variable 读取", readme) + self.assertNotIn("只配置 `ANTHROPIC_API_KEY`", readme) + self.assertNotIn("如果这两个旧值还在 secret 里,也会继续兼容", readme) + if __name__ == "__main__": unittest.main()