Reuse-First 开源复用优先协议
铁律
- 禁止未检索就自研:任何含算法成分的新逻辑/功能,动手写之前必须走完检索流程。
- 禁止直连 GitHub 反复重试:用户网络直连 github.com 超时(已实测)。检索与下载一律镜像优先,直连仅作全部镜像失败后的最后手段,且最多试一次;直连也失败 → 按"网络全断"降级处理(Phase 4 末)。
- 禁止无来源移植:改写/移植的代码必须记录来源仓库 + commit,禁止"看起来是自己写的"。
- 禁止许可证带毒引入:GPL/AGPL/LGPL(静态链接)/MPL/SSPL/BUSL 代码引入前必须做兼容性判定,拿不准必须向用户确认。
- 禁止未校验集成:经第三方镜像下载的代码,必须按 Phase 4 供应链校验条款完成验证后才能进入集成。
决策链总览
需求 → [Phase 0 技术抽象] → [Phase 1 启发式检索(时间盒 15 分钟)]
↓
有候选?──否──→ Phase 5 自研(附检索记录)
│是
[Phase 2 候选评估]
↓
有存活候选?──否──→ Phase 5 自研(附检索记录 + 每个候选的淘汰原因)
│是
同语言?──是──→ Phase 3A 直接使用(镜像下载 + 供应链校验)
│否
└──────→ Phase 3B 移植改写(先跑原测试对齐行为 + 安全审查)
Phase 0:技术抽象
把业务需求剥离业务词汇,还原为纯技术能力描述。业务词搜不到开源方案,技术词才能。
产出三要素:
- 输入 / 输出:数据形态与变换关系(如"时序点列 → 平滑曲线")
- 约束:语言、运行时、性能、体积、离线要求
- 能力名词:该问题在计算机科学的通用名字(如"限流"→ rate limiting / token bucket)
Phase 1:启发式关键词检索(时间盒 15 分钟)
关键词矩阵(至少生成 3 组再开始搜)
| 维度 | 方法 | 示例(需求:接口限流) | |------|------|------------------------| | 能力词 | Phase 0 的通用名 | rate limit | | 算法词 | 该能力的经典算法名 | token bucket / leaky bucket / sliding window | | 场景词 | 框架/中间件语境 | api gateway throttle / middleware | | 同义替换 | 换近义词重搜 | throttle / quota / concurrency control | | 中英互译 | 中文需求先译英文搜,英文词搜不到再回中文搜 Gitee | 限流 / 熔断 |
检索渠道(按序执行,任一渠道命中高质量候选即可进入评估)
- WebSearch 工具:
{关键词} {语言} library site:github.com,同时搜{关键词} {语言} 开源 site:gitee.com(WebSearch 若不可用则跳过本渠道,不阻塞流程) - Gitee 搜索(国内直连可用,已实测):
https://gitee.com/search?q={关键词}&type=repository - 包管理器官方生态(同语言方案的主战场):
- npm →
https://npmmirror.com(搜索页可用) - PyPI → WebSearch
pypi {关键词}(注意:清华源只有 simple 索引,无搜索页) - crates.io → rsproxy.cn
- Maven → 阿里云 maven 仓库搜索
- npm →
- awesome 列表:
awesome-{领域} {语言}是捞冷门高质量库的兜底手段
已实测的镜像能力边界(2026-08-24)
| 镜像 | 能力 | 实测结果 | |------|------|----------| | gh-proxy.com | git clone / tarball / Release 文件下载 | 可用(200) | | gh-proxy.com | HTML 搜索页代理 | 不可用(403),禁止用于检索 | | ghproxy.net | git 协议 | 可用 | | mirror.ghproxy.com | raw 文件 | 超时,不可用 | | kkgithub.com | 仓库浏览 | 超时,不可用 | | gitee.com | 搜索/浏览 | 可用(国内服务) |
GitHub 仓库的搜索一律靠渠道 1(WebSearch)+ 渠道 2(Gitee 找镜像仓库),不走镜像代理。
终止条件
- 找到 ≥1 个候选 → 进入 Phase 2 评估
- 时间盒耗尽或全部关键词组 × 全部渠道均无候选 → 记录检索日志,进入 Phase 5 自研
Phase 2:候选评估(及格线)
逐项核对,任一硬指标不满足即淘汰换下一个候选:
| 指标 | 及格线 | |------|--------| | 许可证 | MIT/Apache-2.0/BSD 直接通过;LGPL/MPL/SSPL/BUSL/GPL/AGPL 需按项目许可做兼容性判定,拿不准向用户确认 | | 维护状态 | 近 12 个月有 commit;或满足成熟稳定库豁免:功能完整、文档清晰、无未解决的高危 issue(算法类库稳定后常年不更新属正常) | | 完整性 | 有测试或可运行示例;README 能说清用法 | | 匹配度 | 机械判定:候选必须全部通过三项检查——①支持需求的输入形态 ②产出需求的输出形态 ③满足 Phase 0 列出的硬约束。任一项不通过即淘汰 | | 安全 | 无未修复的高危已知漏洞(查 README/security 段落与 issue 标题) | | 体量 | 不引入巨型依赖解决一个小问题(依赖树膨胀检查) |
并列裁决:多个候选同时存活时,按 许可证宽松度 > 体量 > 维护状态 顺序裁决。
Phase 3A:同语言直接使用
- 按 Phase 4 镜像规则安装/下载并完成供应链校验
- 写最小验证:用真实输入跑一遍,确认行为符合预期
- 在依赖清单中登记来源与许可证
Phase 3B:异语言移植改写
- 先读原仓库测试用例——它们是最精确的行为规格
- 移植前安全审查:重点检查输入处理、反序列化、网络与文件操作段落,剔除可疑逻辑
- 移植核心算法,语言习惯按目标语言惯用法重写(不做逐行直译)
- 把原测试用例翻译为目标语言测试,全部通过才算移植完成
- 文件头注释标注来源:
// Ported from {owner}/{repo}@{commit} ({license})
Phase 4:国内镜像获取与供应链校验(强制)
镜像规则(镜像优先,直连兜底且只试一次)
| 场景 | 镜像方案 |
|------|----------|
| git clone GitHub 仓库 | git clone https://gh-proxy.com/https://github.com/{owner}/{repo}.git(实测可用);备选 https://ghproxy.net/ 同格式 |
| GitHub 源码快照 | https://gh-proxy.com/https://github.com/{owner}/{repo}/archive/refs/heads/{branch}.tar.gz |
| GitHub Release 文件 | https://gh-proxy.com/https://github.com/{owner}/{repo}/releases/download/{tag}/{file},先 curl -sI --max-time 15 验证 200 |
| npm 包 | npm i --registry=https://registry.npmmirror.com {pkg} |
| pip 包 | pip install {pkg} -i https://pypi.tuna.tsinghua.edu.cn/simple;备选阿里云 https://mirrors.aliyun.com/pypi/simple |
| cargo 包 | 配置 rsproxy.cn |
| Gitee 仓库 | 直连即可(国内服务) |
供应链校验(三级,按序执行至通过)
- 首选官方源校验:包管理器安装(npm/pip/cargo)走官方镜像时,校验由注册表的完整性机制(integrity hash / wheel hash)完成,默认通过
- 官方哈希核对:上游提供校验和/签名(如 Release 的 .sha256 / .asc)时,下载后逐一核对
- 双镜像交叉校验:无任何官方校验物时,从两个不同镜像(如 gh-proxy.com + ghproxy.net)分别下载,比对产物哈希;一致才可集成,不一致立即丢弃并向用户报告
网络全断降级
全部镜像 + 直连均失败时:检查项目现有依赖中能否组合实现;不能再则进入 Phase 5 自研,并在检索记录中注明"网络不可用,检索降级为本地依赖盘点"。
Phase 5:自研(最后候选穷尽路径)
进入自研必须携带检索记录:已用的关键词组、已查的渠道、每个候选的淘汰原因(无候选则注明)。自研时参考检索中看到的同类实现的接口设计(公开设计不受许可证限制),但代码必须自己写。
与选型协议的协作边界
reuse-first 负责"找到候选并验证可用";当多个候选难分高下、或需要从零设计技术方案时,把候选清单交给 optimal-architecture-algorithm skill 做最终裁决。二者串行,不并行输出结论。
输出格式:复用决策报告
每次流程结束向用户输出:
## 复用决策报告
- 需求抽象:{输入→输出,能力名词}
- 检索记录:{关键词组 × 渠道,命中情况}
- 候选对比:{库名 | star | 许可证 | 维护状态 | 淘汰/入选原因}
- 决策:{直接使用 / 移植 / 自研} —— 理由
- 获取方式:{镜像 URL 或安装命令}
- 供应链校验:{通过的校验级别与结果}
微信扫一扫