
1. 项目概述一个真正能落地的开源代码审查 CLI 工具“open-code-review”这个名字乍一听像某个 GitHub 上刚起步的玩具项目但如果你在团队里干过三年以上后端开发或者带过两个以上跨地域协作的前端小组你大概率会立刻坐直身体——不是因为名字多酷而是因为它直击了现代软件工程里最顽固、最消耗人却始终没人认真解决的痛点代码审查这件事正在从“质量守门员”退化成“流程打卡器”。我自己就踩过太多坑PR 提交后等三天没人看最后靠 Slack 三个人才凑齐两个 Approve新人写的 SQL 没加索引提示老同事扫一眼就点了 Approve上线后数据库 CPU 突增 80%还有更隐蔽的——Review 评论写得特别客气“这里可以考虑优化”但实际是严重内存泄漏风险对方根本没意识到问题等级。这些都不是技术问题是协作熵增。而 open-code-review 的核心价值恰恰在于它不试图替代人而是把人从低效、重复、易出错的审查动作中解放出来让 Reviewer 真正聚焦在“这个逻辑是否合理”“这个边界条件是否覆盖”“这个架构演进方向是否可持续”这类高价值判断上。它不是一个 LLM 堆砌的玩具而是一个以 Git 为输入源、以 CLI 为执行界面、以可审计的规则引擎为骨架、以大模型为增强能力的生产级审查协作者。关键词里的 “CLI” 不是噱头是它拒绝 Web UI 的根本立场——审查必须嵌入开发者当前工作流而不是切窗口、开浏览器、登录账号“LLM” 不是万能膏药而是被严格约束在 diff 分析、模式识别、上下文补全三个确定性场景内“Git” 是它的唯一数据源和触发器所有分析都基于git diff和git log的原始语义不依赖任何中心化仓库 API 或私有 token“code review” 这个词在这里被重新定义不是“找 bug”而是“识别风险信号 提供可操作建议 记录决策依据”。它适合三类人一是技术负责人需要快速掌握团队整体代码健康度避免“救火式管理”二是资深工程师想把多年 Code Review 经验沉淀为可复用、可共享、可迭代的检查能力三是刚转正的中级开发者需要一个不带情绪、不讲人情、但逻辑清晰的“虚拟 Senior”随时指出自己忽略的细节。它不承诺 100% 找出所有 Bug但它能确保每个 PR 至少被扫描过 7 类常见反模式如硬编码密钥、未处理异常分支、N1 查询、危险的eval调用、不安全的反序列化、日志敏感信息泄露、测试覆盖率骤降且每条反馈都附带精准行号、上下文快照、风险等级Critical/High/Medium/Low和一条可直接复制粘贴的修复建议。这才是“open”的真意——开放的是规则、开放的是反馈逻辑、开放的是改进路径而不是把黑盒模型当神龛供着。2. 整体设计思路与技术选型逻辑2.1 为什么必须是 CLI为什么拒绝 Web UI 和 IDE 插件很多人第一反应是“做个 VS Code 插件不更方便” 或者 “搞个 Dashboard 看统计多直观” 这恰恰是 open-code-review 设计上最坚决的取舍。我做过 4 个不同规模项目的工具链搭建结论很明确审查动作的黄金时间点永远是git commit之后、git push之前或者git pull获取新变更后的 30 秒内。这个窗口期开发者注意力最集中、上下文最完整、修改动机最清晰。一旦错过就得切换心智模型——从“我刚改了什么”切换到“我要看别人改了什么”效率断崖式下跌。CLI 的不可替代性体现在三个硬性约束上零环境依赖它不依赖 Node.js 运行时、不依赖 Python 环境、不依赖 Java JRE。编译后的二进制文件Linux/macOS/Windows直接运行连curl都不用装。我们曾在一个金融客户现场部署他们的开发机禁止安装任何非白名单软件连pip都被禁用但open-code-review依然能通过 USB 拷贝后直接运行。Web UI 需要起服务、配反向代理、开端口IDE 插件需要用户手动安装、更新、调试兼容性——这些都在制造“使用门槛”而门槛越高工具越容易被束之高阁。Git 原生集成它不是“调用 Git API”而是深度解析git show --format%B -s HEAD提交信息、git diff HEAD~1 HEAD变更内容、git blame -L line,line file责任归属。这意味着它能拿到 Git 内部最原始的结构化数据比如diff输出中的 -123,5 145,8 行号偏移比任何基于文件读取的方案都精准。我们实测过当一个文件被重命名修改时Web 工具常因缓存或 API 延迟导致行号错位而 CLI 直接消费 Git 的 patch 流毫秒级同步。审计与合规刚性要求金融、医疗、政企客户最怕什么不是工具不好用而是“不知道它偷偷传了什么”。CLI 模式下所有数据处理都在本地完成。LLM 的调用如果启用只发生在--llm标志显式开启时且请求 payload 可通过--debug标志完整打印所有敏感字段如文件路径、函数名默认脱敏。而 Web UI 必然涉及前端 JS 执行、网络请求、服务端日志审计链条长、风险点分散。去年我们帮一家银行做合规评估他们最终选择 CLI 方案就是因为能提供完整的strace系统调用日志证明“无外网连接、无磁盘写入、无进程注入”。2.2 LLM 的角色定位增强器而非决策者热搜词里大量出现 “LLM”、“prompt injection”、“密钥泄露”这说明社区对大模型在代码审查中的滥用已有深刻反思。open-code-review 对 LLM 的使用遵循一条铁律LLM 永远不生成最终结论只提供辅助证据。它的 LLM 模块默认接入 OpenAI、Claude 或本地 Ollama 模型只承担三件事上下文补全当 diff 片段太短如只改了一行return true;LLM 会根据文件路径、函数名、相邻代码块推测该修改可能影响的业务场景例如“此修改位于支付回调处理器可能影响订单状态同步”。这不是猜测逻辑而是基于命名和结构的语义关联。模式模糊匹配正则表达式能识别process.env.API_KEY但识别不了const key config.get(auth.key)。LLM 在此处的作用是将 diff 片段与已知的 200 种密钥加载模式库进行相似度打分返回 Top 3 匹配项及置信度。最终是否告警仍由规则引擎基于置信度阈值默认 0.85和人工配置的白名单决定。自然语言建议生成当规则引擎判定存在 N1 查询风险时LLM 会基于该 SQL 语句和 ORM 框架自动检测 Sequelize/Prisma/Django ORM生成一条具体建议“建议将User.findAll({ include: [Post] })改为User.findAll()后用Post.findAll({ where: { userId: users.map(u u.id) } })批量查询”。这条建议不是凭空生成而是从 12 个主流框架的最佳实践文档中检索、比对、模板化填充的结果。我们刻意避开了 LLM 最诱人的能力——“直接解释 Bug 原因”。因为实践中发现LLM 的解释常带有幻觉hallucination比如把if (x null)误判为“空指针风险”而实际 x 是 string 类型。open-code-review 的解决方案是所有 LLM 输出必须附带“证据锚点”即引用具体的代码行、变量名、调用栈。如果 LLM 说“此处存在竞态条件”它必须指出sharedCounter这一行并关联到concurrent.futures.ThreadPoolExecutor的上下文。没有锚点的输出直接丢弃。2.3 Git 作为唯一可信数据源的设计哲学标题里没有写 “GitHub” 或 “GitLab”只有 “Git”这是刻意为之。很多所谓“Code Review 工具”本质是 Git托管平台的插件它们的分析能力严重依赖平台 API 返回的数据格式和权限范围。而 open-code-review 认为Git 仓库本身就是最完整、最权威、最无需信任的代码事实源。它的 Git 集成策略分三层底层解析使用 libgit2 绑定Rust 实现直接读取.git/objects/中的 pack 文件绕过git命令行的 shell 解析开销。实测在 50 万行的 monorepo 中git diff命令耗时 1.2s而 libgit2 直接解析仅需 320ms。这对 CI 场景至关重要——审查不能成为流水线瓶颈。变更粒度控制支持--scopecommit单次提交、--scopebranch分支差异、--scoperangeSHA 范围三种模式。其中--scoperange是为 Git Flow 团队设计的open-code-review --scoperange --from develop --to feature/login直接分析整个功能分支的累积变更避免逐个 PR 审查的碎片化。元数据可信链所有分析结果都绑定 Git 的commit hash和author email。报告中不会出现“某人写了有问题的代码”而是“a1b2c3d4提交中src/api/auth.ts第 45 行存在硬编码密钥”。这消除了责任归属争议也便于后续用git bisect快速定位引入问题的精确提交。这种设计带来的副作用是它无法分析“尚未 commit 的工作区变更”。但这恰恰是优点——它强制开发者养成“小步提交、及时审查”的习惯。我们团队推行后平均 PR 大小从 320 行降至 87 行Review 通过率从 63% 提升至 91%。3. 核心模块拆解与实操要点3.1 规则引擎YAML 驱动的可编程审查核open-code-review 的心脏不是 LLM而是其规则引擎。它采用 YAML 配置驱动所有检查项check都定义在rules/目录下支持继承、覆盖、条件激活。一个典型的密钥检测规则rules/security/api-key.yaml如下id: security-api-key name: API Key Hardcoded severity: Critical description: Detect hardcoded API keys in source code enabled: true tags: [security, credentials] # 触发条件文件扩展名匹配 内容正则匹配 match: file_extensions: [.js, .ts, .py, .java, .go] pattern: (?i)(api[_-]?key|secret[_-]?key|token|password|passwd|pwd)\\s*[:]\\s*[\]([^\]{16,})[\] # 增强当匹配命中时调用 LLM 进行上下文验证 llm_enhancement: enabled: true prompt: | Analyze the following code snippet. Does the matched value represent a real API key? File: {{file_path}} Line: {{line_number}} Code: {{matched_code}} Context (3 lines before/after): {{context_before}} {{matched_code}} {{context_after}} Answer ONLY with YES or NO. # 修复建议提供可直接执行的 sed 命令 remediation: command: sed -i s/{{matched_code}}/process.env.{{env_var_name}}/g {{file_path}} env_var_name: API_KEY_{{service_name | upper}}这个 YAML 的设计逻辑非常务实match段是确定性基础正则表达式必须能 100% 精准捕获目标模式。我们拒绝“模糊匹配”因为误报是审查工具最大的敌人。(?i)忽略大小写、[\]匹配单双引号、{16,}要求密钥长度至少 16 字符——这些都是基于真实泄露事件的统计规律AWS 密钥 20 位、GitHub Token 40 位、Stripe Key 32 位。llm_enhancement是可选保险丝它不改变规则是否触发只影响是否生成告警。当 LLM 返回 “NO” 时该匹配项被静默丢弃。我们实测过对password: test123这类明显测试值LLM 判定准确率达 99.2%而正则本身无法区分测试值和真实密钥。remediation是行动导向它提供的不是泛泛而谈的“请使用环境变量”而是可一键执行的sed命令。{{env_var_name}}模板会自动将api_key转为API_KEYservice_name从文件路径推断如src/services/payment.js→PAYMENT。开发者复制命令回车问题即修复。我们统计过83% 的低危问题如日志打印敏感信息通过此方式 10 秒内闭环。提示规则编写最大陷阱是过度依赖 LLM。曾有个团队写了 20 条“LLM-only”规则结果 CI 流水线因网络抖动频繁失败。我们的经验是LLM 只用于解决正则无法覆盖的 5%-10% 边缘 case核心 90% 的检查必须由确定性规则保证。规则目录结构按风险域划分security/、performance/、maintainability/、testing/每个子目录下README.md详细记录每条规则的触发样本、误报案例、修复效果。3.2 CLI 命令体系从单次扫描到流水线集成open-code-review 的 CLI 命令设计遵循 Unix 哲学每个命令只做一件事且做好。它不提供review all这种模糊指令而是将审查拆解为原子操作ocr scan核心审查命令# 扫描最近一次提交的变更 ocr scan --scopecommit # 扫描 feature/login 分支相对于 develop 的所有变更 ocr scan --scopebranch --basedevelop --headfeature/login # 扫描指定文件用于快速验证规则 ocr scan --filessrc/utils/crypto.ts --rulessecurity/* # 输出 JSON 格式供 CI 解析关键 ocr scan --formatjson --outputreport.jsonocr rules list规则管理# 列出所有启用的规则及其 ID ocr rules list --enabled-only # 查看某条规则的详细定义含示例匹配 ocr rules show security-api-key # 临时禁用某条规则调试用 ocr rules disable security-api-keyocr config init环境初始化# 交互式生成配置文件 .ocr.yaml ocr config init # 指定 LLM 提供商和 API Key注意Key 存储在 ~/.ocr/config.toml权限 600 ocr config set llm.provideropenai ocr config set llm.api_keysk-...最关键的实操细节在于--formatjson输出。它不是简单的美化 JSON而是严格遵循 SARIF v2.1.0 标准这是微软主导的静态分析结果交换格式被 GitHub Code Scanning、SonarQube、VS Code 原生支持。一份典型输出包含runs[0].tool.driver.name: open-code-reviewruns[0].results[]: 每个告警对象含ruleId、levelerror/warning、message.text、locations[0].physicalLocation.artifactLocation.uri文件路径、locations[0].physicalLocation.region.startLine行号runs[0].properties.metrics: 统计信息总检查数、告警数、各 severity 数量这意味着你无需任何额外开发就能将ocr scan --formatjson的输出直接喂给 GitHub Actions 的codeql-action/upload-sarif步骤在 PR 页面自动生成带行号跳转的告警标记。我们团队的.github/workflows/code-review.yml核心片段如下- name: Run open-code-review run: | curl -L https://github.com/open-code-review/cli/releases/download/v1.2.0/ocr-linux-amd64 -o ocr chmod x ocr ./ocr scan --scopepr --formatjson --outputocr-report.json - name: Upload SARIF report uses: github/codeql-action/upload-sarifv2 with: sarif_file: ocr-report.json整个过程无需服务器、无需数据库、无需维护纯客户端执行完美契合 DevOps 的“基础设施即代码”理念。3.3 LLM 集成安全机制密钥隔离与请求净化热搜词里反复出现 “如何防止密钥泄露”这绝非空穴来风。我们曾审计过 17 个开源 LLM CLI 工具其中 12 个存在硬编码 API Key、5 个在错误日志中明文打印 Key、3 个将整个 diff 内容作为 prompt 发送包含.env文件内容。open-code-review 的安全设计是防御纵深的密钥存储隔离API Key 从不存于项目配置文件.ocr.yaml而是单独存于~/.ocr/config.toml且该文件创建时自动设置chmod 600。CLI 启动时校验文件权限若非 600 则拒绝读取并报错。Windows 下使用 DPAPI 加密存储macOS 使用 KeychainLinux 使用 Secret Service API。请求内容净化所有发送给 LLM 的 payload 都经过三重过滤路径脱敏/home/alice/project/src/core/auth.ts→src/core/auth.ts敏感内容擦除正则匹配^export\s\w\s*\s*[][^]{20,}[]$环境变量赋值行整行替换为export API_KEY [REDACTED]。上下文截断LLM 请求的context_before/context_after严格限制为各 3 行且每行超过 120 字符时自动截断避免长字符串拖慢 LLM 推理。审计日志强制开启当--llm标志启用时--debug日志会记录请求时间戳、模型名称、输入 token 数、输出 token 数脱敏后的 prompt 前 200 字符显示[REDACTED]占位符LLM 响应的前 200 字符HTTP 状态码和响应耗时我们甚至提供了ocr audit-log命令可导出过去 30 天的所有 LLM 调用摘要不含任何代码内容供安全团队定期审查。这种“可审计、可追溯、可验证”的设计让合规部门不再视 LLM 为黑箱而是可控的风险增强组件。4. 实操全流程与关键环节详解4.1 从零开始5 分钟完成本地部署与首次扫描不要被“CLI”、“LLM”这些词吓住。open-code-review 的安装比git本身还简单。以下是 macOS/Linux 的标准流程Windows 同理下载.exe即可步骤 1下载二进制文件无依赖打开终端执行# 创建安装目录 mkdir -p ~/bin # 下载最新版v1.2.0截至 2024 年 7 月 curl -L https://github.com/open-code-review/cli/releases/download/v1.2.0/ocr-linux-amd64 -o ~/bin/ocr # 或 macOS Apple Silicon curl -L https://github.com/open-code-review/cli/releases/download/v1.2.0/ocr-darwin-arm64 -o ~/bin/ocr # 添加执行权限 chmod x ~/bin/ocr # 将 ~/bin 加入 PATH永久生效 echo export PATH$HOME/bin:$PATH ~/.zshrc source ~/.zshrc验证安装ocr --version应输出open-code-review v1.2.0。全程无需sudo无需npm install无需 Pythonpip这就是 CLI 的力量。步骤 2初始化配置可选LLM 非必需# 生成默认配置文件 .ocr.yaml存于当前目录 ocr config init # 如果你有 OpenAI Key配置 LLM否则跳过规则引擎仍 100% 工作 ocr config set llm.provideropenai ocr config set llm.api_keysk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx注意ocr config init生成的.ocr.yaml是项目级配置可提交到 Git而~/.ocr/config.toml是用户级密钥存储绝不提交。步骤 3运行首次扫描以本项目自身为例克隆 open-code-review 仓库git clone https://github.com/open-code-review/cli.git cd cli # 扫描最近一次提交通常是最新的 README 修改 ocr scan --scopecommit你会看到类似输出[INFO] Scanning commit a1b2c3d4... [CHECK] security-api-key (Critical) - src/main.rs:45: Hardcoded API key detected [CHECK] maintainability-long-function (Medium) - src/parser/diff.rs:128: Function parse_patch has 87 lines [CHECK] testing-missing-assert (High) - tests/integration.rs:23: Test test_git_diff_parsing missing assertion [SUMMARY] Total checks: 142 | Alerts: 3 (Critical:1, High:1, Medium:1)每条[CHECK]行都包含规则 ID、严重等级、文件路径:行号、简明描述。按Enter键可展开详细信息包括匹配的代码片段、LLM 验证结果如果启用、修复建议命令。步骤 4深度查看某条告警ocr scan --scopecommit --rulessecurity-api-key --debug--debug会显示完整的git diff输出片段正则匹配的原始文本LLM 请求的完整 prompt已脱敏LLM 返回的原始响应YES或NO最终决策逻辑树这让你能 100% 理解工具为何这样判断消除“黑盒恐惧”。4.2 团队规模化规则定制与共享分发单机好用只是起点。真正的价值在于团队协同。open-code-review 提供了企业级规则管理方案规则仓库Rule Repo将rules/目录单独存为 Git 仓库如gitgitlab.example.com:rules/ocrrules.git。团队管理员在此维护统一规则集按版本发布v1.0-security,v2.0-performance。项目级规则覆盖项目根目录的.ocr.yaml可指定规则源rules: - source: gitgitlab.example.com:rules/ocrrules.git ref: v1.0-security path: security/ - source: ./custom-rules/ # 本地覆盖规则这样所有成员ocr scan时自动拉取最新安全规则同时允许项目保留自己的特殊规则如特定框架的检查。规则测试套件每个规则 YAML 文件旁必须有test/目录包含positive/应触发的代码样本和negative/不应触发的代码样本。运行ocr rules test会自动执行所有规则的单元测试确保规则更新不引入误报/漏报。我们要求新规则合并前测试覆盖率必须 ≥95%且positive/样本需覆盖至少 3 种变体如不同引号、不同空格、不同变量名。我们为一家 200 人规模的 SaaS 公司实施时将规则分为三级L1 基础规则所有项目强制启用安全密钥、SQL 注入、XSS、空指针、资源泄漏 —— 由安全团队维护。L2 框架规则按技术栈启用rules/react/、rules/spring-boot/、rules/python-django/—— 由各技术委员会维护。L3 业务规则项目自定义如“所有支付接口必须包含幂等性校验”、“用户手机号字段必须通过正则^1[3-9]\d{9}$验证” —— 由项目组自行编写。这套体系让规则不再是“一次性脚本”而成为可版本化、可测试、可审计、可复用的组织知识资产。4.3 CI/CD 深度集成让审查成为流水线的守门员ocr scan的真正威力在于它能无缝融入任何 CI 系统。以下是 GitHub Actions、GitLab CI、Jenkins 的标准集成方案GitHub Actions推荐在.github/workflows/pr-review.yml中name: Code Review on: pull_request: types: [opened, synchronize, reopened] jobs: review: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 with: fetch-depth: 0 # 必须获取完整历史用于 git diff - name: Download open-code-review run: | curl -L https://github.com/open-code-review/cli/releases/download/v1.2.0/ocr-linux-amd64 -o ocr chmod x ocr - name: Run code review id: ocr run: ./ocr scan --scopepr --formatsarif --outputocr-report.sarif - name: Upload SARIF report uses: github/codeql-action/upload-sarifv2 with: sarif_file: ocr-report.sarif - name: Fail if Critical issues found if: steps.ocr.outputs.exit-code 1 run: echo Critical issues found! Please fix before merging. exit 1关键点--scopepr会自动检测当前 PR 的 base/head 分支并计算精确 diff。upload-sarif步骤会在 PR 页面顶部生成告警横幅点击可跳转到具体行。GitLab CI在.gitlab-ci.yml中code-review: image: alpine:latest before_script: - apk add --no-cache curl - curl -L https://github.com/open-code-review/cli/releases/download/v1.2.0/ocr-linux-amd64 -o /usr/local/bin/ocr chmod x /usr/local/bin/ocr script: - ocr scan --scopemerge_request --formatjson --outputocr-report.json artifacts: - ocr-report.jsonGitLab 原生不支持 SARIF但ocr-report.json可被自定义脚本解析生成 MR 评论。Jenkins Pipelinepipeline { agent any stages { stage(Code Review) { steps { sh curl -L https://github.com/open-code-review/cli/releases/download/v1.2.0/ocr-linux-amd64 -o ocr chmod x ocr script { def result sh(script: ./ocr scan --scopecommit --formatjson, returnStdout: true).trim() if (result.contains(severity:Critical)) { currentBuild.result UNSTABLE echo Critical issues found! } } } } } }所有方案的核心思想一致审查必须在代码合并前完成且结果必须可视化、可追溯、可阻断。我们坚持一个原则CI 中的ocr scan命令永远不带--llm标志。LLM 调用放在开发者的本地机器上提升体验CI 只运行确定性规则保障稳定性和速度。这既规避了 CI 环境网络波动风险又避免了在构建服务器上存储 API Key。5. 常见问题与实战排障技巧5.1 误报率高先检查这 3 个地方几乎所有新用户都会遇到“怎么全是误报”的困惑。别急90% 的情况源于配置偏差。按顺序排查1. 规则启用状态运行ocr rules list --enabled-only确认你期望的规则确实在列表中。有时ocr config init会默认禁用部分高风险规则如security-exec-command需手动启用ocr rules enable security-exec-command2. 文件路径匹配规则中的file_extensions是精确匹配不支持通配符。如果你的项目用.tsx但规则只写了[.ts]自然不触发。检查规则 YAML 的match.file_extensions补充对应扩展名。我们建议新项目初始化时先运行ocr scan --scopecommit --debug观察File extension: .tsx这样的日志再针对性调整规则。3. 正则表达式边界这是最隐蔽的坑。例如密钥规则pattern: password\\s*[:]会匹配password 123但也可能匹配passwordResetToken这个变量名因为password是子串。正确写法是添加单词边界\bpattern: \\b(password|api[_-]?key)\\b\\s*[:]\b确保匹配的是独立单词而非子串。我们提供ocr rules debug命令可交互式测试正则ocr rules debug --pattern \\bpassword\\b --text user.password 123; const passwordResetToken abc; # 输出Match at position 12-20: password # No match for passwordResetToken实操心得我们团队建立了一个“误报登记表”每次遇到误报不是简单禁用规则而是记录误报样本、原因分析、修正后的正则、测试用例。半年下来规则库的误报率从 12% 降至 0.8%。这比任何 LLM 微调都有效。5.2 LLM 调用失败网络、Key、Prompt 三维度诊断LLM 相关问题通常表现为LLM request failed: timeout或Invalid API key。系统化排查网络层检查 CI 环境是否允许出站 HTTPS端口 443。很多企业防火墙会拦截。运行ocr scan --llm --debug观察curl -v https://api.openai.com/...是否超时。如果是配置代理ocr config set llm.proxyhttp://proxy.corp:8080密钥层运行ocr config show llm.api_key确认输出是sk-...而非null或空字符串。检查~/.ocr/config.toml文件权限ls -l ~/.ocr/config.toml应显示-rw-------。如果不是运行chmod 600 ~/.ocr/config.toml。Prompt 层--debug日志中找到LLM Request Payload复制messages[0].content部分粘贴到 OpenAI Playground 中测试。如果 Playground 也失败说明是 Prompt 问题。常见 Prompt 问题上下文过长超过模型 token 限制、包含非法字符如未转义的、LLM 返回非预期格式如返回{answer: YES}而非纯文本YES。此时需修改规则 YAML 中的llm_enhancement.prompt添加更严格的输出格式要求如Answer ONLY with YES or NO. No explanation.。5.3 性能瓶颈5 个优化技巧实测有效在大型 monorepo500k 行中ocr scan默认耗时 8-12 秒。我们通过以下优化降至 1.8 秒1. 范围最小化永远用--scopecommit替代--scopebranch。单次