MoreRSS

site iconAmeow | 阿猫修改

后端工程师,写Go 和 Python,运营「猫鱼周刊」。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Ameow | 阿猫的 RSS 预览

猫鱼周刊 vol. 074 浅谈Vibe Coding

2025-07-27 17:55:37

关于本刊

这是猫鱼周刊的第 75 期,本系列每周日更新,主要内容为每周收集内容的分享,同时发布在

博客:阿猫的博客-猫鱼周刊

RSS:猫鱼周刊

邮件订阅:猫鱼周刊

微信公众号:猫兄的和谐号列车

私信:[email protected]

头条

信心花舍,特殊为你开铺。——《信心花舍》陈奕迅

摄于香港赤柱市集。赤柱在香港的南端,远离城市喧嚣,旁边的山上很多别墅,有种度假村的感觉。从市区坐公交车可以直达,车程四十分钟左右;坐在双层大巴的上层右侧,大巴驶出市区,穿过山之后,就可以看到海景。由于比较远,也不是热门的景点,所以人很少,甚至以外国人居多。

这周写了一篇长文 你不是在 vibe coding,而是在十倍速生成屎山,在 2025 年中这个节点体验了一下 Agent Mode 的 AI 编程。简单来说,现在的 AI 编程工具确实能帮助编程小白非常迅速地完成一个像模像样的项目,但同时 vibe coding 的产物基本上就是屎山。

一旦你开始 vibe coding,你就只能 vibe 到底了。

在 vibe coding 十个小时后,我的代码库里出现了几千行我根本看不懂也没法维护的代码,以及一个「好像能用」的产品。说实话,这个项目如果要我自己一边查文档一边写,估计至少要花上一周。但是这在工程上没有太大的意义,完全就是十倍速生成屎山。

比较有意思的是,刚好尤雨溪也发了个说这个事:

另外,在 AI 陷入瓶颈之后,如果使用者本身对技术不理解,不能帮助 AI 脱困,那只会跟 AI 一起深陷泥潭。所以到头来还是那句话:

AI 决定下限,人决定上限。

文章

MoonTV —— 一次 Vibe Coding 尝试

原文链接

一个类似的尝试,作者也是对前端不是很熟悉,而 AI 在一些小众或者说疑难问题上,就是需要人去亲自上手来解决。

这个跟我有点相似的经历让我产生了一个想法:AI 编程真正利好的也许是跨技术栈工作的人,例如精通后端的人去写前端,或者反过来。如果你已经精通了一个技术栈,你的基础知识够扎实,了解解决疑难问题的路径和常用工具,并且有跨技术栈的一点点基础,就不会跟 AI 一块受困。

vibe coding 最近大火,所以经常在网上看到很多简陋的网站,或者项目,这些网站有个特点:样式都很相似、展示为主没什么后端逻辑,或者项目的文档都一股 AI 味。我觉得「AI 味」某种程度上就是「过于完美」,缺乏多样化的个人风格。我一直把编程视为一种「创作」活动(除了在公司做 CRUD 的需求不是很算),被 AI 大举入侵之后如果在编程中完全放弃自己创作,那会索然无味吧。

美团开源 OIBench 与 CoreCodeBench:揭示大模型编程能力的真实水平

原文链接

美团开源的两个评测集,分别是针对信息学奥赛级别算法以及复杂的工程场景的题库。

它的结果也挺有意思,挑一点说说:

首先是 BugFix 场景,AC Rate 最多也只有六七十的水平,在多函数的时候平均居然只有二十多,这解释了我的长文里提到的,如果你圈好上下文(例如你定位到某个可能出问题的函数)再让它去解决,效果会更好。

其次,AC@1(一次解决)也是一个很重要的指标,可以看到目前大多数模型这个指标都不到 50%,说明大多数情况模型都没法很高效地解决问题。从使用上观察,有些聪明的模型会引导你打日志,或者是做单元测试等,这都是比较好的解决方案。

从这个区分度高的评测来看,AI 编程在解决实际问题确实还处在比较「弱智」的水平,好听点说,跟非常初级的程序员相当。所以一天到晚嚷嚷程序员要被 AI 取代的哥们醒醒吧,要么尽早转行,要么好好学吧。

然后是这个能力图谱,可以作为平时 coding「选妃」的参考。跟我印象中的差不多,claude 不错,在复杂问题上选 thinking 模型,简单问题选基础模型。比较意外的是 Gemini-2.5-Pro 居然成绩一般,我还觉得挺好用来着。

Chrome's SSL Bypass Cheatcode

原文链接

在 Chrome 中遇到 SSL 错误时,可以盲打 thisisunsafe强行打开网页。这个功能还有点小历史,几年间变过几次,看得出开发者不希望它变得流行。

本来可以水一篇 TIL 的,但是太短了,顺手发在这里好了。

贵就是好?镜头之间的差距,到底在哪?

视频链接

影视飓风的「硬核科普」栏目,第一次看,其他几期感觉都比较偏向专业向的视频创作团队。

虽然我对摄影有点了解,但是确实很少在看电影或者视频的时候认真去观察或者去想画面是怎么拍的、用什么镜头拍的。看完这个科普视频反而让我觉得,作为业余,去折腾器材来提高所谓画质或者质感反而是没意义的事,在烧钱这块摄影出了名的无底洞,不如多出门拍来得有用和实惠。

想法

Switch 2 到手体验

本来没计划这么快就买 Switch 2,但是出了蓝凤凰(Harman Phoenix II),所以决定去香港的海边拍一卷(这个卷没拍完,等拍完洗出来再分享下),所以去了香港。因为赤柱地方很小,所以拍和逛完还剩下不少时间,所以顺便去把 Switch 2 买了。网上看攻略都是去 K11 Musea 的 nsew 买,他们在小红书有账号,而且现在不需要配货了,就挑了这个。地方稍微有点难找,在 B2,一开始看 B2 都是食街以为走错了,结果在比较里面的地方。

虽然说不用配货,但是我顺便买了咚奇刚的游戏,以及 microSD Express 的卡。列一下价格,仅供参考,单位都是 HKD。

  • 马利欧赛车世界主机套装 3750
  • SanDisk 256GB microSD Express 398
  • 咚奇刚蕉力全开 498
  • 钢化膜 80

另外咚奇刚还送了一把香蕉扇和一副扑克牌周边。招行的掌上生活 app 搜境外,可以领 2000-60 的券,店里可以刷 visa 卡,或者微信支付宝,不支持银联。现场会开机给你确认一下屏幕,帮你贴好膜,开机红要连手柄才会有,所以没必要录像(不是很懂为什么小红书会有这种赛博处女情结?)。购买的体验大概就是这样,店员的服务意识很好,也很友善,我很少在线下买东西,这点给我感觉挺好。过关的话也没什么,提着红袋子大摇大摆从西九龙高铁站走,没人会管你。

到家以后开机,转移数据,这一步稍微有点折腾。首先是要把 Switch 2 和 Switch 都先升级到最新的系统版本,然后要两台机都接入电源才能开始(但实际过程中可以拔掉电源,骗过一开始的检测就行了)。然后中间又有数次需要手机扫 Switch 2 上的码进行登录等等操作,每次都要打开网页输密码,也没有引导你去安装 Switch App。这点很蛋疼,建议参考一下 Steam 的操作,从 Switch App 扫码就可以授权就好了。

花了大概半个小时左右完成数据的转移,终于进入系统,又要下载游戏数据。如果是虚拟游戏卡(电子版),固然要等它下载;如果是 Switch 1 的卡带,需要等待的时间也比较长(估计是下载 Switch 2 的特有文件);如果是 Swtich 2 的卡带(非密钥卡),就稍微快点,也要等几分钟更新。我觉得作为主机,开箱即玩的体验很重要,我不反对电子版游戏,但是体验没有插入卡带就能开玩来得爽快。

吐槽了这么多,我对这个机器还是很满意的,尤其是我打开 Swtich 2 版本的塞尔达传说王国之泪的时候,1080p 60 帧的体验真的很好。在 Switch 上,这个游戏不仅糊还掉帧,体验实在拉跨(虽然这也不是我玩不下去的原因)。现在终于能以现代游戏的分辨率和帧率重新游玩,又开始让我感到上头。两个新游戏也简单玩了一下,没有太多特别,就是休闲娱乐型的游戏,认知负担不高。

其他方面的话,按键比 Switch 大了一点,Joycon 也大了一点,总体手感我觉得不错。虽然屏幕大了一圈,也重了不少,但是长时间握着玩没太多感觉。续航倒不是太满意,玩两个多小时塞尔达就没电了,不过性能的提升让我觉得我觉得这个 tradeoff 还算合理。

工具/网站

AGI-Eval

网站链接

由美团、上海交通大学、Datawhale 等合作搞的一个评测,前面提到的两个数据集就在里面。希望这不是又一个 KPI 项目,而是能长久的运行下去。

最后

本周刊已在 GitHub 开源,欢迎 star。同时,如果你有好的内容,也欢迎投稿。如果你觉得周刊的内容不错,可以分享给你的朋友,让更多人了解到好的内容,对我也是一种认可和鼓励。(或许你也可以请我喝杯咖啡

另外,我建了一个交流群,欢迎入群讨论或反馈,可以通过文章头部的联系邮箱私信我获得入群方式。

你不是在 vibe coding,而是在十倍速生成屎山

2025-07-24 04:37:58

前言

就在过去的一天我花了大概十个小时 vibe coding 了下面这么个玩意,主要有这些功能:

  • 列出连接到服务器的设备列表
  • 连接设备,通过 scrcpy 实时监看屏幕,并支持控制
  • 支持执行 ADB 命令

事先声明,我是 AI 编程的积极拥护者,去年初我还写过一篇用 GitHub Copilot 写前端的文章。时隔一年多,这个领域涌现出了很多新产品,Agent、MCP、Cursor、Claude Code 等等的推出,我觉得是时候更新一下这方面的体验了。

先说一下这趟 vibe 旅程的花费和成果吧。我主要使用了 Cursor(主要是 claude-4-sonnet 和 Auto 模式),以及 Claude Code(Kimi K2 和 Claude 模型)。其中 Cursor Pro 的额度被我用完了,Claude Code 花费了十几刀。「产出」的代码有 10000 行左右,虽然中间有部分组件的代码,我估计实际逻辑代码大概也有几千行。

屎山

是的,标题里说得很清楚了,我基本上是在十倍速生成屎山。这本来应该是一篇经验介绍的文章,但是我觉得非常应该「把丑话说在前头」,而且这也是我在 vibe coding 中最大的心得。

我之前就说过:AI 决定下限,人决定上限。我觉得 vibe coding 分为以下几种情况:其一,你对要实现的功能非常熟悉,只是让 AI 代劳敲键盘的工作;其二,你对要实现的功能略知一二,要你自己拿起来写会磕磕绊绊;其三,也是我这次的情况,你对要实现的功能基本一无所知。第一种情况下,你跟 AI 很可能会配合得亲密无间,而后两种情况,你的体验估计够呛。后面的体验基本都是基于第三种情况来说。

一旦你开始 vibe coding,你就只能 vibe 到底了。

在你不懂的时候,AI 一旦写出一大段代码,这会迅速超出你的上下文范围。是的,虽然 AI 只有 200K 上下文,但这已经比大多数人能理解的上下文要大得多了(我认为一个普通的程序员上下文应该在 500 行代码左右)。这时候你的代码质量就会快速崩塌:混用 AI 模型、多次生成之间使你的代码库出现了多种不同风格的代码;不清楚最佳实践,导致有各种可能蹩脚的实现。很快你就会发现你陷入一种循环:贴错误日志/截图/描述错误 - AI 修改 - 无脑接受变更 - 运行,你对代码已经完全失去了掌控。

在 vibe coding 十个小时后,我的代码库里出现了几千行我根本看不懂也没法维护的代码,以及一个「好像能用」的产品。说实话,这个项目如果要我自己一边查文档一边写,估计至少要花上一周。但是这在工程上没有太大的意义,完全就是十倍速生成屎山。

工具简评

我这里决定把 Claude Code 和 Cursor 的 Agent Mode 放在一起说,他们在设计上是类似的,都是有个模型做规划(TODO),然后分步执行,调用工具这样的路子。先说优点:

  • 自动选择上下文的功能太好了,相比以前需要手动选是个极大的改进(这点 Claude Code 做得更好,交互上基本只用描述需求;Cursor 可以手动选择来增加精确度,但是自动的也不错)。
  • 规划的设计也很不错,如果发现方向不对可以尽早停止,在大型任务或者用户完全不懂的时候能取得更好的效果。
  • Fetch/Doc 工具非常实用,能避免一些冷门的包产生大量幻觉。
  • 能自动修复 lint,这点对强类型语言非常友好。

缺点也有不少:

  • 鬼打墙,遇到卡点还是会反复加日志调试,基本上解决不了。我觉得第一蛋疼的事,AI 往代码里加了一大堆日志,而且还带了很多 emoji,怎么都删不完。
  • 遇事不决删代码,mock 实现。这是我觉得第二蛋疼的地方。他会冠冕堂皇地说「我们尝试一个最简单的实现」,结果就是给你 mock 掉,甚至留个 TODO 在注释里,太过分了。
  • 烧钱快,Claude Code 可以在半个小时内烧完十几刀;不过换成 Kimi K2 的话相对经济很多。
  • Claude Code 没法贴图片,在遇到布局、样式问题时,只能通过语言描述。
  • 在架构、时序等问题上能力尤其弱。在写 scrcpy 的实现的时候,实际上 scrcpy 的服务端运行在安卓设备上,然后需要服务端实现一个 scrcpy 的客户端,然后起一个服务端,推流给客户端(浏览器)。一开始我没搞懂这个逻辑,而 AI 一直想在浏览器运行 scrcpy,纠结了非常久。

一些技巧

补充上下文

Cursor 和 Claude Code 都支持 MCP,有两个我觉得必备DeepWikicontext7

DeepWiki 能让帮助 AI 快速梳理项目结构,理解包的使用,找到对应的 API 。它甚至提供了一个问答的功能,可以让 DeepWiki 的 AI 帮你找到项目中对应的实现。例如我这个主要是想参考 midscene 的 android playground,我就让他去读项目的 DeepWiki,理解 scrcpy 的实现。又例如,ya-webadb这个包中,DeepWiki 梳理出了这个实现的架构,这其实对我的理解也有很大的帮助。

至于 context7 则能够给 AI 提供对应版本对应包的 API 文档,极大地减少它出现幻觉乱编 API 的情况。

当然了,你可以直接贴网页地址,或者也可以通过 Cursor 的 @Docs 文档去指定对应的开发文档,来手动地给 AI 增加上下文。

另外,虽然 Agent 模式会自动选择上下文,你可以手动指定一些上下文来帮助它更好理解和解决问题。在 Cursor 中,你可以在代码、终端中按 Cmd + I 来添加多个上下文,或者按 @ 展开下拉框选择。

按照需求选择模型

主观来说 claude-4-sonnet >= gemini-2.5-pro > Auto > Kimi K2,我推测 Auto 应该是 DeepSeek-R1 或 GPT-4.1 之类。分享几个零散的观察:

  • claude-4-sonnet 和 gemini-2.5-pro 在 Cursor 上都能触发类似 Claude Code 的 、TODO 模式,Auto 则不能。
  • 接上条,如果你要做比较复杂的修改,建议还是用 claude-4-sonnet 和 gemini-2.5-pro 这两个。但是他俩特别慢,如果修改比较简单(例如只是简单改改布局,可以用 Auto)。另外,Auto 没有用量限制,在超出额度之后就只能用这个。
  • Gemini 不喜欢说中文,Kimi K2 会被上下文带偏开始说英文,如果对这个有要求建议还是用 claude-4-sonnet;Auto 则基本会说中文(所以我觉得他是 DeepSeek)。
  • Kimi K2 是显著便宜,能力也是显著地差,几乎完全没法独立解决问题。

能力强的模型一定贵而且慢,因此不可能成为万金油。Cursor 中的 Auto 可以算是一种万金油,在解决复杂问题时有一定的竞争力,解决简单问题时速度则很快,废话也少。

回到一开始说的三种情况,第一种情况我建议你用 Auto,或者 Kimi K2,或者 DeepSeek 也行,甚至最基础的 Tab 自动补全都已经很好用,因为只是帮你省打字功夫。后面两种情况,如果你要 vibe 到底,那基本只能选 claude-4-sonnet 或者 gemini-2.5-pro ,除了他们没人能看懂你的屎山。

约定好规范

Cursor 支持 cursor rules,也就是一个 markdown 文档,来告诉 AI 如何解决问题,或者代码的风格等。我没有一个完整的规则可以分享,但是网上有很多,可以自行参考。我提供一些思路:

  • 规定框架、偏好的包,避免引入多个类似的库。
  • 适当解释你的项目结构,例如服务端的结构,希望 model 层和 service 等分离等。
  • 代码规范,大小驼峰这一类,避免风格不一致导致强迫症难受。
  • 语言风格,我不喜欢让 AI 再总结自己的变更,因为基本上我需要 review 代码。

写 AI 友好的代码

这点我放到了最后,也是我觉得最难的。在规范良好、逻辑清晰的代码上,AI 的表现最好;而在一些老项目、屎山上,AI 很难做出有效的修改。其实所谓 AI 友好,其实也是对人友好,也就是「可读性」。把函数拆得原子化、加单测、加注释、简化逻辑,这些都是老生常谈的问题了。

最后

激动的心,颤抖的手,写到现在已是凌晨四点半。在分享技巧之余我想回答的一个问题是,「AI 编程是否能提升效率」。我觉得能,但是有限,而且很大程度上还是取决于使用者本身。一是 AI 并没有显著降低人的认知负担,你还是要理解、维护同样代码量的东西;二是在屎山堆积的业务代码里,很难找到 AI 大显身手的空间;三是使用者的认知水平、技巧决定了 AI 的能力上限。

当然,市面上还有很多工具,例如 Gemini CLI、Kiro 等,我还没来得及去体验;本次的过程也是从「新手」的角度去体验,我也知道有些工作流、MCP 之类的组合的高阶玩法,我也没有涉及,但我认为总体的体验应该并无大异。我并非想泼 AI 的冷水,而是要跟它磨合好,人和 AI 协作必然是主流,人自身的能力和认知会更加重要。

猫鱼周刊 vol. 073 Burnout 逃生指南

2025-07-20 16:08:45

关于本刊

这是猫鱼周刊的第 74 期,本系列每周日更新,主要内容为每周收集内容的分享,同时发布在

博客:阿猫的博客-猫鱼周刊

RSS:猫鱼周刊

邮件订阅:猫鱼周刊

微信公众号:猫兄的和谐号列车

私信:[email protected]

头条

摄于澳门的街头,墙面红色与绿色门窗、电话亭形成强烈对比,画面色调明快,两个小孩使用电话亭的场景很有故事感。用的是富士 C200 胶卷,200 度卷只有在大晴天才好出片,可以说这张照片真是天时地利人和。

这周也有一篇 TIL,是 Clauce Code 使用第三方 API 并优雅地完成多个供应商切换(如 Kimi K2 等)。体验了比较便宜的 Kimi K2 和原生的 Claude,Kimi K2 能独立完成一个小功能(感兴趣可以看这个 pr),而且是一遍过,但是在比较复杂和屎山的项目上就没能完成任务。原生的 Claude 的话除了有点小贵,没有别的怨言(跟 Kimi K2 比起来大概差一个汇率)。

文章

告别深夜的「不甘心」

原文链接

作者有意识地和「不甘心」和解,主动选择早睡,把更好的精力留给第二天,从而达成早睡的习惯转变。

过去,深夜不睡,与其说是在享受手机里的内容,不如说是在表达一种无声的「不甘心」。如果第二天是工作日,深夜刷手机便成了一种拖延,一种对个人时间的固执挽留,好像只要不睡,属于自己的这一天就不会那么快结束,明天的工作也就不会那么快到来。

我感觉「不甘心」的根源是上班耗费了一天中太多的自由时间和精力,尤其是如果工作没有完成了什么事情的满足感,那这种感觉尤为强烈。另外也有可能是因为在写字楼里由早待到晚,感觉不到时间的流逝,比较容易造成失眠。前段时间住院和在家养病的时候,我短暂地形成了早睡的习惯。一开始是住院的时候早上六七点护士就开始查房,倒逼我早睡,到后面出院回家,因为在家也比较无聊所以也经常很早就睡了。

我在「不甘心」的时候经常漫无目的地刷购物软件、刷短视频,最后的结果就是第二天依然筋疲力尽,可能还伴随着另一笔冲动消费。我觉得其实大家都明知「不甘心」是没有用的,那部分偷来的时间就是「垃圾时间」,但就是控制不住,那很有可能就是 burn out 了,正好引入下一篇文章。

Burn out 逃生指南

原文链接

Burn out(职业过劳/倦怠)是一种由慢性工作压力导致的症候群。

每天下了班都在想着工作,每天都不想上班。这个时候,你就知道这是 burn out 了。

作者提出了几个建议来应对 burn out:

  • 提升效率而非延长工时:固定 8 小时工作制,避免加班增加出错风险;专注于优化工作流程而非延长时间。
  • 科学安排优先级:按实际重要性(而非他人催促频率)排序任务;质疑不合理截止时间(问清“为谁服务?不做有何后果?”);及时同步进度变化。
  • 大项目推进策略:用笔记软件(如 Roam Research)每日记录进展/问题/责任人;实现进度透明化,转化心态为“已解决 X 问题,迎接新挑战”。
  • 异步沟通管理:集中时段(如早/午饭后)批量处理消息,避免消息碎片化打断深度工作。
  • 结构化工作计划:制定周计划(核心任务)和日计划(具体事项);减轻面对长任务清单的焦虑感。
  • 每日小成就法则:确保完成至少 1 件具体事项(如解决阻塞点/实现需求);用满足感对冲挫败感。
  • 投资长期价值:从救火模式抽身,投入监控优化/自动化/根本性解决高频问题;打破“越忙越忙”循环。

我最近也在经历 burn out,我觉得可以补充一点就是「向上管理」。如果你的领导比较可以讲道理,不妨跟领导敞开说一下想法,也许领导能够帮你解决一些问题,毕竟这也是领导的工作之一。

三条线:聊聊期望、现实与我们内心的落差

原文链接

跟第一篇文章是同一个作者(没想到吧,居然串起来了),讲的是他跟团队成员关于期望和心理落差的交流。

降低主观预期,清晰地认知自身能力的边界,并依据这个边界来为自己设定要求和目标。

这算是上面提到「跟领导敞开说一下想法」的例子,在这个例子中,领导通过闲聊、交流心得的方式去尝试解决问题,当然肯定也可以通过调整工作等方式去帮到你。

回到文章的主题,期望、现实和落差,作者提到有两种选择,一是调整自己的主观意愿,二是增大自己承受落差的能力,后者是比较难的。

我分享一点自己的经历。第一个是关于「调整自己的主观意愿」的,小时候学围棋,去参加围棋比赛,输了我就哭,觉得我一定要赢,每一场都要赢。当时我爸就跟我说,「胜败乃兵家常事」,比赛、竞技本就不是一定都会赢的。这算是人生中很重要的一课,后来我参加过很多比赛,游泳的、奥数的、英语的,以及后面大学参加的各种比赛,也没有再因为失利而非常沮丧。第二个是「承受落差」的,大学的第一年,因为我的基础挺好,对专业也很上心,在校内外比赛也拿了一些奖,成绩也不错,评奖学金的时候加分挺多。没想到公示的时候第一名的分数竟是我几倍之多,我当时觉得很沮丧,我离优秀的人竟这么远,我还远远不够卷。别看我现在把这件事说得如此云淡风轻,当时引起我连续几个学期的自我质疑,是不是我不努力,是不是我方向错了,是不是我能力就不行。后来才知道,那位同学确实很努力也很优秀,而我也找准了自己的方向和节奏,继续走着自己的路。

写着写着,我觉得其实这两种方式本质上都是妥协,区别是一种是战略性地放弃,另一种是坚持和理性调整目标。

想法

被平台绑架的创作

最近小红书有一个「摄影视频笔记」的活动,发布对应形式的视频可以获得流量。

现在创作很大程度上是被平台绑架了的。各种话题、热点、流量池,要迎合平台算法才能获得曝光。社媒平台同质化的内容非常多,同一首 BGM、同一个梗在短时间内会反反复复刷到,遇到它就起鸡皮疙瘩。

诚然,大多数情况下,有限定范围的「命题作文」肯定比较好发挥,这是平台的初衷,给创作者提供创意。

项目

obsidian-minimal

kepano/obsidian-minimal - GitHub
项目链接

一个极简风格的 Obsidian 主题,非常适合写作。

RapidRAW

CyberTimon/RapidRAW - GitHub

项目链接

轻量化的 RAW 编辑工具,有很基础的 RAW 编辑功能(调色、锐化、降噪、裁剪等),也支持蒙版等,甚至还能接 ComfyUI 做 AI 编辑。

claude-code-router

musistudio/claude-code-router - GitHub

项目链接

一款强大的工具,可将 Claude Code 请求路由到不同的模型,并自定义任何请求。

跟前面提到的方法不同的是,这个通过逆向了 Claude Code,把请求路由到其他模型,并且支持 OpenAI 请求格式的供应商和模型。

最后

本周刊已在 GitHub 开源,欢迎 star。同时,如果你有好的内容,也欢迎投稿。如果你觉得周刊的内容不错,可以分享给你的朋友,让更多人了解到好的内容,对我也是一种认可和鼓励。(或许你也可以请我喝杯咖啡

另外,我建了一个交流群,欢迎入群讨论或反馈,可以通过文章头部的联系邮箱私信我获得入群方式。

Clauce Code 使用第三方 API 并优雅地完成多个供应商切换(如 Kimi K2等)

2025-07-17 20:33:51

Claude Code 除了登录 Claude 账号使用,还可以通过设定 ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN / ANTHROPIC_API_KEY 来使用第三方的 API 或者其他兼容 Anthropic 接口格式的模型。

一般的使用方式:

ANTHROPIC_BASE_URL=<YOUR_URL> ANTHROPIC_AUTH_TOKEN=<YOUR_TOKEN> claude

也有用以下这种的,不建议,会把环境变量留在当前会话里:

export ANTHROPIC_BASE_URL=<YOUR_URL>; export ANTHROPIC_AUTH_TOKEN=<YOUR_TOKEN>; claude

于是我们可以写一个简单的 zsh 脚本来实现切换多个供应商的功能。

function claude() {
    # 定义不同服务的配置
    local base_url=""
    local auth_token=""
    local api_key=""

    case "$1" in
        "kimi")
            base_url="https://api.moonshot.cn/anthropic"
            auth_token="YOUR_MOONSHOT_KEY"
            shift  # 移除第一个参数
            ;;
        "aihubmix")
            base_url="https://aihubmix.com"
            api_key="YOUR_AIHUBMIX_KEY"
            shift  # 移除第一个参数
            ;;
        "anthropic"|"")
            # 默认或显式指定 anthropic
            base_url="https://api.anthropic.com"
            auth_token="YOUR_ANTHROPIC_API_TOKEN"
            if [[ "$1" == "anthropic" ]]; then
                shift  # 移除第一个参数
            fi
            ;;
        *)
            echo "未知的服务: $1"
            return 1
            ;;
    esac

    # 设置环境变量并调用实际的 claude 命令
    if [[ -n "$auth_token" ]]; then
        ANTHROPIC_BASE_URL="$base_url" ANTHROPIC_AUTH_TOKEN="$auth_token" command claude "$@"
    elif [[ -n "$api_key" ]]; then
        ANTHROPIC_BASE_URL="$base_url" ANTHROPIC_API_KEY="$api_key" command claude "$@"
    else
        ANTHROPIC_BASE_URL="$base_url" command claude "$@"
    fi
}

使用时,只需要输入 claude kimi 或者 claude aihubmix 就可以切换不同的供应商,同时还能支持 claude 原来的各种命令参数。

其他方式

这种方式只能支持 Anthropic 接口格式的 API,如果你的供应商是 OpenAI 格式的,可以使用 musistudio/claude-code-router这个项目,同时还支持指定不同情况下使用的模型。但是毕竟这个方式是通过逆向接口、本地起代理来实现的,用起来并非 Claude Code 正宗的体验,也不是很优雅。

通过我这种方法,如果使用 aihubmix 或者 anyrouter 这种支持 Anthropic 接口格式的服务,就可以获得正宗的 Claude Code 体验啦。需要注意他们对应的接口不一定跟 OpenAI 格式的相同,具体可以参考使用文档。另外,aihubmix 使用 ANTHROPIC_API_KEY 而不是 ANTHROPIC_AUTH_TOKEN,脚本里已经做了兼容。

References

Claude Code settings - Anthropic
Kimi K2 详测|超强代码和 Agent 能力!内附 Claude Code 邪修教程
AiHubMix Documentation Hub

猫鱼周刊 vol. 072 可持续的周刊作者

2025-07-13 23:08:16

关于本刊

这是猫鱼周刊的第 73 期,本系列每周日更新,主要内容为每周收集内容的分享,同时发布在

博客:阿猫的博客-猫鱼周刊

RSS:猫鱼周刊

邮件订阅:猫鱼周刊

微信公众号:猫兄的和谐号列车

私信:[email protected]

头条

摄于中山公园。草坪上很多小孩在玩耍,有人吹泡泡,有人追泡泡,非常有活力。

其实这趟出门是为了把之前那卷胶片拍完。拍胶片有一种「车马慢」的感觉,与数码相机举起就拍、马上回看不一样,胶片相机需要过片、手动对焦,在冲扫之前都是盲盒。刚开始玩的时候觉得 36 张(实际上能拍到 37、38 张)很快就能拍完,结果每一卷至少都要拍一个月,出门至少两三趟才拍得完。就算在拍数码的时候,也开始习惯按快门前再多想一下,想象一下出片,而不是拍完下意识去按回放键。

这周也产出了一篇 TIL 文章 macOS 命令完成后展示一条通知。TIL(Today I Learned) 算是一种非常短篇的文章形式,有点类似「每天一个冷知识」。这种文章写起来还挺有趣,没有什么创作瓶颈,内容也不需要太多打磨,随笔记录、随手发布一下就行,后续可能还会多发这种。

文章

排位垫底?他教你如何站上领奖台!

视频链接

F1 官方账号剪的霍肯博格英国站登台集锦,又一个 F1 的传奇故事。我当时在朋友圈是这么写的:

如果你觉得你的生涯很艰难,不妨看看在第 239 场大奖赛才登上领奖台的霍肯伯格(甚至开的索伯,从第 19 位发车,而且是雨战)。

如果大家有看 F1 电影,这简直是电影剧情!

写代码从来不是瓶颈

文章链接

作者认为写代码本身从来不是软件工程里的瓶颈,而:

真正的瓶颈过去是、现在依然是代码审查、通过指导和结对编程进行的知识传递、测试、调试,以及协调与沟通中的人力消耗。

LLM 的出现确实让写出「能用的代码」更加简单,甚至连外行都可以写出比较简单的产品。比较有趣的是,作者提到的「瓶颈」,正巧就是我在工作中相对比较讨厌的内容,看来这几年这些方面有点进步但是不多;而「写代码」则是我最喜欢的内容,甚至愿意加班在没人的时候听着歌把键盘抡冒烟,这算是纯享的 moment。

搁浅的周刊

最近在整理订阅源的时候,发现有几个之前关注的周刊的停止更新了,有的一声不响停了,也有的留下了一篇通知:

两个作者都有提到时间和精力的问题,以及创作的压力。从我的经历来说,每周固定要花费两三个小时左右来进行周刊本身的编写,这是显性的时间精力成本;除此之外,每天我固定会花半个小时左右(虽然很大程度上是上班的时候摸鱼)来消费我的信息源,这算是隐性的成本。至于创作压力,我对周刊本身其实没有太多要求,从过往内容看有点「大小周」的样子(一周字数多,一周字数少),字数平均有两千字左右。有时候如果实在没什么料,或者周末出去玩了,我就会鸽一期(这种情况还挺多)。

所以说,如果要成为一个「可持续的周刊作者」,有几点一定要想清楚:

  • 阅读有趣的文章、消费各种新资讯应该是你原本就在做并且乐于其中的事情,而不是为了成为周刊作者才做的事情
  • 想清楚你的「回报」是什么,是阅读量、关注数,抑或实质的金钱收入?很大情况下,你能获得最好的「回报」就是分享欲的满足。
  • 一定不要为更新而更新,这不是一份合同制的工作,这只是兴趣罢了。

最后,坚持得下来固然值得称道,但弃坑也是一个合理的选择,尝试过后如果你发现有更有价值的事情值得你的时间和精力,那当然是投入更好的事情啊。

项目

hubproxy

sky22333/hubproxy - GitHub

项目链接

一个结合了 Docker 镜像加速和 GitHub 加速的服务,部署起来简单,没有任何依赖。

我部署了一个放在 Claw Cloud Run,相当于零成本白嫖,还不错。

工具/网站

MCP Servers 市场

网站链接

LobeChat 团队推出的 MCP Servers 市场。我知道这类产品已经烂大街了,刚好碰上这个,就推荐下吧。

我之前对 MCP 期望很高,我觉得它会是通用人工智能的「最后一公里」。又过去一段时间,国内支持了 MCP 的日常服务还是不是很多,至少还没有很现象级的 MCP 服务出现。这其实是很多服务的架构决定的,如果一个服务它本身就没有「开放平台」,那它出现 MCP 服务的可能性也很小了。

最后

本周刊已在 GitHub 开源,欢迎 star。同时,如果你有好的内容,也欢迎投稿。如果你觉得周刊的内容不错,可以分享给你的朋友,让更多人了解到好的内容,对我也是一种认可和鼓励。(或许你也可以请我喝杯咖啡

另外,我建了一个交流群,欢迎入群讨论或反馈,可以通过文章头部的联系邮箱私信我获得入群方式。

macOS 命令完成后展示一条通知

2025-07-08 17:44:08

执行以下命令可以展示一条通知:

osascript -e 'display notification "The command finished" with title "Success"'

所以在 .zshrc 中定义一个函数:

function notifyMe () {
  if [ $? -eq 0 ]; then
    osascript -e 'display notification "The command finished" with title "Success"'
  else
    osascript -e 'display notification "The command failed" with title "Failed"'
  fi
}

在运行某些需要比较长时间的程序时,执行以下命令:

> some_program; notifyMe

在执行完便能收到一条通知:

甚至可以设置通知音效(见下面第二条链接)

References

How to Use macOS Notifications with Command-line Programs – Small Sharp Software Tools
MacOS: notify when the terminal command is finished