RedFlag
用 Claude AI 自动识别代码变更中的高风险区域,输出风险推理和测试计划,深度集成 GitHub CI / Jira / Slack
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 Claude AI 自动识别代码变更中的高风险区域,输出风险推理和测试计划,深度集成 GitHub CI / Jira / Slack
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

RedFlag -- 用 AI 为代码变更点亮高危信号灯
2024年初,某金融科技公司的工程师在发布前做了一次例行代码合并——只改了3行参数。本以为是小事,却在生产环境引发了一场持续6小时的事故回滚。事后复盘,问题的根源并非代码本身有语法错误,而是这3行改动涉及一个被多个服务共享的认证模块,一处细微的权限判断逻辑变化,导致数千用户的会话在不知情的情况下被异常终止。
这并非孤例。在软件工程的日常中,代码变更范围与潜在风险之间的错位,是每一个工程团队都必须面对的难题。Git diff 能告诉你改了哪些行,却无法告诉你这些行为什么危险。传统安全审计依赖人工 Review,在高速迭代的团队中往往沦为瓶颈。
正是为了解决这一痛点,Addepar 安全工程团队开发了 RedFlag -- 一个用 AI 自动识别代码变更中高风险区域的工具。它不是替代 Code Review,而是给 Code Review 装上风险雷达。
RedFlag 由金融科技公司 Addepar 的安全工程团队开发和开源。Addepar 管理着超过5万亿美元的资产数据,对代码安全性的要求极为严苛。随着工程团队规模扩大,手动安全审查已经无法跟上代码提交的速度。团队需要一种方式,在不大幅增加人工负担的前提下,系统性地识别每次代码变更中的潜在风险。
在此背景下诞生的 RedFlag,最初服务于 Addepar 内部的 Release Candidate 安全测试,随后扩展到 CI 流水线场景,并在 2024 年正式开源。
RedFlag 支持三种主要运行模式,适用于不同的工程场景:
批量模式是 RedFlag 最核心的能力。它接收两个代码引用(如 commit hash、branch name 或 tag),自动分析这两个引用之间的所有代码变更,并通过 AI 判断每处变更的风险等级和推荐测试计划。
典型使用场景是对 Release Candidate(发布候选版本) 进行全面安全评估。工程团队可以指定两个版本 tag(如 v0.138.6 --> v0.139.3),RedFlag 会逐一分析每个 commit 的变更内容,输出包含风险推理和测试计划的 JSON 报告,并生成一份直观的 HTML 可视化报告。

图1:RedFlag 批量模式工作流 -- 从代码范围设定到 AI 风险分析的完整流程
批量模式还支持通过配置文件的 filter_commits 字段,按提交者的用户名或提交信息中的关键词过滤目标 commit 集合,实现精细化的分析范围控制。
CI 模式专为 Pull Request 自动化审查 设计。RedFlag 以 GitHub Action 的形式集成到代码仓库的 CI 流水线中,在每次 PR 创建或更新时自动触发。
CI 模式的核心能力包括:
评估模式用于 AI 模型效果评估。工程团队可以准备自己的标注数据集(包含已知风险的代码变更和预期评估结果),运行 RedFlag 分析这些样本,比较 AI 的判断与人工标注之间的差异,从而了解特定 AI 模型在自己的代码库上的实际表现。
这一功能对于需要在不同 AI 模型之间做选型对比、或需要持续监控模型质量变化的团队尤为重�。
RedFlag 的技术选型体现了清晰的设计思路 -- 用成熟可靠的工具构建专一功能:
| 组件 | 技术选型 | 作用 |
|---|---|---|
| AI 模型 | AWS Bedrock + Claude 3 Sonnet | 核心推理引擎 |
| AI 框架 | LangChain(langchain-core / langchain-community) | Prompt 管理、输出解析 |
| 代码解析 | PyGithub(GitHub API) + GitPython | 获取 PR/commit 信息、文件 diff |
| 提示词解析 | Pydantic + OutputFixingParser | 结构化输出校验与自动修复 |
| 报告生成 | Jinja2 模板引擎 | HTML/JSON 报告渲染 |
| CLI 框架 | Click | 命令行参数解析 |
| 通知集成 | Atlassian Python API(Jira) + Slack SDK | 告警工单和消息推送 |
| 云服务 | Boto3(AWS Bedrock) | AWS 认证和模型调用 |
RedFlag 的核心逻辑在 redflag.py 中实现,大致分为以下阶段:
1. 代码范围获取:通过 PyGithub 获取指定 commit 范围之间的所有 PR 和 commit 信息,结合正则过滤配置筛选目标。
2. 文件差异提取:对每个 commit,利用 GitHub API 获取其涉及的所有文件变更,组装为 AI 的上下文输入。
3. AI 双 Prompt 分析:RedFlag 发送两个独立的 LLM 调用 -- Review Prompt 判断风险类型和推理;Test Plan Prompt 推荐测试步骤。
4. 结构化输出解析:通过 LangChain 的 PydanticOutputParser 解析 AI 返回的 JSON,使用 OutputFixingParser 处理解析失败时的自动重试(默认最多重试5次)。
5. 报告聚合:通过 Jinja2 模板生成 HTML 报告和 JSON 报告。
RedFlag 实现了四层配置优先级:CLI 参数 > 环境变量 > 配置文件 > 默认值。特别值得注意的是,敏感信息强烈建议通过环境变量注入,而非硬编码在配置文件中,避免凭证泄露风险。
RedFlag 以 Python 包形式发布(pip install addepar-redflag),支持 Python 3.11+。必要前提包括:
repo 权限RedFlag 的核心价值在于上下文感知能力 -- 它不仅能识别单行的安全缺陷,更能理解一处变更在整个系统中的语义影响。与传统 SAST 工具(如 Semgrep)相比,RedFlag 依赖 LLM 的泛化能力,误报率取决于模型质量,但覆盖范围更广。
1. AI 幻觉与误判风险:LLM 可能对代码变更产生不准确的风险判断,建议将 RedFlag 作为辅助工具而非唯一依据。
2. AWS Bedrock 依赖:不支持非 AWS 的 AI 模型(GPT-4、Vertex AI 等),对已有其他 AI 基础设施的团队有额外成本。
3. 代码上下文局限性:上下文窗口有限,超大规模变更(数十个文件、数百个 commit)分析可能不够深入。
4. 隐私风险:将代码变更发送到第三方 AI API 可能引发数据合规问题,敏感代码库需自行评估。
5. 无本地模型支持:目前没有 Ollama 或其他本地 LLM 的集成方案,数据隔离要求严格的环境中使用受限。
RedFlag 的开源代表了 AI 在代码安全领域从概念演示到工程落地的重要转变。LLM 在安全领域的垂直应用、开发者体验优先、金融科技的安全工程实践是三个关键趋势。

图2:RedFlag HTML 报告示例 -- 清晰展示每个 Commit 的风险推理和测试计划
RedFlag 是一个将 AI 推理能力深度融入软件开发生命周期的安全工具,通过自动化的风险识别和测试计划生成,帮助工程团队快速定位高风险代码变更区域。
核心优势:上下文感知的 AI 风险分析 + 灵活的 CI/批量双模式 + Jira/Slack 深度集成 主要限制:依赖 AWS Bedrock、无 Web UI、存在 AI 幻觉风险 适用场景:追求 AI 辅助安全 Review 的团队,特别是金融、医疗、企业服务等对代码安全有合规要求的领域。