下个吉时|我让 AI 给 GitHub 项目算了一个“合并代码的良辰吉时”

简介: “合历”是一款趣味AI Coding实践项目,为GitHub仓库智能推荐代码合并与发布的“良辰吉时”,通过这款趣味实践项目,一篇带你走完AI从零开始写的完整工程实践

小小免责声明:本文是一个 AI Coding 趣味实践,不是严肃的软件工程方法论。合历的“宜合并”“忌发布”数据来自 GitHub 公开数据。技术大佬请轻喷,欢迎把它当成一个周末小玩具来试玩。

前天,我在知名交友网站刷着推,看到不愿意透露姓名的网友说:以后除非事态紧急,都挑有仪式感 / 特殊的时间合并代码。

我第一反应是“需求来了”,这周的实践教程就它了。做一个会读项目气质的“代码老黄历”,让合并代码的人择个良辰 merge,让提交 PR 的人知晓下一个吉时是何时。

需求梳理

这个项目叫“合历”,名字自然不是我取的。而是我把需求交给 GPT 之后,它将其命名为合历,这很合理。

合历的功能很简单,你输入一个公开 GitHub 仓库地址,或者某个具体 PR 链接。页面读取项目的公开数据,再告诉你:未来 64 天内,下一次适合合并代码的时间是什么时候。

图注:合历的 v3 版本,第一个版本没能截图

一开始,我给 AI 的需求很朴素:

我想做一个项目。

用户输入 GitHub 项目地址,
你根据项目内容、提交记录和合并记录,
告诉用户下一个“合并代码的良辰吉时”是什么时候。

页面参考老黄历风格,但主色调改成蓝色。
搜索未来 64 天,而不是 45 天。

为了保持这个玩具项目的轻量感,我没让 AI 没有上框架,也没有 npm。整个项目只有简单的 index.htmlstyles.cssapp.js文件,搭配一个七牛的 LAS 服务器就能跑。

在电脑本地环境下,执行 python3 -m http.server 4173,再访问 http://localhost:4173,就能看到页面样式。

到这里,是不是都很简单?一次性就能成功的项目,就写不出一篇稿子了。

下面,我们开始翻车。

AI 的执念是 09:09

第一版(下面简称 v1)跑出来之后,我兴冲冲地在 GitHub Trending 扒拉了两个 GitHub 项目给合历,想看看它们下一个 PR 的吉时是何时。

结果,awesome-llm-apps 推荐 9 月 9 日 09:00。ai-hedge-fund 还是 9 月 9 日,只是变成了 10:10。

我当时的反应是,Codex 你是在偷懒吗?经过我和 Codex 对线之后,好吧,是人类的问题。Codex 确实没有偷懒,是我给它的方向太容易让它去“偷懒”。

v1 的评分设计中,月日相同、时间成双、回文日期之类的“仪式感分数”太高。虽然该项目的提交习惯也参与计算,但权重不够,导致结果就是哪个数字漂亮,哪个日子就胜出。

新的计算逻辑

所以,后面让 Codex 调整了一波计算逻辑。仪式感只能是最后的一点加分项,绝对不能压过项目自己的节奏。

修改了不下 5 个版本之后,目前的“合历”会综合看这些信息:

  • 最近的提交和 PR 合并更重要,较旧记录会逐渐降低权重;

  • 团队经常在哪个星期、哪个时间段合并;

  • 两次合并之间通常隔多久,节奏是否稳定;

  • PR 从创建到合并一般需要多长时间,给 Review 和 CI 留出缓冲;

  • 最近 30 天的项目活跃度是在上升,还是在降温;

  • 项目的语言、创建时间、提交 SHA 和 PR 会生成一个项目指纹,避免所有项目同分时得到同一个结果;

  • 周末、深夜和周五下班后会扣分;

  • 09:09、10:10、月日相合和回文日期仍然保留,但只负责最后那一点仪式感。

这样,同一个漂亮时间不再适合全世界所有仓库。

图注:合历优化之后,之前两个项目的吉时对比。某种程度上,你可以通过下一个 PR 合并时间来判断这个项目是否“活跃”

Merge & Release 傻傻分不清

合历做到一半的时候,我又提出一个看起来很有道理的需求:如果下一个 PR 正好让版本累计到 16、32、64、128 这种二进制进位,是不是就可以发版?还可以显示“距离下一次发布还差多少个 PR”。

Codex 只负责思考如何实现,不会判断你的需求是否合理。它照着这个方向,开始补逻辑了。

直到我突然反应过来:我提需求的时候,一直想的是“Release”,但是和 Codex 交流的时候一直在说“合并 PR”,我将 Merge 和 Release 完全搞混了。

PR 作为协作和代码合并事件,从提交到合并的时间,一般不会很长。而一次版本发布,通常要累积多个 PR,要几周甚至几个月才发一次版本。所以,上面那个看似不错的需求,其实并不存在合理点。

但既然已经有这种设定在了,Merge 和 Release 还是都在合历上体现了。它俩被拆分成了两条独立的线:

  • PR 和 Commit 用来分析“什么时候适合合并”;

  • GitHub Release 历史用来分析“什么时候可能适合发版本”。

合历的主功能是 PR 合并良辰吉时,所以我让 Codex 把 Release 变成了一个小彩蛋。只有当项目仍然活跃,但已经明显超过自己的典型发版周期时,合历才会悄悄递上一枚“沉睡版本”。

点开之后,会看到发版吉时。

图注:沉睡版本 / 发版吉时彩蛋

有时候,功能不是越多越好。把某些功能藏起来,可能会更有意思,像个寻宝游戏。

界面迭代

虽然这个项目的页面叫“合历”,如果只给一个时间还是差了点意思。

我参考了在线老黄历的布局,主色调是红色和金色。个人觉得有点土,让 Codex 把整个页面的色调限制在白、蓝、黑灰三组颜色中。不用渐变色,也不要米白色。而提示文案部分,则采用更轻的蓝灰色,不和正文抢注意力。

首页左右两侧,保留了“宜”和“忌”:

  • 宜:合并、评审、补文档、修 Bug、整理看板……

  • 忌:跳过测试、强推主干、周五夜发、无预案、热修无记录……

这些内容会根据本地日期稳定生成,每天 00:00 换一签。不是每次刷新都乱跳,而是同一天看到同一份“代码运势”。

为了增加一点重复访问的新鲜感,我让 Codex 加了一个八日代码签册。不用登录,最近一次排盘和近 8 天的签到记录都会保存在当前浏览器里。下次再访问,合历页面会自动填入上次的项目,还可以直接恢复当时的排盘。

当然,本机保存不是云端同步。如果你换了浏览器、清理浏览器数据,上一次的签文记录就会消失。

吉时的六个栏目

随着需求一点点增加,合历页面最后有了六个入口:

  1. 首页:用来输入仓库或 PR,查看每日宜忌;

  2. 项目黄历:可查看项目年龄、语言、活跃度和成就签章;

  3. 合并吉时:设有首选时间、三个备选、完整评分和指定时刻验吉;

  4. 提交命理:查看提交与合并在星期和小时上的分布;

  5. 代码风水:用语言构成和项目节奏生成趣味解读;

  6. 发布宜忌:只使用真实 Release 记录推算版本窗口。

此外,还有一些我个人很喜欢的小功能:

  • 从四个候选时间里“摇一支签”;

  • 合并前勾选 CI、Review、同步主分支和回滚预案;

  • 四项完成后,盖一枚“今日合并许可证”;

  • 输入某个具体时间,看这个时刻是“宜”还是“忌”;

  • 生成签文分享图;

  • 输入具体 PR 链接时,额外考虑 PR 是否开放、是否还是 Draft。

图注:合并之前的 checklist 已集齐

到这里,合历已经不是个单纯的日期计算器了,它像是个围绕 Merge PR 做的一些工作,能帮你 check PR 合并的条件等等细节。

又不是不能用

这个模块主要是本人给 Codex 提的需求,让它基于需求描述,再进行细化,最后生成代码实现。

这里也遇到了 AI Coding 的常见问题,就是它太擅长交付一个“截图看起来已经完成”的页面。至于按钮到底能不能点、状态能不能回来、手机上会不会横向溢出,都是需要我们最后做一遍人工验收。

下面是我实际验收过程中,先后遇到的问题:

  • 除了首页,其他导航一概不能点击;

  • 算完项目后,点首页不能正常回去;

  • 点击“再算一个”,上一轮结果没有完全清空;

  • 模块需要输入项目时,居然又把用户赶回首页;

  • 两个不同项目被漂亮数字带去了同一个时间;

  • GitHub 未登录接口的免费查询额度用完后,错误提示不够清楚;

  • 页面回到首页后,URL 还留着 ?repo=...,刷新一下又自动跳回结果页。

尤其是最后一个问题,太隐蔽了不仔细未必能发现。

毕竟我们点击首页,视觉上发现已经回去了,一切看起来完全正常。但地址栏还记着仓库参数。直到最后一轮真实浏览器回归,我点完首页又刷新了一次,才发现它会重新分析项目。

好吧,页面没有意见,URL 有自己的想法。

最终,我把首页、五个栏目、仓库提交、错误输入、重新计算、记忆恢复、指定时刻、抽签、合并仪式、分享图、发版彩蛋都重新走了一遍,又分别检查了桌面端和 390px 宽的移动端。

这也是这次实践里最重要的一课,不要只问 AI“做完了吗”,要让它真的把项目跑起来。

GitHub 的免费额度

因为要频繁地测试合历推算的结果,中间我看到过这样一次提示:GitHub 免费查询额度暂时用完了。

第一反应是:我要不要充个钱?

但,事实上不用。这个项目读取的是 GitHub 公开 API,不登录也能访问,但匿名请求有频率限制。等额度恢复后可以继续使用;项目里也给仓库数据做了短期缓存,避免同一个仓库反复查询。

如果后续访问量真的上来了,再考虑后端代理、GitHub Token 或统一缓存。对于一个周末实践,先保持零登录和零后端,反而更轻。

重申免责声明

“合历”不是真的黄历。你的 PR 不会因为合历推荐了 10:24,就让一个没过测试的 PR 突然变得安全;也不会因为今天写着“宜合并”,就替你承担线上事故。

这个小项目,最大的作用是按下 Merge 之前增加了一个停顿:CI 绿了吗?Review 过了吗?主分支同步了吗?回滚方案准备好了吗?

如果四件事都做完了,那么无论此刻是不是所谓的“良辰吉时”,至少这是一次更从容的合并。

本项目采用纯 HTML、CSS 和原生 JavaScript 编写,由七牛云独家赞助 Token 开发,并托管在七牛云 LAS 服务上,通过 LAS 服务器自带的公网域名进行访问。
至此,愿你每一次合并,都顺利通过 CI。

相关文章
|
20天前
|
机器学习/深度学习 缓存 人工智能
一文读懂百炼 Kimi K3:2.8 万亿 MoE 模型、百万上下文、分层计费方案
全球首个开源3万亿级大模型Kimi K3正式上线阿里云百炼平台。该模型由月之暗面研发,参数达2.8万亿,支持100万Token超长上下文与原生视觉理解,具备文本生成、多模态推理及复杂逻辑深度思考能力,输入定价20元/百万Token(缓存命中仅2元)。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
21天前
|
存储 算法 数据安全/隐私保护
为什么RAR有RAR3、RAR5,唯独没有RAR4?一文彻底搞懂RAR加密原理与密码恢复
本文揭秘RAR格式命名之谜:所谓“消失”的RAR4实为RAR3(Format 2.9)的历史别称;梳理RAR2→RAR3→RAR5演进脉络,详解AES-128到AES-256、SHA-1到PBKDF2的加密升级,并解析密码恢复工具为何只标“RAR3/RAR5”——关键在加密结构,不在版本号。(239字)
274 6
|
21天前
|
自然语言处理 IDE 数据挖掘
最新版通义千问(Qwen3.8-Max-Preview)功能介绍
Qwen3.8-Max-Preview是通义千问推出的最新一代旗舰大模型预览版,定位为“代码工程+专业办公”双核旗舰,总参数量达2.4万亿,采用全新迭代的MoE(混合专家)稀疏架构,是通义千问团队首个突破万亿参数的原生多模态模型。该模型以“天”为单位持续进化,官方宣称其综合能力在全球范围内仅次于Fable 5,正式版将开源发布。
734 1
|
2月前
|
机器学习/深度学习 数据采集 SQL
小模型也能做 Agent?阿里最新的 AgenticQwen 论文讲了什么
这篇论文讨论了一个很实际的工程问题:在真实的工业场景中,Agent 往往不只是要会聊天,还要具备多步推理、调用工具的能力。但受限于工业生产环境对成本的控制和延迟的要求,不适合把所有任务都交由大模型来处理。
353 3
小模型也能做 Agent?阿里最新的 AgenticQwen 论文讲了什么
|
2月前
|
人工智能 前端开发 安全
周一上线|1M 上下文成标配,GPT-5.5 更会干活;Google 拟最高 400 亿美元加码 Anthropic
先看模型这边,沉寂 15 个月后,DeepSeek 终于发布了 V4 预览版,而且照例开源。最猛的是,它直接把 1M 上下文做成了标配,量大管饱。OpenAI 那边,比 DeepSeek 早一天发布的 GPT-5.5,主打“更人性化”,在带起一众模型“稳稳接住”“懂你所想”的风潮之后,这回 GPT-5.5 不弯不绕,反倒显得清新脱俗。当然,模型的重点还是能力:Agentic Coding、Computer Use 和复杂任务处理,GPT-5.5 较之前版本都有很大提升。
1033 1
周一上线|1M 上下文成标配,GPT-5.5 更会干活;Google 拟最高 400 亿美元加码 Anthropic
|
2月前
|
人工智能 前端开发 安全
编程实测:杀疯了的 GPT-5.5 真的有它说的那么强么?
4月24日凌晨,OpenAI发布GPT-5.5——迄今最智能、易用的旗舰模型。聚焦Agentic能力,全面升级编程(Terminal-Bench达82.7%)、知识工作、科研协作、百万级长上下文(1M token)、推理效率与安全防护,已超越Claude Opus 4.7和Gemini 3.1 Pro。
668 0
编程实测:杀疯了的 GPT-5.5 真的有它说的那么强么?
|
2月前
|
缓存 Oracle 关系型数据库
面向 DeepSeek-V4 的 FlashMemory:长上下文 KV Cache 如何压到约 1/10
FlashMemory-DeepSeek-V4 最值得关注的地方,是它把长上下文推理里的 KV Cache 管理,从“尽量塞进显存”推进到了“按需调度记忆”。 这条路线的意义在于,长上下文能力继续往前走,瓶颈不会只来自模型能读多长,也会来自系统能不能便宜、稳定地保存和调用这些历史信息。窗口变大只是第一步,真正难的是让模型知道哪些内容值得保留、什么时候该被召回。
267 0
面向 DeepSeek-V4 的 FlashMemory:长上下文 KV Cache 如何压到约 1/10
|
3月前
|
人工智能 开发工具 开发者
终端里跑 3D 老鼠,桌面窗口成摆锤;AI 大佬新公司估值百亿起
上周技术圈的信息挺杂,但有几条线索值得放在一起看。 一边,AI 产品继续往具体工作流里走:Claude Code 开始支持 Agent View,OpenAI 把 Codex 带到移动端;另一边,开发者社区继续整活:有人给 Claude Code 做实体旋钮,有人做 Claude 用量桌面仪表盘,还有人把终端做成能显示 3D 老鼠的玩具。
418 1
终端里跑 3D 老鼠,桌面窗口成摆锤;AI 大佬新公司估值百亿起
|
3月前
|
人工智能 机器人 测试技术
用 Bub 和飞书搭一个更懂群聊上下文的小机器人
手把手教你搭建 Bub:一个懂群聊上下文、无“班味”的轻量化 AI 助理。
464 1
用 Bub 和飞书搭一个更懂群聊上下文的小机器人
|
2月前
|
缓存 安全 iOS开发
Codex 实践系列 Vol.01:从跑通 CLI 开始,看懂 Codex 怎么工作
作为本系列的开篇,我们不聊 Codex 的复杂能力,也不做完整评测。只做一件很基础的事:在本地把 Codex 跑起来,然后让它完成一个边界清楚的小任务。
575 0
Codex 实践系列 Vol.01:从跑通 CLI 开始,看懂 Codex 怎么工作

热门文章

最新文章