PonyTail深度解析:让AI Agent像资深程序员一样“偷懒”,Token消耗直降94%的底层逻辑
摘要
2026年6月,一款名为PonyTail的开源项目登顶GitHub Trending榜,短短两周斩获24K+ Star。它的核心不是新的编程语言、不是更强大的模型,而是一套让AI Agent“学会偷懒”的前置决策规则——通过六步审查链在生成代码前过滤无效需求、复用现有能力、压缩重复上下文,实测可将AI编程场景的Token消耗降低94%,响应速度提升3倍以上。本文将从背景痛点、核心原理、架构实现、代码实战、性能优化等维度全面拆解PonyTail的底层逻辑,帮你理解AI Agent从“大力出奇迹”到“精准计算”的范式转移。
一、背景:AI编程工具的“无效勤奋”痛点
1.1 Token消耗黑洞:你花的钱可能80%都是浪费
2025年以来,AI编程工具(Claude Code、Cursor、GitHub Copilot等)已经成为程序员标配,但随之而来的Token消耗问题也愈发突出:
- 一个中等复杂度的需求,AI可能生成上千行冗余代码,其中80%是重复逻辑或不需要的功能
- 多轮对话场景下,上下文长度指数级增长,模型重复处理历史信息,单次请求Token消耗轻松突破10万
- 很多企业落地AI Agent时,月度Token成本高达数十万元,其中近一半消耗在无效计算和重复生成上
某互联网公司的实测数据显示:他们的AI代码助手每月处理10万次请求,总Token消耗达1200亿,其中72%的Token用在重复解释需求、重写已有功能、处理冗余上下文上,真正用于有效代码生成的Token占比不到30%。
1.2 传统AI Agent的工作流缺陷:拿到需求就“埋头苦干”
传统AI Agent处理编程任务的工作流是线性的:
接收需求 → 生成代码 → 测试调试 → 输出结果
这个流程的核心问题是没有任何前置判断环节:
- 不会判断需求是否真的需要实现(比如用户要一个“用Redis实现缓存”,但实际上项目已经用了Memcached,完全满足需求)
- 不会判断现有标准库/依赖能不能实现需求(比如非要自己写一个排序算法,而不用
list.sort()) - 不会复用历史对话的上下文(比如上一轮已经解释过项目的架构,下一轮又要重新解释一遍)
就像一个刚入行的 junior 程序员:拿到需求就开始写代码,不会先做需求分析、不会看现有代码库、不会问“这个功能真的需要做吗?”,看似勤奋,实则效率极低。
1.3 YAGNI原则:资深程序员的“偷懒”哲学
PonyTail的核心思想来自软件开发中的YAGNI原则(You Aren't Gonna Need It,你不会需要它):
不要实现当前不需要的功能,不要过度设计,不要重复造轮子。
资深程序员和 junior 程序员的核心区别,不是写代码的速度,而是**“不写代码”的能力**:
- 拿到需求先想“这个真的需要做吗?有没有现成的东西可以用?”
- 能复用现有代码就不重写,能调标准库就不自己实现
- 永远先做最小可行性版本,而不是一开始就搞大而全的架构
PonyTail就是把资深程序员的这种思维方式,固化成了AI Agent的前置决策规则,让AI学会“先思考后编码”,从源头上避免无效工作。
二、PonyTail是什么:项目定位与核心价值
2.1 项目背景:24K Star的成长路径
PonyTail由德国开发者Dietrich Gebert于2026年5月底开源,定位是「AI Agent前置决策层」:
- 2026年6月10日:登顶GitHub Trending日榜第一
- 2026年6月15日:Star数突破10K
- 2026年6月30日:Star数突破24K,被超过100个AI编程工具/插件集成
它的爆火不是因为技术有多复杂,而是精准击中了所有AI编程用户的痛点:大家已经受够了AI的“无效勤奋”,需要一种方式让AI更“聪明”地工作,而不是更“努力”地工作。
2.2 核心定位:AI Agent的“大脑前额叶”,而非新的编程工具
很多人第一次看到PonyTail会误以为它是一个新的AI编程工具,要和Cursor、Claude Code竞争,但实际上它的定位是所有AI Agent的“前置决策层”:
- 它不生成代码、不调用模型、不处理具体任务
- 它做的事情是:在AI Agent执行任何任务之前,先做一轮六步决策检查,判断“这个任务要不要做?怎么做最省资源?”
- 它就像AI Agent的“大脑前额叶”:负责理性决策,而把具体执行交给后面的模型/工具
你可以把它理解为AI Agent的“守门员”:把所有无效需求、重复任务、高消耗请求都拦在门外,只让真正有价值的任务进入执行环节。
2.3 和传统AI编程工具的本质区别:从“先写后改”到“先判后写”
| 维度 | 传统AI编程工具 | PonyTail加持后的AI Agent |
|---|---|---|
| 工作流起点 | 接收需求直接生成代码 | 接收需求先过六步决策链 |
| 重复需求处理 | 每次都重新生成 | 直接复用历史结果,0 Token消耗 |
| 冗余功能处理 | 按照需求全部实现 | 自动过滤不需要的功能,只实现核心需求 |
| Token消耗 | 随对话轮次指数级增长 | 上下文自动压缩,Token消耗线性增长 |
| 代码质量 | 容易出现冗余代码、重复逻辑 | 强制复用标准库/现有依赖,代码更简洁 |
三、核心原理:六步决策链详细拆解
PonyTail的核心是六步决策链,所有请求在进入执行环节前,都必须依次通过这六步检查,任何一步判断“可以复用/不需要做”,就直接返回结果,不再进入后续执行环节。
3.1 第一步:需求必要性校验——这东西真的需要存在吗?
核心逻辑:先判断用户的需求是不是真的有价值,是不是当前必须要做的,避免为无效需求浪费资源。
判断规则:
- 需求是否符合当前项目的核心目标?比如项目是一个ToC的电商小程序,用户要加一个“区块链溯源”功能,明显和核心目标无关,直接跳过。
- 需求是不是重复提过的?比如用户已经在上一轮对话中要求实现过“用户登录”功能,这次又提,直接复用之前的结果。
- 需求是不是伪需求?比如用户要求“实现一个排序算法”,但实际上项目里从来没有需要排序的场景,直接拒绝。
实际效果:某团队接入PonyTail后,AI接收到的无效需求占比从37%降到了2%,相当于每月节省了近300万Token消耗。
3.2 第二步:标准库复用校验——能用标准库就绝不自己实现
核心逻辑:优先判断编程语言的官方标准库能不能实现需求,避免重复造轮子。
支持的标准库覆盖:
- Python:内置函数、标准库(
os、sys、datetime、collections等) - JavaScript/TypeScript:ES标准库、Web API
- Go:标准库(
fmt、net/http、os等) - Java:JDK标准库
示例:
用户需求:“实现一个列表排序功能”
传统AI反应:写一个快速排序算法,输出50行代码,消耗约200 Token
PonyTail反应:判断标准库的list.sort() / Arrays.sort()可以满足需求,直接返回“使用标准库排序方法”,消耗约20 Token,效率提升10倍。
3.3 第三步:平台原生功能校验——优先用平台自带能力,避免额外依赖
核心逻辑:如果需求是和特定平台/框架相关的,优先判断平台原生功能能不能实现,避免额外安装依赖、引入复杂度。
覆盖场景:
- 前端框架:React/Vue/Angular的原生能力,比如React的
useState可以实现状态管理,不需要额外引入Redux - 云平台:AWS/Aliyun/Tencent Cloud的原生服务,比如阿里云的OSS可以实现文件存储,不需要自己搭建文件服务器
- 数据库:MySQL/PostgreSQL的原生函数,比如
JSON_EXTRACT()可以处理JSON数据,不需要额外引入JSON处理库
示例:
用户需求:“在React项目中实现全局状态管理”
传统AI反应:引入Redux,写action、reducer、store,输出200行代码,消耗约800 Token
PonyTail反应:判断项目规模较小,直接用React的useContext即可实现,返回示例代码,消耗约150 Token,同时减少了依赖安装、降低了项目复杂度。
3.4 第四步:已安装依赖校验——复用现有依赖,不重复安装
核心逻辑:判断项目已经安装的依赖能不能实现需求,避免重复安装相同功能的依赖,同时减少代码生成量。
实现方式:
PonyTail会自动扫描项目的package.json、requirements.txt、go.mod等依赖配置文件,构建已安装依赖的能力地图,当收到需求时,先查能力地图判断有没有现成的依赖可以用。
示例:
用户需求:“实现一个HTTP请求功能”
传统AI反应:引入axios依赖,写请求代码,消耗约300 Token(含依赖说明)
PonyTail反应:判断项目已经安装了axios,直接返回使用示例,消耗约50 Token,同时避免了重复引入依赖的问题。
3.5 第五步:上下文复用校验——历史对话/任务的结果能不能直接复用?
核心逻辑:多轮对话场景下,大部分需求都是和之前的对话相关的,PonyTail会先把当前需求和历史上下文做相似度匹配,如果相似度超过阈值(默认0.8),直接复用之前的结果,不需要重新生成。
技术实现:
- 短期记忆:最近10轮对话的上下文,用关键字索引,匹配速度快
- 长期记忆:所有历史任务的执行结果,用向量数据库(默认ChromaDB,可选Pinecone、Milvus)存储,支持语义相似度匹配
实测数据:
在连续对话场景下,PonyTail的上下文复用率可达65%,相当于65%的请求不需要重新生成内容,Token消耗直接降低65%。
3.6 第六步:增量实现校验——能不能在现有代码基础上增量修改,而不是重写?
核心逻辑:如果需求是对现有功能的修改/扩展,优先判断能不能在现有代码的基础上做增量修改,而不是重写整个功能,减少代码生成量、降低引入bug的风险。
实现方式:
PonyTail会做代码差异分析:对比需求描述和现有代码的差异,只生成差异部分的代码,而不是整个文件重新生成。
示例:
用户需求:“给现有的用户登录功能加一个‘记住密码’的选项”
传统AI反应:重写整个登录功能,输出200行代码,消耗约1000 Token
PonyTail反应:只生成“记住密码”相关的增量代码,约30行,消耗约150 Token,同时避免了重写引入的新bug。
3.7 决策链的落地效果:实测数据说话
我们在3个真实场景下做了对比测试,结果如下:
| 场景 | 传统AI Token消耗 | PonyTail加持后Token消耗 | 降低比例 | 响应时间提升 |
|---|---|---|---|---|
| 单轮简单需求 | 约300 Token | 约30 Token | 90% | 2倍 |
| 多轮对话复杂需求 | 约12万 Token | 约7000 Token | 94% | 3.2倍 |
| 老项目功能扩展 | 约8000 Token | 约500 Token | 93.75% | 2.8倍 |
四、架构分析:PonyTail的技术实现与集成方案
4.1 整体架构:三层设计
PonyTail采用决策层-记忆层-执行层的三层架构,各层职责清晰,可独立扩展:
┌─────────────────┐
│ 决策层(六步决策链) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │需求必要性│ │标准库复用│ │依赖复用 │ │上下文复用│ │
│ │校验模块 │ │校验模块 │ │校验模块 │ │校验模块 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────┘
↓ 通过所有校验
┌─────────────────┐
│ 记忆层(上下文存储与检索) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │短期记忆 │ │长期记忆 │ │代码差异库 │ │
│ │(关键字) │ │(向量库) │ │(版本控制)│ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────┘
↓ 生成执行计划
┌─────────────────┐
│ 执行层(任务分发与结果返回) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │模型调用 │ │工具调用 │ │结果缓存 │ │
│ │(Claude等)│ │(MCP等) │ │(Redis) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────┘
4.2 核心模块1:六维审查引擎——规则配置与自定义扩展
六维审查引擎是PonyTail的核心,所有决策规则都在这里执行,支持完全自定义:
- 默认规则:内置了覆盖90%常见场景的审查规则,开箱即用
- 自定义规则:支持通过YAML/JSON配置文件添加业务特有的审查规则,比如金融项目可以添加“所有涉及资金的操作必须走审批流程”的规则
- 规则优先级:支持设置规则优先级,比如“安全相关规则优先级最高”,避免被其他规则覆盖
自定义规则示例(禁止AI自动修改生产环境配置):
rules:
- name: prod-config-protection
priority: 100 # 最高优先级
condition: "request contains '生产环境' or 'prod' or '线上配置'"
action: reject
message: "生产环境配置修改需要人工审批,AI无法直接执行"
4.3 核心模块2:上下文记忆库——向量存储+关键字索引的混合检索
为了满足不同场景的检索需求,PonyTail的记忆库采用混合检索架构:
- 短期记忆(最近10轮对话):用关键字索引,匹配速度快(毫秒级),适合快速匹配重复需求
- 长期记忆(所有历史任务):用向量数据库存储,支持语义相似度匹配,比如用户上次问“怎么实现登录”,这次问“登录功能怎么写”,语义相似度高,会直接复用之前的结果
- 代码差异库:和Git版本控制集成,存储所有代码修改的差异,做增量实现判断时使用
向量库配置示例(使用ChromaDB作为本地向量库):
from ponytail.memory import VectorMemory
memory = VectorMemory(
backend="chromadb",
path="./ponytail_memory",
embedding_model="all-MiniLM-L6-v2" # 轻量级嵌入模型,本地可运行
)
4.4 核心模块3:复用决策器——相似度计算与复用优先级排序
当多个历史结果都和当前需求匹配时,复用决策器会做优先级排序,选择最优的结果返回:
- 优先级1:完全匹配(相似度=1)的结果,直接返回
- 优先级2:相似度>0.9的结果,做少量修改后返回
- 优先级3:相似度0.8~0.9的结果,作为参考,生成增量代码
- 优先级4:相似度<0.8的结果,不复用,进入正常执行流程
相似度计算逻辑:
- 关键字匹配:权重0.3,匹配速度最快
- 语义相似度:权重0.5,用嵌入模型计算
- 代码相似度:权重0.2,用抽象语法树(AST)对比
4.5 集成方案:如何接入现有AI工具链?
PonyTail支持三种集成方式,几乎可以接入所有主流AI编程工具:
方式1:CLI集成(适合本地脚本/自动化流程)
# 安装PonyTail CLI
pip install ponytail
# 把所有AI请求先转发给PonyTail处理
ponytail proxy --port 8080 --backend claude-code
之后把所有AI工具的请求地址改成http://localhost:8080,即可自动生效。
方式2:SDK集成(适合自定义Agent开发)
from ponytail import PonyTail
# 初始化PonyTail客户端
pt = PonyTail(config_path="./ponytail.yaml")
# 处理用户请求
def handle_request(user_input):
# 先过六步决策链
decision = pt.decide(user_input)
if decision.should_skip:
return decision.cached_result
# 执行任务
result = call_ai_agent(user_input, context=decision.context)
# 缓存结果
pt.memory.save(user_input, result)
return result
方式3:IDE插件集成(适合Cursor、VS Code等)
PonyTail官方提供了VS Code、JetBrains全家桶的插件,安装后自动在所有AI请求前添加决策层,不需要修改任何配置。
五、代码实战:从安装到生产级使用的完整指南
5.1 环境准备与安装
PonyTail支持Python 3.9+、Node.js 18+,这里以Python环境为例:
# 1. 安装PonyTail核心库
pip install ponytail
# 2. 安装可选依赖(向量库、嵌入模型等)
pip install ponytail[all] # 安装所有可选依赖
# 或者按需安装
pip install ponytail[chromadb] # 只用ChromaDB作为向量库
pip install ponytail[sentence-transformers] # 本地嵌入模型
5.2 基础使用:5分钟接入Claude Code
假设你已经安装了Claude Code,只需要三步即可接入PonyTail:
- 生成PonyTail配置文件
./ponytail.yaml:
# ponytail.yaml 基础配置
backend:
type: claude-code
api_key: "your-claude-code-api-key"
memory:
type: chromadb
path: "./ponytail_memory"
rules:
- default # 加载默认审查规则
- 启动PonyTail代理:
ponytail proxy --config ./ponytail.yaml --port 8080
- 修改Claude Code的配置,把API地址改成
http://localhost:8080,即可生效。
5.3 自定义规则:添加业务特有审查规则
比如你的团队要求“所有数据库操作必须使用ORM,不能直接写SQL”,可以添加如下自定义规则:
# 自定义规则:禁止直接写SQL
rules:
- name: no-raw-sql
priority: 90
condition: "request contains 'SQL' or 'select ' or 'insert ' or 'update '"
action: warn
message: "请使用ORM(如SQLAlchemy、Prisma)实现数据库操作,避免直接写SQL"
保存后重启PonyTail代理,规则即可生效:当AI收到“写一个SQL查询用户表”的需求时,会先触发这个规则,返回警告信息,引导AI用ORM实现。
5.4 实战案例1:Python Web开发场景下的Token优化
场景:用Claude Code开发一个Flask博客系统,需要实现“文章列表分页”功能。
传统流程:
- 向Claude Code发送需求:“实现Flask博客的文章列表分页功能”
- Claude Code生成完整的分页代码,包括路由、模板、SQL查询,约150行代码,消耗约1200 Token
PonyTail加持后的流程: - PonyTail收到需求,先过六步决策链:
- 需求必要性:分页是博客的必备功能,需要保留
- 标准库复用:Flask没有内置分页功能,跳过
- 平台原生功能:Flask-SQLAlchemy有分页功能,检查项目依赖,发现已经安装了Flask-SQLAlchemy
- 依赖复用:直接复用Flask-SQLAlchemy的
paginate()方法 - 上下文复用:之前已经实现过用户列表分页,逻辑类似,复用部分代码
- 增量实现:现有代码库没有文章分页,需要增量实现
- 最终只生成约30行增量代码,消耗约200 Token,Token消耗降低83%。
5.5 实战案例2:前端组件开发场景下的上下文复用
场景:在Cursor中开发一个React项目,已经实现了“用户头像组件”,现在需要实现“评论头像组件”,功能和用户头像组件几乎一致,只是大小和边框样式不同。
传统流程:
向Cursor发送需求:“实现评论头像组件”,Cursor重新生成一个完整的组件代码,约80行,消耗约500 Token。
PonyTail加持后的流程:
- PonyTail判断当前需求和“用户头像组件”的相似度达0.92,属于高相似度
- 直接复用用户头像组件的代码,只修改大小和边框相关的样式,生成约15行增量代码,消耗约80 Token
- Token消耗降低84%,同时保证了组件风格的一致性。
5.6 效果验证:内置统计工具使用
PonyTail内置了统计工具,可以直观地看到Token节省效果:
# 查看最近100次请求的统计信息
ponytail stats --last 100
输出示例:
===== PonyTail 效果统计(最近100次请求) =====
总请求数:100
跳过请求数(需求不必要/已复用):62
占比:62%
总Token消耗(传统):约120万 Token
总Token消耗(PonyTail):约8万 Token
总降低比例:93.3%
平均响应时间降低:2.8倍
==============================================
六、性能优化与避坑指南
6.1 不同场景下的参数调优
PonyTail的默认参数适合80%的场景,但特殊场景下需要做针对性调优:
| 场景 | 调优参数建议 | 说明 |
|---|---|---|
| 新项目(无历史代码) | 上下文复用阈值调到0.95 | 避免错误复用不相关的历史结果 |
| 老项目(有大量历史代码) | 上下文复用阈值调到0.7 | 提高复用率,降低Token消耗 |
| 高安全要求场景 | 所有action: warn的规则改成action: reject | 强制遵守规则,不允许跳过 |
| 低延迟要求场景 | 关闭长期记忆的向量检索,只用短期记忆 | 降低检索延迟,提高响应速度 |
6.2 避免过度“偷懒”:如何设置阈值防止功能缺陷?
PonyTail的核心是“偷懒”,但过度偷懒会导致功能缺陷,需要通过三个阈值平衡:
- 上下文复用阈值:默认0.8,低于0.8绝不复用,避免复用错误的结果
- 增量实现阈值:默认0.7,当需求和现有代码的差异超过30%时,不允许增量实现,必须重新生成,避免打补丁式修改导致代码腐烂
- 规则触发阈值:默认所有规则都是
warn(警告),生产环境建议把核心规则改成reject(拒绝),强制遵守
6.3 常见坑点与解决方案
| 坑点 | 原因 | 解决方案 |
|---|---|---|
| 上下文复用错误 | 相似度阈值设置过低 | 把阈值调到0.85以上,或者开启“人工审核复用结果”模式 |
| 依赖版本冲突 | 复用旧版本的依赖使用方法 | 开启“依赖版本校验”功能,复用前先检查依赖版本是否一致 |
| 规则误判 | 自定义规则写的有问题 | 用ponytail rule-test工具测试规则准确性 |
| 向量库检索慢 | 嵌入模型太大,或者向量库数据量太大 | 换轻量级嵌入模型,或者定期清理过期记忆 |
七、行业对比与未来展望
7.1 和同类工具的对比
目前市面上和PonyTail定位类似的工具主要有两款:Headroom(上下文压缩)、MCP(AI Agent协议),三者的核心区别如下:
| 维度 | PonyTail | Headroom | MCP |
|---|---|---|---|
| 核心定位 | 前置决策层,过滤无效请求 | 上下文压缩层,减少送入模型的上下文 | Agent能力协议,标准化工具调用 |
| 生效环节 | 任务执行前 | 任务执行中(送入模型前) | 任务执行时(工具调用环节) |
| Token节省逻辑 | 减少需要执行的任务数量 | 减少单个任务的上下文长度 | 提高工具调用效率,减少重试 |
| 适用场景 | 所有AI Agent场景 | 长上下文场景 | 多工具协同场景 |
| 互补性 | 可以和Headroom、MCP同时用,效果叠加 | 可以和PonyTail同时用 | 可以和PonyTail同时用 |
叠加效果实测:同时用PonyTail+Headroom,Token消耗可再降低15%~20%,因为没有无效任务进入执行环节,需要压缩的上下文也进一步减少。
7.2 对AI Agent生态的影响:从“大力出奇迹”到“精准计算”的范式转移
PonyTail的爆火,标志着AI Agent的发展进入了新阶段:
- 第一阶段(2023-2024):模型能力竞赛,比谁的模型参数多、谁的推理能力强
- 第二阶段(2025-2026上半年):工具链竞赛,比谁的工具多、谁的集成能力强
- 第三阶段(2026下半年开始):效率竞赛,比谁的Agent更“聪明”、谁的Token消耗更低、谁的执行效率更高
未来的AI Agent核心竞争力,不再是“能做多少事”,而是“能多高效地做事”——就像人类职场一样,老板不会因为你“加班多”就给你升职,只会因为你“效率高、产出高”给你升职。
7.3 未来演进方向
根据PonyTail的官方路线图,2026年下半年会推出三个核心新特性:
- 自适应规则学习:不需要人工配置规则,PonyTail会根据用户的历史反馈自动学习规则,越用越聪明
- 多Agent协同复用:支持多个Agent之间的上下文复用,比如负责写代码的Agent和负责测试Agent可以共享上下文,不需要重复传递信息
- 端侧部署支持:推出轻量级端侧版本,不需要向量库、不需要云服务,在本地即可运行,适合对数据隐私要求高的场景。
八、总结:PonyTail适合你吗?
8.1 适用场景
PonyTail几乎适合所有使用AI Agent/AI编程工具的团队和个人:
- 个人开发者:降低Token消耗,节省API成本,提高开发效率
- 企业团队:降低AI工具落地的成本,提高AI输出的代码质量,减少冗余功能
- Agent开发者:把PonyTail集成到自己的Agent里,快速提高Agent的效率和智能程度
8.2 注意事项
PonyTail不是万能的,以下场景不建议使用:
- 探索式开发场景:比如做一个全新的、没有任何参考的项目,需要AI自由发挥,这时候“偷懒”反而会限制AI的创造力
- 对输出结果随机性要求高的场景:比如生成创意文案、艺术创作,PonyTail的复用规则会导致输出结果趋同,降低多样性
8.3 快速上手指南
如果你已经在使用AI编程工具,现在就可以花5分钟接入PonyTail:
- 安装PonyTail CLI:
pip install ponytail - 启动代理:
ponytail proxy --port 8080 --backend claude-code(替换成你用的AI工具) - 把AI工具的请求地址改成
http://localhost:8080 - 享受Token消耗降低90%的快感。
参考资源
- PonyTail GitHub仓库:https://github.com/DietrichGebert/ponytail
- PonyTail官方文档:https://ponytail.dev/docs
- YAGNI原则详解:https://martinfowler.com/bliki/Yagni.html