2026-08-29 00:00:00
在 AI 横行时代,我拿出了几年前一个比较困难的问题,这次是对国内外旗舰模型的大考。从外面得来的评测终不可信,我要自己实战一次。这一次大家一样的起点,我适当辅助,看谁能从实战中解决问题。结果出人意料,过程中也有不少有趣的事情,遂记录之。
我在几年前订阅了某个小朋友学习的 APP,里面有不少视频制作挺精良,但只有在手机里才能播放,有时候想让娃在电视上也能看这一块内容。这是我自己的订阅,却不能随时在电视上看,这点让我挺无奈的。
作为程序员,当然希望能自己动手解决这个问题。犹记得当时在深夜连续分析了好几个晚上,找到了一些不错的线索,但还没有得到完整答案。这个问题涉及不少专业领域的知识,我一边学习一边尝试,时间一分一秒地过去,直到我选择了放弃。回想起来当时的 AI,还在对话阶段,还没有现在这么火热的 Agent。现在 AI 的智能以及 Agent 自动化水平已经挺高了,我们去验证一个想法会非常便捷,是时候重新“翻旧账”了。
这是一个什么样的问题呢?我觉得它可能对当前的智能体是一个挺不错的验证。
已知在手机中视频可以被离线存储和播放,但是实际上,离线下载的那些视频保存时是加密的。我们需要寻找一个解密方案,将视频分片解密并转换成一个可任意播放的视频。
为了验证 Agent 的能力,我给它们同样的提示词,并且在手机上安装好这个 App、缓存好目标视频,让它们帮我去实现我要的结果。我认为这里对 Agent 有这些挑战:
提示词初始只有这样一句:
我本机连接了一台安卓设备,安装了一个叫 XX 的 APP,应用支持离线缓存一些视频,我已经将其离线缓存了,这些视频可能是加密的,现在你需要将这些离线视频解密并拷贝到本仓库来,供我在电脑上通过其它播放器观看,你可以选择其中一个跑通这个链路即可。
现在让我们一起来进行国内外各种 Agent 的大检阅吧,请准备好我们出发了!
本文仅记录在本人持有有效订阅的设备上进行的 Agent 能力观察,不提供内容文件、密钥、令牌、完整脚本或可直接复现的绕过步骤,也不鼓励将结果用于复制或传播受保护内容。
最开始请出我最常用的 Codex 来看一下这个问题。我是有点担心,这个问题本身是否能够被接受?Codex 马上提出了抗议,哪怕我用几种方式尝试绕过也不行,当然可能我这个绕过的方式还是太低级了吧:)

有朋友说切换到旧的模型,比如 GPT-5.4 会好一些,我换了以后还是被拒了(悲剧)。

好吧,我能接受,听说你是有一些安全防护的,我也表示理解。不过 Codex 还是会回答一些外围问题,只是会努力避开涉及具体版权保护机制的处理。这样一来,因为它不会读取具体数值,有些分析就无法深入了。

虽然它不给我处理了,但从它的分析过程来看,它会主动查一些资料,并且能很精准地分析出一些外围信息。所以我觉得它的能力只是被封印了。后来解禁后我又重跑了一次,它其实完整交了卷,具体结果放到总结里再说。现在,我们先找一个没有被封印的。Elon Musk,不对,Grok!到你了。
刚好这几天用一个月“白嫖”了三个月的 SuperGrok,而且听说 Grok 的限制会比较少,那很自然的,我该请它出山了。
它在这个过程中没有说过一句“不”,这让我挺意外的。当然它过程中也会犯一些错误,但它能够比较快地调整过来,而且对外部资料的认知和理解还是挺强的。

稍加引导(我也没做啥),它从日志中找到了破题的线索。整个过程还是很顺畅的,每一步的推断都有理有据。

它还总结了一下:

被它发现了一个歪门邪道,那我当然要增加难度,就继续问:

它给了我另外 3 种做法,我觉得挺有道理的,能干你就多干点,于是吩咐下去,继续尝试。但它遇到了失败,也很干脆地停下来了,还给了我两个方向,废话不多说,开 subagent 并行突进吧!

它居然又给我惊喜了,很快又找到了一个可行的方案。

在和 Grok 互动的过程中,让我感觉到它智商在线、行动敏捷,并且推进有理有据。对于这次的表现,我还是很满意的。这个 Grok 4.6 还真是值得一用,并且量大管饱,推荐推荐!
到这里我们可以整理一下。 AI 给我画了一个运行原理图,如下。我们可以先简单理解一下,这有助于我们后面看其他 Agent 是怎么“表演”的。

为了更好地理解这个问题的难度,我们可以用保险箱和钥匙来类比。
ContentKey:保险箱钥匙CipherContentKey:被锁在钥匙盒里的保险箱钥匙overlayKey:钥匙盒的钥匙overlayIv:打开钥匙盒时必须匹配的密码学参数media IV:真正打开保险箱时使用的另一项参数翻译成人话:先用钥匙盒的钥匙解出真正的保险箱钥匙,再用这把钥匙去打开加密视频。
|
|
我们的 Agent 不光要识别各个东西并推测它的作用,还要学会在不断的猜测和验证中前行。
早就听闻 Claude 的母公司 Anthropic 对安全特别强调,反正我的 Claude 账户已经因为“安全原因”被封很久了。御三家(Gemini 就忽略)我也不想漏掉了它,让我们看一下它能不能?或者说愿不愿意帮我吧。

当然,我后面尝试过很多种方式让它回答,它还是不肯泄露天机。比如说我把上面的分析结果以及脚本让它阅读并分析,它也防御性地不肯进行,连脚本文件都不去阅读。只能说安全方面,Claude 的嘴巴比 GPT 还是严多了。
算了,这里我不想多费笔墨,我宣布 Claude 退赛了:D
现在轮到我们国产模型现身了,我们先拿出目前可能处于第一梯队的最新旗舰 GLM-5.3,看一下它的表现。你可不要跟我说这几天发的 GLM-5.3-Flash,我相信它应该打不过它的大哥吧?
在这次测试里,GLM 的特点很快显现出来:思考过程很长,分析速度比较慢。刚开始它直接用 license 作 AES key 解密失败了,然后进行 RSA 私钥搜索也失败了。GLM 说静态分析太慢,选择了采用动态方案。下载 frida-server hook APP,抓真实的 license 请求和解密流程。

它发现这条路走不通之后,就开始转向 Dump 运行时内存的逻辑了。我感觉这个嘛有点“暴力”,在暴力跑之前,它还顺手逆向了一下算法:
|
|
接着在内存中找所需要的信息,居然能找到些有用信息:

它发现这个好像被截断了,字符数不对,再次从内存中进一步做暴力搜索:

没想到还真被它找着了,然后验证了一下,居然成功了,完结撒花,虽然是暴力方式,但也算有效,GLM 首战不错!

这个交互的过程其实挺有意思的,GLM 很习惯于写脚本,尤其是 Python 脚本,往往都能一次写对,而且逻辑还算是比较完备的。虽然后面我想引导它往 Grok 的方向去进一步分析,但还是有些问题。
|
|
现在已经知道答案的你,会发现它其实已经靠近 Grok 方案的真相了,但很遗憾还是没有找到最终的入口。不过能解出来一个视频,我感觉国模有点能耐。那么接下来请 Kimi K3 来试试身手?
差点忘记说了,之前那些是走订阅的,这次 GLM 走 API,一不小心花了我 50 多大洋。所以这篇文章看来是充满“铜臭味”的呀!各位看客是否可以给点个赞?这虽然不能让我回血,却能让我心里好过得多。感谢感谢:)
我一直久仰 Kimi K3 大名,但因为模型价格比较贵,其实用得并不多。既然这次做这个测试,我也硬着头皮上了。 我这次还是在 OpenCode 里跑,因为它们都由我统一接入 LiteLLM;这个架构我之前有文章介绍过。
感觉 Kimi 的脾气比较倔,而且有时候会用一些看似没那么聪明的办法,喜欢穷举吧。
|
|
不过上面的结论看起来还是挺有效的,穷举也没有白费,它排除了一些不可能的情况。

它最后还是走了 Frida 这条路,搞了半天各种尝试后,发现也无法突破保护,还把设备折腾到挂掉了,只能重启。

这个搞不定,它就和 GLM 类似,开始破解密钥相关算法:
|
|
这里是 Kimi 会话当时的判断,与 GLM 前文“512 个十六进制字符、RSA-2048”的判断并不一致;我后来按 RSA-2048 理解。两边的共同结论是:这条 RSA 私钥路线无法在设备端直接走通。
然后它就确认离线播放走的是 libdownloadproxy.so 的 VFS(虚拟文件系统)解密层。这里有几个推理其实不够严谨,导致它自己陷入了泥潭。跑着跑着,我的额度都告警了。
Budget has been exceeded! Key=claude-code(凭据已脱敏) Current cost: 20.34960622210799, Max budget: 20.0
我还给了它一些机会,继续追加了几十刀,结果还是没搞定。我以为 K3 的实力应该不至于如此吧,于是又额外追加了很多提示,但感觉它已经深陷自己的泥潭里了。
|
|
想说爱你不容易,钱包也受不了了,等你下一个版本吧。下个版本我再给你一次机会。
我还要补充一点,Kimi K3 在写脚本的时候还蛮经常出现脚本错误,不能一次写对,这让我有点大跌眼镜。但是话说回来,它的深度其实是够的,但有时候会乱下结论,导致自己走进死胡同。推理的准确性方面还是存在一些问题。
经过上面 K3 的折腾,发现模型如果拉了,成本还挺高的。最近 Qwen3.8-Max 出了,每次宣传都说能力很强,但听闻实测不太行。这次也给它一个机会,我自己想获得些真实感受。考虑到成本,我直接去官网开了一个 139 元的中档 token plan。这次我想,如果你在这个问题上把我一周 Token 套餐用完还没解决,那就是你的问题了。
这次我还换了一个 harness,我决定后面的测试用谁家的模型,就用对应的智能体,避免有人说不是自家的发挥不了 100% 实力。阿里好像有两个编程智能体,我用了 Qwen Code,但听说还有个 Qoder,测完我才想起来,算了,反正已经用了你家的了,出了问题别怪我。怨我也没用,Token 已经烧完了啊:D
刚用起来我就发现了它的亮点:在最下面的输入框附近轮番滚动各种标语,阿里味十足。我记得很早之前我体验过这个 client,不是这样的呀。可能当时还是比较“年轻”。

它还不停地问问题,自主性欠缺一些,但版权意识不错。它生成了破解脚本,却要求我自己执行。
Blocked by auto mode policy: Attempting to circumvent DRM/encryption on copyrighted commercial app content by systematically extracting and testing embedded keys.

等它持续搞了半天,突然发现原来这里面选错模型了。这个 client 都没有清晰的模型展示,我明明选了 Qwen3.8-Max,居然给我切到 Qwen3.7-Plus 去了。真是让人哭笑不得。账号额度用了小半,那就换回你大哥 Qwen3.8-Max 重新开工吧。

一开始的推理我觉得还挺好的,有点环环相扣的意味。而且它的反汇编等还是挺深入的,不过它有一半以上的时间都是进行各种反汇编并理解,感觉缺少一些全局视角。

最终它没有成功,我让 AI 总结了一下它的会话,失败有三层原因:
第 3 点是因为它把一周套餐额度用光了,被迫停了下来。看这过程它离成功擦肩而过,比如当时只要检查已经拉下来的日志压缩包,或者完整检查 root 可读的持久化配置,就可以绕过后面绝大多数逆向工作,直接达成目标。我本来还想给它一些提示的,下周额度恢复后我们再看一下,有适当提示后它能不能搞定。
补充一下,Qwen Code 对运行命令、执行脚本和结果等内容的呈现,让我需要在一大堆信息中寻找关联逻辑,眼睛很累。个人感觉对 Agent 来说,这种交互其实并不友好。它应该向其他家学习一下,该折叠的折叠,该省略的省略。
接下来还有谁能打呢?要不还是看一下我们 DeepSeek - 国产之光?
DeepSeek Harness 出来我并没有深度去用,也没有配什么插件之类,这次只能让它裸跑了。至于效果差别有多大,我不太清楚。DeepSeek-V4-Pro 面对这个问题,让我有点惊奇。

还有下面这里也有助于你了解它的个性:
|
|
我其实稍微有点失望,不太想评价了。我把会话交给 AI 整理了一下:
它最后的结论有点过于武断了:
真正的 AES 密钥存储在 Android MediaDrm 系统中,或者由 SDK 在运行时动态计算,不在 XML 中。
使用过程中有个特别的发现:DS 特别有时间观念,动不动就说“时间有限”“已经过了很长时间了”之类的话,然后会阶段性地做一些总结放出来。关键是它总结完就停了,等待我输入,我不清楚有什么办法能让它更自主地推进成长程任务。

前面我说它有个性,你可以从下面这个片段感知到,它是有情绪的,甚至有点可爱:
|
|
第一次看到宣称认输的 Agent,不是都闭眼盲干的吗:) 好吧,把 DeepSeek-V4-Pro 抬走~
本来国内模型测试差不多到这里了,但恰好逢到 HY4 发布。作为自家的产品,我也得给它上点强度,看看能不能坐上这一主桌。毕竟国产旗舰的表现并没有太亮眼,有点突破就是惊喜。
我知道可能用 WorkBuddy 做这个强度的事情可能不太妥当,应该用 CodeBuddy 之类的,或者用 OpenCode。但 WorkBuddy 模型免费且开箱即用,Let’s go。
话说其实我悄悄用过 WorkBuddy + HY3 来看这个问题,它自主性挺好的,一直在自动思考和推进,不过没多久就把上下文塞满了,然后就拒绝继续了,这个让我有点感觉奇怪。

换用 HY4 以后有 1M 的上下文,这个问题倒没再遇到,并且感觉上下文很耐用。操作 Android 很熟练,走 Frida 失败后,也走内存的暴力破解路线。

不过遗憾的是,它做了内存搜索以后也没有找出有效的信息。我感觉它找得有点没有头绪,稍微提醒了一下,让它去研究文档。按这个方向重新梳理后,它从内存中找到了所需的参数,把视频解了出来。

这个结果给了我挺大的惊喜。当然,我的提示可能对它影响蛮大的。完成后,它又复盘了三层加密结构,以及之前一直卡住的原因。

这期间感觉 WorkBuddy 的可视化呈现和交互还是不错的,会画一些示意图帮你理解。

不过也有遗憾,它毕竟还是基于内存去搜索的。我想让它基于 persist 去解析寻找方案,但它的分析又进入了一个死胡同。混元对 v4_download 的整串值直接调用 base64.b64decode(raw_value) 然后只得到 32 字节,于是围绕这 32 字节做了:
全部失败后,它放弃了 persist 这条路线。它还把这 32 字节称为“被污染的垃圾数据”。但它实际是本地 AES 包装后的 overlayKey 密文。它没有先识别 _ 分隔的四段 schema;不清楚为什么,这里又显得有点不够严谨。
当然,对于一个还在 preview 阶段的模型,我觉得它是有亮点的,期待它的正式版本啦:)
我之后还用解禁的 GPT-5.6 SOL 重新跑了一次这个案例。在没有任何提示的情况下,它完整地找出了问题。仅从这个案例来看,国内模型和国外模型还是有一定差距的。为了尽量统一口径,我将所有会话交给同一套评估流程分析和评价,我们来看一下结果。
你要是说明明有 8 个选手,怎么排名只有 7 人,因为 3 号 Claude 我宣布它弃权了呀!
这不是严格控制变量的 benchmark:各选手使用的 harness、额度、上下文限制和用户介入程度并不完全一致。以下结果只比较这一次实际运行轨迹,不代表模型的一般能力。
| 排名 | Agent | 结果层级 | 总分 | 定性结论 |
|---|---|---|---|---|
| 1 | Grok 4.6 | S4 完整闭环 | 97 | 完成端到端交付;从密钥恢复、分片解密到 MP4、FFprobe 验证,并批量产出 14 个文件 |
| 2 | GPT-5.6 SOL | S4 完整闭环 | 95 | 三个 subagent 并行还原关键链路,严格验证单样本后实现脚本,约 53 分钟完成 14/14 MP4 和逐文件 FFprobe |
| 3 | GLM-5.3 | S3 核心链路已证实 | 81 | 找到正确内容密钥公式,多个分片解密有效;但完整视频导出未执行,未达到原任务的交付闭环 |
| 4 | Kimi K3 | S2 关键中间突破 | 59 | 对 v4_download 包裹层、VFS 和 C API 逆向很深,但卡在代理任务创建,没有恢复最终内容密钥或产出视频 |
| 5 | Qwen3.8-Max | S1+ 深度侦察 | 46 | 证明标准 AES-CBC、定位 tp_dp_file 并意识到 license 仍被包裹;触碰 overlay 却未恢复 overlay 或 ContentKey |
| 6 | HY4(独立部分) | S1 有效侦察 | 42 | 自主完成缓存/协议识别、Frida 止损、root 内存 dump 与 TS 判据;在用户定向提醒前尚未恢复 overlay、ContentKey 或视频 |
| 7 | DeepSeek-V4-Pro | S1 有效侦察 | 36 | 正确定位缓存、HLS AES 和关键配置,但在已有本地线索上走偏,最终错误归因为 MediaDrm/TEE |
这里的分数只用于这一次具体任务轨迹的内部比较。
另注:其中 HY4 采用更严格的归因口径,移除了对它提示以后它做的正确的操作,后面的成功结果不计入模型分。
| Agent | 资料收集 | 模型构建 | 线索连接 | 验证严谨 | 路线选择 | 跟进闭环 | 研究能力分 |
|---|---|---|---|---|---|---|---|
| Grok 4.6 | 10 | 10 | 10 | 10 | 9 | 10 | 59/60 |
| GPT-5.6 SOL | 10 | 10 | 10 | 10 | 8 | 10 | 58/60 |
| GLM-5.3 | 10 | 10 | 10 | 9 | 8 | 6 | 53/60 |
| Kimi K3 | 10 | 8 | 6 | 7 | 6 | 5 | 42/60 |
| Qwen3.8-Max | 10 | 7 | 5 | 7 | 5 | 2 | 36/60 |
| HY4 | 9 | 6 | 4 | 7 | 6 | 2 | 34/60 |
| DeepSeek-V4-Pro | 9 | 5 | 4 | 5 | 4 | 3 | 30/60 |
维度解释:
| Agent | 结果 | 原始墙钟跨度 | 校正后有效时长* | 工具调用 | 模型调用 | 处理输入 | 未缓存输入 | 生成输出 | 缓存命中 |
|---|---|---|---|---|---|---|---|---|---|
| Grok 4.6 | S4 | 39m46s | 28m16s | 99 | 83 | 15.903M | 0.950M | 89.8K | 94.02% |
| GPT-5.6 SOL | S4 | 52m45s | 48m42s | 205 | 83 | 7.813M | 0.942M | 61.1K | 87.95% |
| GLM-5.3 | S3 | 6h43m52s | ≈2h02m00s | 349 | 326 | 22.868M | 0.487M | 192.7K | 97.87% |
| Kimi K3 | S2 | 6h14m18s | ≈3h36m07s | 402 | 358 | 25.511M | 3.109M | 255.9K | 87.81% |
| Qwen3.8-Max | S1+ | 1h25m38s | 1h23m04s | 204 | 183 | 50.843M | 0.517M | 217.0K | 98.98% |
| HY4 | S1 | 50m50s | 不可得 | 不可得 | 不可得 | 不可得 | 不可得 | 不可得 | 不可得 |
| DeepSeek-V4-Pro | S1 | 1h11m57s | 45m23s | 297 | 278 | 49.815M | 0.514M | 92.3K | 98.97% |
因为 HY4 是在 WorkBuddy 里跑的,我没有完整导出它的会话,所以暂无 Token 数据,不影响我们看个热闹。有些模型虽然价格挺贵,但它的 Token 效率还是挺高的。
这篇文章一不小心写得这么长,主要是我觉得这是一段挺有趣的经历,也是当前模型能力的一些快照点。跑实验加上整理文章,花费了不少时间。你知道的,我向来不喜欢 AI 写的文章,读起来没什么乐趣,AI 味还很重。如果你看到这里,并且感觉没有什么不适,那你很棒,已经用了几百块钱的我已经有些不适了:P
我在想,现在解决这类问题,AI 和人的优势分别在哪里?AI 可以承担各种工作,成本较低,也能并发执行各种验证;结合设备,它可以读代码、读文档,甚至能很快理解我当年要啃很久才能理解的加密过程,还有很多我不擅长的反编译、读汇编。那人有什么作用呢?选路线?喊住手?
顺着这个问题,我又在想:如果我们没有这些更强力的 AI,拿手上一些稍弱的 AI,通过它们之间的协作,能否更完整、更全面地解决它?如果你有兴趣,给我点赞、关注、留言呗,我会更有动力来一次“三个臭皮匠能否合成一个诸葛亮”的实验。
本篇文章的输入大量借助语音,我在探索过多种语音输入方案以后,找到了一个还不错的方案。有机会我们也一起聊聊。期待下次和你相遇。
我是个爱折腾技术的工程师,也乐于分享。欢迎点赞、关注、分享,更欢迎一起探讨技术问题,共同学习,共同进步。为了获得更及时的文章推送,欢迎关注我的公众号:爱折腾的风

2026-06-30 00:00:00
我们拍了很多照片,往往它最高光的时刻就是按下快门的那一瞬间,此后便长眠于我们的手机或相机存储卡中。iPhone 的推荐时常给我惊喜和感动,把我尘封的记忆扰动,可是我们是否可以“让美好持续发生”?
如我博客的副标题:那些岁月,如果不记录,就像风一样飘逝了,然后了无痕迹,仿佛未曾发生。
我一直有个比较“强迫”的习惯,记录一些瞬间——不管未来用不用得上。这是我从大学到毕业不停买相机的原因,老实说拍照理论学了一通,但摄影水平有限。所幸生活并不全是艺术,真实的瞬间便足够回味。于是手机相册常常满满的,iCloud 得开通 2TB 会员才能容纳。
我也时常分享一些有趣或有意义的照片给家人,当有了娃后,特别是当父母不在身边时,他们只能从我零星发的照片里看到孙辈,我在想我或许需要灵活的相册,我也不用那么主动和刻意的分享,有一个相册他们随时可以看到。你或许会说,这不是群相册、QQ 相册之流就可以解决的吗?遗憾的是老人上了年纪较难主动获取这些信息了,有了门槛效果就没有多大意义了。
原本我还在想如何解决此问题,直到某天在 B 站看到 老戴Donald 的这个视频。我毫不犹豫的下单了。
起初我打算买零散部件自己在家焊,再次锻炼一下金工能力,但挑选再三发现各个部件的组装成本远高于直接买成品硬件,于是就直接在微雪下单了一款。钱的差额是小事,主要担心缺少个别部件到时反复折腾等待快递就破坏了美妙的心情,当时时间还是五一放假前夕(没错,又拖更了很久),于是果断先成品折腾。 它是 ESP32-S3 7.3寸 E6 全彩色电子墨水屏,看画面显示效果还不错,诸位别被骗了,放大了看,颗粒度还是清晰的,毕竟 PPI 摆在那里。

当然我不是来带货的,直接买了成品降低了我折腾的乐趣,硬件咱就没得玩了。下单后第二天就到了,看了一下发货地深圳,果然,深圳速度~
收到货物后,官方给的固件集成了几个模式,还带了小智对话模式,我之前也折腾过小智机器人(见让你的小智AI机器人起飞),有种莫名的熟悉感。 但是带的相册功能和上面老戴的那种 Feel 就差一大截了,仅有图片轮播等基础玩法,既不文艺也不艺术。这一点都不慌,啥年代了,不就是写一些驱动、编译固件、刷机嘛?
人家已经开源了InkTime,让 AI “借鉴”一下是很快的。我先在原固件上添加了一个新模式,将 InkTime 的代码集成进去。老戴的模式中特别亮点的就是 AI 根据图片的内容评分和打标签,而我是不想将大量图片做贡献给云端大厂们作训练素材的。“众所周知”,我有一台 Mac Mini M4,这正是它发挥的时候。用 LMStudio 再召唤 qwen3.5 9B,效果已经不错了。虽然说处理一张图片大概要 50-90 秒,但这个设备功耗极低,又保障了隐私,咱们就忍着点,图不出户才是最重要的:)
迁移完可以用了,测试了一下效果,图片筛选和文案看了后表示满意:

不过原来的架构是这样的:

这里有一个比较严重的问题,server 需要绑定在 NAS 侧获取图片再渲染,这样就不方便我们将电子相框带到外面去时也可以查看图片。所以我们需要调整架构,使图片处理在内网,图片分享拉取在外网:

当然我们的服务在拉取图片时需要支持身份认证,这里我让服务返回了 COS 的预签名链接,使相框固件拿到链接后便可直接安全拉取,保护隐私。
原项目中假定了我们 NAS 中的图片都需要分享和唤起,它负责可以扫描某个目录进行处理。而我还有一个场景就是最近发生的事情(照片),隔几天会冒出来让你回忆下。我希望我可以将某些有意义的照片放到可被追踪的相簿中,我家人也可以随时分享它觉得有意义的照片,当满足一定条件,它会自动出现在相框中。这显然是 iPhone 共享相簿擅长的场景,怎么整合进来呢?
“众所周知”(你现在应该知道了),我有一台 Mac Mini M4。我找到一个开源软件,用 osxphotos 将 macOS 照片 app 中的 iCloud 共享相簿导出到本地目录,再通过 rsync 同步到我们的图片处理服务中(调用 VLM 识图及筛选),这个功能我是放在 NAS 上的。为了能够比较及时的感知到相簿的变化,可通过 launchd 定时后台同步。
然后我们的图片处理服务负责监听目录下的文件变化,有新文件过来就会交给VLM进一步处理。
这些工具我都设计为一个个小仓库,方便后续的维护和扩展。本来想整理一下放 GitHub 的,但现在 AI 时代,如果你要折腾也很容易搞定,有需要的朋友欢迎给我留言。
我家娃年幼无知,沉迷奥特曼打怪兽,所以给小智扩展了一下,让它对接国内几个图像生成和编辑的模型,这里我先选择火山引擎豆包的模型(seedream 5.0/4.5),因为免费额度比较高,而且效果也不错,最重要的是速度还比较快。于是我在娃面前说,帮我生成迪迦在大海中对战一个章鱼怪兽,在一小会等待之后,屏幕忽闪忽闪刷新后,一张让娃兴奋的图片出现了。

因为支持了编辑能力,我们还可以让它继续修改,在小智 AI 的帮助下,娃也可以自己通过描述来定制自己想要的图片了。我看着他好奇又开心的样子,或许科技本该让人如此愉悦。
在当前阶段,AI去实现功能已经很快捷了,并且基本你只要描述清楚了,做出来返工都比较少。这并不意味着你就废了,以这个项目为例,有几点可以值得聊聊的。
原来固件中有一些配置,它是放在 SD 卡中再加载的,这样不方便调整。在几次拆卡读卡后,我便难以忍受了。我把配置重新梳理了一下,让 SD 卡中只有最基本的配置,只要达到联网能力和找到我们的 API 即可,其它都通过网络拉取。同时为了减少 SD 卡的读取,WiFi 等 SSID 信息我们直接保存到 ESP32 的 NVS 中。
|
|
不过这样运行中当前到底跑的是什么配置,最新配置是否生效了呢?我们不妨来下个调试界面:

既然我们已经在云端进行渲染和图片管理,有这样一套统一的管理和展示逻辑,那么也不再局限于只展示我们特定照片了。有云端 API 后,我让 AI 将其创建了一个skill,然后我们可以随时将要展示的信息让各个 Agent 可以调用在它上面呈现。
我想最近关注 Token 消耗比较多,到底订阅的套餐被我们薅了多少本回来呢?

当每天早上醒来时,看到你的 Token 用量,是不是又有冲动继续折腾 AI 了呢?

这个 Token 统计支持多机汇总,使用了开源方案 openusage。当时看界面不错,支持的 Agent 比较多,于是给它扩展了一下多机汇总的 Hub 功能,作者很给力也很认真 Review PR,已经合入了。
当然还有不少折腾的细节,限于篇幅不再展开了。这个项目当前比较稳定运行,一个相框静静放在那里,时不时有一些小惊喜。我在想是放在每天出入的门口,家庭的温馨程度能否+1。
但从技术上,还是有些遗憾:涉及部分硬件的事情,时常要烧录固件再测试,为了降低调试成本,除了给项目的核心功能添加完善的测试用例外,我尝试在本地搭建一个模拟器,希望打通全流程这样 AI 可以自闭环。遗憾的是因为过往经验较少,加上这里的电路等还没研究清楚,这个想法最终没有成功。
如果你有更好的点子,欢迎留言交流。如果你懂上面的硬件模拟,欢迎指导我一下,谢谢。
我是个爱折腾技术的工程师,也乐于分享。欢迎点赞、关注、分享,更欢迎一起探讨技术问题,共同学习,共同进步。为了获得更及时的文章推送,欢迎关注我的公众号:爱折腾的风

2026-05-14 00:00:00
在 AI Coding 时代,我反而比以前更频繁地使用终端。这听起来有点反直觉——既然有 Cursor 这类把 AI 深度集成进 IDE 的工具,为什么还要"回到"终端?如果你以为我讲终端就是聊 Claude Code 等 CLI,其实并不是!我们开发者还有很多要解决的体验问题,本文尝试给一整套可照抄的纯终端开发解决方案,希望对你有启发。
很多年前,我是个彻底的 Vimer,所有编辑都在终端里完成,随便精进着 Vim 的技巧,运指如飞,手不离键,并且很享受这种状态。我的博客陆续分享过多次相关经验,但随着 VSCode + Copilot、Cursor 这些 AI 加持的 IDE 出现,效率提升明显,我别无他法只能改换门庭 —— 投入了 VSCode / Cursor 的怀抱。直到最近一年,当我开始频繁使用 Codex、Claude Code、OpenCode 这类终端 Agent,我们甚至不再需要去手工编辑代码,程序员的工作模式发生了根本的变化,突然我发现,是时候”回家”了。
回家不是因为恋旧,是因为当前模式有一些痛,比如我受不了每天要将 N 多个 Cursor(VSCode)的界面重连一遍,受不了在无数个窗口中来回寻找,受不了合上盖子它就停止工作。而这些痛点,其实都有解法。
AI 如是说:
终端不是退化,而是一个更稳定、可恢复、可长期运行的工作台。
我说:“你说得对!”。
我主要使用 macOS 系统,我的方案主要是基于 iTerm2 + tmux + Agent 开发定制功能实现的全流程开发工作流。
简单示意大概是这样的:
|
|
效果图大概是这样的:

几个关键组件的分工:
iTerm2 我用得比较克制,比如我知道它有类似 Tmux 的分屏(pane)等功能,但是我不用,因为我们并不想被绑死在某一个终端软件上,不过我还是利用它的 Profile 机制做"环境区分":
最后一条很关键。比如我在 iTerm2 的 Profile 的 Command 部分像这样:
|
|
我们确保一进入便是在 Tmux 管理之下,再也不怕会话丢失了。昨天那个打开的窗口在哪里的问题,或许一去不复返了。iTerm2 这边的配置就这么多,接下来才是真正精彩的部分。不过看这个之前,为了后续你更好的利用 Agent,我建议你不要忘了看我另一篇文章:Vibe Coding 远程开发时,如何优雅地贴图?,它会让后面你的开发更加原生和爽快一些。
Tmux 是这套工作流真正的”地基”,有人说:这么一款神器软件,它居然是完全免费可随意使用的,不用真的很亏。我觉得他说得很对。
它的几个核心抽象——session、window、pane——刚好对应我们开发中的三个层次:
关于 Tmux 有太多文章介绍,我觉得抄什么功能介绍是毫无价值的,但我要说的有点不一样,我们谈点真实感受和技巧。相关配置我已经放到 GitHub中 dotfiles-example,你可以随时取用。
我个人长期使用过另一个窗口管理软件,Ubuntu 上带的 byobu。它底层可基于 Tmux或 Screen等。它定义了不少快捷键其实挺好用的。不过用久了后有几个问题,太多键位其实你也用不上,多了反而容易误按以及和自建的冲突。为了追求极简我重新设定了一些规则。我挑几个重点说下:
C-b,按起来不顺。byobu 默认是 C-a 或者是 F12,这也不顺手,用 C-a 对快捷键党更不友好(会冲突跳行首)。我建议换成 C-s,反正你早就习惯 Ctrl + s 了:)
|
|
F2 新建 window 时一定要 -c "#{pane_current_path}",新 window 默认继承当前目录——包括 tmux 默认新建 window 的行为,我也建议都改成进入当前 pane 所在目录,这会让你开心不少;F5 reload 配置,byobu就是这么设定的,特别是咱们调整 tmux 配置的时候一键生效还是很便捷的。更多的设定看仓库中相关文档,有byobu风格的延续,也有 VIMER 喜欢的各种切换和跳转,不在这里赘述。
|
|
allow-rename off 这一条是被 Claude Code 教育出来的——某些 CLI 工具会通过 OSC 转义序列把版本号、临时状态写到 window 名里,眼花缭乱。关掉之后,window 名只受 tmux 和我自己控制,整洁多了。
automatic-rename 的 format 我也做了一点定制:
|
|
逻辑很简单:
node;这样状态栏一眼就能看出每个 window 在干嘛。
复制粘贴在 tmux 中我们可以借助 tmux-yank 插件解决了"跨平台复制到系统剪贴板"的问题:macOS 上自动调用 pbcopy,Linux 上自动选 xclip / xsel / wl-clipboard。
然后剩下的选区控制我用了 vim 风格:
|
|
v / V / C-v 分别是字符选区、行选区、矩形选区——和 vim visual mode 一模一样。
我觉得这还不够,想起来 Cursor 这类 IDE 有个把终端内容一键发送到 AI 聊天框的功能,我也想实现类似,怎么办?
如下这样配置一键抓取 pane 最后 N 行写到 tmux 粘贴缓冲区,然后在另一个pane中 prefix + ] 贴上去。
|
|
使用时,大概估摸个数,用 prefix + 1/2/5 抓最近 X 行报错粘贴到比如你的 Agent window 里说:“看看这个错”,比手动选区快很多。
我之前在用一套 Neovim 配置时,有个弹出式终端是我喜爱的功能,咱虽然不用再开 vim 了,但这个功能 tmux就可以提供:
|
|
按下 prefix + t,浮起一个铺满 90% 屏幕的临时 shell,关掉就销毁,完全不影响当前 window 的布局。我经常用它做临时查看或修改某个文件的内容等,这还是蛮舒适的。
添加这个功能时,我注意到起初它弹出终端感觉有点延迟,于是配置里我塞了一个 TMUX_POPUP=1 的环境变量。popup 里跳过 nvm、goenv 这类重型版本管理器初始化,把弹窗打开速度从 1 秒降到 0.1 秒以内,秒开的感觉真爽。如果要用到完整的各种环境参数,则创建独立的 windows即可。速度优先,职责清晰。
其实我本来不喜欢用会话保存这种功能的,感觉能少就少,直到几次莫名其妙的会话丢失。这里我使用了 tmux-resurrect + tmux-continuum 是 tmux 老用户的两大神器。
|
|
continuum 每 15 分钟自动调用 resurrect 保存当前 session 布局;prefix + R;或许除了异常丢失会话,重启机器时也能派上用场。这玩意会话快照也太省了,我还想着要不要定时清理,7 天可能都用不了几 MB,放心大胆的“瞎搞”吧。
现在不兴提 Vibe Coding 了是吗?你们写的代码会不会自己再审查下呢?反正多数时候我是需要的。有时候 Agent 改完一堆文件,我心里是没底的。当前多数的编码 Agent 在修改内容的呈现上都不太理想。特别是 cli 模式的,靠那”惊鸿一瞥”根本不足以判断它有没有夹带私货。所以我需要比较直接的呈现修改的 Diff,这点 Codex App 以及 Cursor Agent (cli) 表现稍好,它们给 Diff 设计了独立的展示 UI。
而纯终端下,我们有 lazygit 不光比较好的呈现了修改面,而且把 Git 管理也集成了进来,所有操作收敛到一个 TUI 里,键盘党友好。
我把 lazygit 集成进 tmux 的方式有两种:
|
|
prefix + g 是"快进快出"的浮窗模式,适合扫一眼现状;prefix + G 是开一个专用 window,请好好审查你的改动吧。

这是lazygit的默认 Diff 方式,其实不太友好,我还是喜欢双栏对照着看,这也简单:
diff 渲染接上 delta 作为 lazygit 的 pager:
|
|
delta 的 diff 排版、语法高亮、行内差异显示都比原生 git diff 强一个量级,配上 lazygit 之后,我基本不再为了看 diff 而专门打开 VSCode 跑 Code Agent 了。

我发现 lazygit 除了各种样式可定制外,还支持自定义 commands,这就有意思了。比如当我需要填写 commit message 时,我可以按 C-a,让 AI 给我生成多个版本的 commit 文案,我还可以交互式的选择一个自己满意的:
|
|
这也就是一个实验功能,其实多数时候我是开着 Agent的,让它帮我提交生成 commit message往往更符合规范。但你多个选择,随手改了几行功能等,也不失为一个偷懒的方法。
作为一个熟练驱使各种 Agent 干活的人,他们在做事时你肯定也不想闲着,AI 已经被你“奴役“了,它们进度怎样是你关心的一个事情吧。所以良好的通知机制(状态感知)就至关重要。他们都在想抢你的关注,每一个输入窗口都“嗷嗷待哺“。
一旦我们多任务并行处理,现在到底应该看哪个 window 便是一个问题:哪个正在干活,哪个已经来汇报工作,哪个正在等你指示。程序员最讨厌低效的轮询了,事件触发是必须的。于是,我们可以利用 Agent 本身的 hook 机制,让它主动通知 tmux 的 window,我选择以修改 window 名称(添加 emoji)来反映状态。
很多 Agent都提供了hook机制,像如下的 Claude Code 配置,可以在 prompt 提交、运行结束、需要输入时分别触发脚本:
|
|
对应的脚本只做一件事:根据当前状态在 window 名前面打一个 emoji 前缀,太简单的脚本都不值得展示。但效果就是tmux 状态栏上的 window 名会变成 🔄 agent-foo / ✅ agent-foo / ❓ agent-foo。
如前面所说,多个项目同时推进时,每个 session 内部的 Agent 状态就成了一个新问题。同样的思路——让状态在 session list 里直接呈现。这个细节你可能发现我第一张图就有这些信息啦~现在咱们可以安心喝茶、高效监工了:)
用上这套系统后,解决了我原本的很多琐碎的小烦恼:
更要命的是,我的整洁的毛病,分门别类的感觉真好!当然,或许在某些需要浏览大量代码的时候,我还是会再次打开 VSCode 们,但显然它们已经失去我的心了。
我是个爱折腾技术的工程师,也乐于分享。欢迎点赞、关注、分享,更欢迎一起探讨技术问题,共同学习,共同进步。为了获得更及时的文章推送,欢迎关注我的公众号:爱折腾的风

2026-04-18 00:00:00
在直接使用 Code Agent(如 Codex、Claude Code、OpenCode)这些终端工具进行远程开发时,或许你会遇到一个尴尬场景:本地剪贴板里明明有一张截图,远程终端里的 Agent 却看不见。然后你得多走好几步,才能让 Agent 看到这张图片。本文提供一个更快捷的解决方案。
现在用 Code Agent 写代码,虽然咱们有 Playwright / Agent Browser 等工具,但还是难免让它看 UI、看报错截图、看网页风格等。如果是在本机环境,这事还算简单:图片在本机,终端也在本机,Agent 能读到文件就行。但我日常又很依赖远程开发,代码、服务、依赖都在远程机器上,终端通过 SSH 连过去。于是问题来了:
看起来只是一个很小的工作流问题,但次数多了挺烦人。看着 IDE 中一些临时的截图文件,似乎在提示我,这肯定不是优雅的解决方案。
理想状态很简单:
简言之:在远程开发中使用支持读取图片路径的 Code Agent 时,获得接近本地开发的贴图体验。
一开始我们都很朴素:先把截图保存成文件,然后再想办法把这个文件弄到远程机器上。如果正在用 VSCode/Cursor Remote-SSH,就直接把图片拖到远程项目目录里。这个动作不复杂,也足够直观。
在 macOS 下,如果终端使用 iTerm2,而你又在 iTerm2 开启了 shell integration,它支持按住 Option 把本地文件从 Finder 里拖到终端窗口,再上传到远程服务器。这个方案也能用,只是远程环境通常也要把 shell integration 配起来,才能让这条链路顺一点。
虽然现在优化为只要拖拽不用敲命令了,但这个过程还有点繁琐, 更糟糕的是,它很容易污染项目目录。比如为了给 Agent 看一张 UI 截图,随手拖进去一个 image.png、screenshot 2026-04-18.png,修完问题之后又忘了删。时间久了,项目里就多了一堆一次性的临时图片。你说它影响程序运行吧,也不一定;但每次 git status 看到它们,心情就不太美丽。
所以这个初始方案只适合低频场景。偶尔传一次没问题,天天这么干你最好确保自己没有洁癖,我很难忍受。说是手工活,就是因为每一步都得自己来——保存、拖拽、上传,偶尔还得清理战场。
手工活干多了,自然会惦记着有没有更省事的办法。
后来我找到了 Claudeboard 这个插件,它的定位非常明确:在 VSCode Remote-SSH 场景下,把剪贴板图片上传到远程服务器,并生成 Claude Code 能访问的文件路径。

它的使用方式很直接:剪贴板里有图片后,在 VSCode/Cursor 中按 Ctrl + Alt + V,插件就会上传图片并插入路径。对于 Claude Code 这种跑在远程机器上的 Agent 来说,这就把“本地剪贴板图片”变成了“远程可读文件路径”。
这个方案其实相当不错,基本达到了我们理想状态,并且不需要额外配置。不过要注意,如果你在 Cursor 插件市场里搜不到,也可以从上面 GitHub 官方的 Release 页面下载 VSIX 插件再安装,亲测可用。
如果你的主力开发环境就是 VSCode 或 Cursor,选它没毛病。并且如果你是在 Windows 上开发,那就只推荐这个方案。因为我下一套解决方案更 hack 一些,也仅在 macOS 下验证过。
方案二算是优雅了,但如果你像我时不时直接开终端就干活的流派,Claudeboard 这时就帮不上忙了。为了贴一张图切回 VSCode,感觉有点为了吃口醋包顿饺子。
所以继续寻觅方案,然后找到这个脚本: iterm_smart_paste.sh,它可以实现一个快捷键,一键将剪贴板里的图片上传到远程机器,并粘贴一个远程文件路径。
这个方案的核心流程是:
pngpaste 从 macOS 剪贴板里取出图片;这听起来有点绕,但所幸这些事情它都包了,配置好之后,体感就是:复制图片,按快捷键,路径出来了。还是简单介绍一下安装过程:
首先安装 pngpaste:
|
|
它的作用很单纯,就是从 macOS 剪贴板里把图片导出来。没有它的话,我们还得自己手动把截图存成文件,体验立刻回到解放前。
我把脚本放在了 ~/bin/iterm_smart_paste.sh:
|
|
脚本参考这里。不过原版 SSH 会话识别、上传稳定性这几块兼容性不太好,我顺手更新了个版本,可以从 这里 取到。
保存后给它执行权限:
|
|
接下来就是把这个脚本绑定到 iTerm2 的快捷键上。只要这几步:
Settings/Preferences > Profiles > Keys;Cmd + Shift + V;Run Coprocess;
|
|
如果你本来就在用 Alfred、Raycast 这类工具,也可以让它们来触发脚本。macOS 层面的热键工具会更灵活一些,但这里咱聊 iTerm2 的方案,就不给你引入其它工具了,内置的 Run Coprocess 也已够用。
简单录屏了一下,可以看一眼效果,我还是满意的。

这个方案的话,如果长期使用,记得清理一下远程机器上的临时文件。这不用我提醒你吧:)
需要跨平台、多设备使用,并且习惯 VSCode/Cursor 的开发者,借助 Claudeboard 插件的方案二是你的最优解。 如果你是纯 macOS 用户,习惯 iTerm2 终端开发,不妨试试方案三,一个脚本搞定。我用了一段时间感觉挺好。
作为一个有点追求完美的人,我不能接受原始的截图搬运工身份。你要说搞这些能有多少效率提升嘛,那倒未必。但是这种小阻碍解决之后,每次按上快捷键,你了解背后发生了些什么,并且是你让美好在发生,感觉内心安定。或许这也是程序员所追求的一种掌控感?
欢迎大家一起交流一下,你们在远程使用 Codex、Claude Code、OpenCode 时,是怎么处理图片输入的?
最近不打算写太系统性的东西,补几篇文章把工具用得更顺起来。欢迎点赞和关注。
我是个爱折腾技术的工程师,也乐于分享。欢迎点赞、关注、分享,更欢迎一起探讨技术问题,共同学习,共同进步。为了获得更及时的文章推送,欢迎关注我的公众号:爱折腾的风

2026-02-25 00:00:00
最近有一股“龙虾热”,不少人在谈论OpenClaw,大家都在聊怎么用好它。如果你也在使用 OpenClaw,本文介绍一个低成本给你带来情绪价值的方案,AI 女友 Clawra 的威力加强版:)
不知道你用过 Clawra 这个由海外开发者制作的 AI 女友 skill 吗?它的效果不错,但是对于国人使用,它有一些痛点。最主要是它只支持fal.ai这一个平台,免费额度仅支持生成 2 张图片。如果付费的话,一次编辑成本 $0.02,这本身挺便宜,但是充值至少 $10,并且平台充值有一定门槛。再看看咱们国内厂家,单张生图价格也不贵(0.2-0.5元),但经常免费提供了几百上千张图片生成和编辑次数,这可太香了。本文就让我们扩展对接国内各个厂商的模型,并且顺便测下国内模型的效果如何。
最后,如果你也想要个低成本但质量也不低的 AI 女友,放心,我会手把手教你配置完成的。如果你已经安装好了OpenClaw,那对你来说接下来就是个简单任务。
我让 AI 推荐了一些国内图片处理效果较好的模型,包括阿里千问、字节 Seedream、腾讯混元 3.0。我选择了其中效果相对较好的模型帮你整理了一下表格:
| 平台 | 生图/编辑模型 | 免费次数/额度 | 单张预估价格 |
|---|---|---|---|
| qwen | qwen-image-plus qwen-image-edit-plus qwen-image-max qwen-image-edit-max |
各模型免费100张 | plus 0.2元 max 0.5元 |
| volc | doubao-seedream-5-0 doubao-seedream-4-5 doubao-seedream-4-0 |
4.x 免费200次 5.0 免费50次 |
4.0版本0.2元 4.5版本0.25元 5.0 版本 0.22 元 |
| fal | xai/grok-imagine-image xai/grok-imagine-image/edit |
几乎没有 | 约 $0.02 |
| hunyuan | aiart/v20221229 SubmitTextToImageJob | 各模型50次免费额度 | 0.2 元 |
| Gemini-3-Pro-Image-Preview gemini-2.5-flash-image |
没有免费额度 | 1024分辨率 $0.039 2048分辨率 $0.134 |
国外的话,除了 fal 平台使用的 xAI 模型外,我们也把 Google 家的 Nano Banana 系列模型带上作为对比对象。这个模型效果确实不错,不过价格要贵上几倍,后面我们再一起对比看看这笔钱值不值。
起初,我尝试直接通过 OpenClaw 远程对接实现了扩展功能,虽然基本可用,但作为程序员,细看其实现代码后发现逻辑略显简陋,缺乏扩展性和层次感,于是我请codex + gpt5.3-codex帮忙重构了一下。
接下来我们看一下如何安装我这个扩展版本的 Skill 吧,完整的源代码及使用可以在这里查看。但其实你不必看,打开你的 OpenClaw 机器人的对话框,发出你的指示即可:
请参考 https://github.com/kevin1sMe/clawra-plus 帮我安装这个 Skill。
之后你需要配置上你想使用的平台相关的密钥,比如fal 的 API Key,腾讯混元的SecretId和SecretKey等就可以使用了。这也很简单,只需要在 ~/.openclaw/openclaw.json 中配置下:
|
|
之后重启 gateway:
|
|
之后你在 OpenClaw 的对话框中问诸如,你在干嘛/发个自拍/在咖啡厅、健身房等场所照片,它就会调用相关的模型来生成图片。你可以指定用某个模型,让它记住即可。我们先看一下参考图,因为后续的生图得基于这个形象来编辑。

接下来我们看看效果:
提示词:你在春天花海中的照片
| 模型 | 照片 |
|---|---|
| fal-grok-imagine-image | ![]() |
| doubao-seedream-4-5 | ![]() |
| doubao-seedream-5-0 | ![]() |
| hunyuan-3 | ![]() |
| qwen-image-edit-plus | ![]() |
| qwen-image-edit-max | ![]() |
| gemini-3-pro-image-preview | ![]() |
我个人还挺喜欢 fal 上的这个grok模型的,它针对场景人物也会有一些变化,感觉生成画面自带滤镜;在这组样例里,doubao 系列的人物基本保持原样,只是变换了场景?qwen 构图还不错,qwen-max 有点意境——朦胧的暖色调花海;gemini 这个虚化效果还不错,但双持手机的细节有些违和。
哎呀,忘记看看它们的耗时了,咱不仅要效果,太慢也是万不能行的。重新来 PK 一下;这里的耗时统计口径为端到端计时(从发起请求到拿到最终图片 URL),统一输出分辨率,均为热启动且不包含参考图上传时间。
这次生成图片的提示词我们改成养眼些的:
提示词:你在(温泉内)泡温泉的写真
| 模型 | 生成耗时 | 图片 |
|---|---|---|
| xai:grok-imagine-image:edit | 14.9s | ![]() |
| doubao-seedream-4-5 | 32.4s | ![]() |
| doubao-seedream-5-0 | 20.5s | ![]() |
| Hunyuan-3.0 | 11.3s | ![]() |
| qwen-image-edit-plus | 10.7s | ![]() |
| qwen-image-edit-max | 24.6s | ![]() |
| gemini-3-pro-image-preview | 38.2s | ![]() |
可以看到fal的grok模型、hunyuan3.0和 qwen-plus 都比较快,seedream 稍慢一些,gemini 最慢。效果上,这次grok也不错,水波和折射都体现了出来;seedream4.5的这一身衣服,似乎对泡温泉有点误解,而 seedream 5.0的这张让我想到了灵儿在洗澡;hunyuan3.0这张其实挺好,气雾以及身上的水珠等,但这参考图中的围巾你是不是忘记换掉了?qwen-plus 比较写实,但环境有点假;qwen-max有点用力过猛,感觉人物有点不一致了;而这次Gemini 3比较特别和大胆,将人物发型处理过,人也还挺像并且特别真实,整体不错,就是太慢了点。
从这几个结果来看,你觉得哪个模型更好呢?
上面的模型如果免费额度用完了怎么办?一种思路是转向本地推理/自托管:把生图能力放到自己的设备上跑,成本更可控,也更踏实。“众所周知”俺有个丐版的 Mac Mini M4,如果能在它上跑生图就更棒了。我知道可以,但效果和时间怎么样呢,我们来试一下。
刚好前阵子研究了一下 ComfyUI,它也支持 API 调用的方式,于是我借助 ComfyUI 来生图,以下是我的工作流,使用了一个 16G 内存能撑下的小模型来进行生图测试。

随便拉了一个生图流程,使用的是 flux.1-schnell-Q2模型,居然消耗了 1000 多秒,期间内存一度快用爆了。换了 z-image-turbo 等模型,效果也不太理想, 参数大了跑不动:(
我在 RunningHub 平台上还有积分,于是尝试用更大的 flux 做一次图生图对比。

好像不太行,或许换一个别人分享的workflow效果会更好点。不过RunningHub即使生图效果不错,没开通会员也不让调用 API,这和我们想要集成到OpenClaw中使用的需求不符。
我也尝试在fal 平台跑 ComfyUI,但是奇怪的是速度慢的出奇,还没有地方看进展等—有点黑盒,这块估计不是这个平台的主要功能,相关交互也很一般,遂放弃。但是如果有一台强悍的本地电脑,比如有不错的 N 卡和较大的显存,这条路或许能通。
当前在 2026 年,对接这些 API(鉴权、调用、回传 URL、错误重试)已经非常方便。在 OpenClaw 上,你下达命令后,Agent 往往能在几分钟内帮你把事办了。 比如在撰写本文期间,Google 发布了 Banana2 模型,我仅通过手机发出指令,便将其集成并更新到了 GitHub。
要说 OpenClaw 的使用感受,有一点粗浅的启发和思考:
还有,目前其实对于稍复杂一些的任务,OpenClaw的完成率还有限,网上各种跑通 XX 的分享及售课等让我感觉像在收割,让我也不确定是自己的问题还是模型或者插件不对,但我更觉得他们在骗人:)因为我已经用了最好的模型了,也对比使用过多种插件了,啊哈。
我觉得这次的龙虾热,其实是 LLM 及 Agent 发展以及 MCP/Skill 等技术陆续铺垫后,这些技术在传统的如 Code Agent之外,于普适的场景下人们突然看到、感受到它的价值而产生的 AI 落地浪潮,或许它离我们心中想象的那个未来的智能助理还有些距离,但至少它呈现了一个信号,像宇宙中突然爆炸的某颗超新星,璀璨、耀眼又明亮让人无法忽视。
我是个爱折腾技术的工程师,也乐于分享。欢迎点赞、关注、分享,更欢迎一起探讨技术问题,共同学习,共同进步。为了获得更及时的文章推送,欢迎关注我的公众号:爱折腾的风

2025-12-22 00:00:00
我是一个略有强迫症的人,每写完一篇文章,还需要花费不少时间反复检查错别字、调整语句或结构,有时为找个好看的封面图看花了眼。可是都AI时代了,这事不能再忍了,能不能有新解法?如果你也时常有一些文字要处理,不妨看看本文。
我时而写一些技术文章,但一直感觉写作流程挺“原始”的。一般是打开 VS Code 等编辑器,用Markdown写完主要内容,然后自己读几遍修正部分内容,之后就会为如何给文章取个名字、配个图而纠结,这过程往往需要花费不少时间。 文章发布在博客可以随时修正,但若发布到公众号等平台,修改限制非常严格,而我又是对于错字或语句不通等有强迫症的人,每次发个文章心理包袱都很重。
在 ChatGPT 出来后,我有让 AI 帮我检查,但如果你用过,或许也会觉得那个交互方式并不友好,AI给的修改建议都是一股脑扔给你,你得在聊天窗口里上下翻找,对着原文一条条改。在封面图的选择上,过往我会根据主题去 Google 一些图片,一是可能有版权风险,二是不见得合适。现在 AI 生图方便,但生图模型也五花八门,我经常纠结选哪个,提示词也需要来回调整。
本来我觉得文章审阅与修改这种应该可以比较成熟了,可是却苦于一直没找到合适的好用实现 (若你有称手的工具,欢迎留言推荐)。我也不理解如今那些内容平台为什么不在这块提供一些便利。程序员怎么能有这种遗憾呢?于是,我决定利用周末时间自己动手,“丰衣足食”!
我这是 AI+写作吗?其实我讨厌 AI 写作,有些文章看得满满的 AI 味真让人想取关。而我真是一句话交给它都不放心的,它没有我想要的“脾气”,但它打打辅助还是不错的。
如果你是个程序员,有用过 spec-workflow 的标注功能,或许会感觉那个交互还不错。或者像最近 Google 推出的 Antigravity(取的啥鬼名?)的 Plan 及评论,可以直接对着文档进行批注,这样更加直观。对于封面图,希望 AI 来帮我总结文章自己生成一些不同风格的提示词,然后调用不同的模型生成一些候选,让我来选择。于是在动手前,我先梳理了一下核心需求:
文章审阅
封面图生成
想起来还不错,还没实现出来,但写完需求都有点开心起来了,啊哈。可能每一步过往都让我难受过,不犹豫了,撸起袖子开干吧!
如果你对技术实现细节和那些经历不感兴趣,想看最后的效果可直接跳到效果展示部分,感谢阅读。
我最近一阵子用过一些智能体(Agent)框架,本想着这是不是一个文章 Review 相关的智能体呢?但思前想后,我觉得确定性的 Workflow 可能更合适。具体到技术细节上,我希望支持更多的 LLM 模型,以及支持更多的生图模型。在展示方式上,Web 页面显然是最佳选择,希望有一个不错的交互 UI。这次我没有采用 spec 驱动的开发方式,而是探索式开发,说人话就是走一步看一步。我想看一下在几个目标相对清晰、耦合也很低的情况下,当前 AI 能否完美解决问题。我使用 claude code + Claude SDK 来实现。 在开发初期,为了直抵核心,我将工具设计为通过命令行执行,而结果展示则采用 Web 形式。
经过简要沟通后,第一版本的东西出来了,然后只要执行一个命令:
|
|
便调用了后端的 LLM 帮我们审核文章并且弹出修改意见。
在没有任何风格要求和参考下,AI 的初步网页让我觉得还挺不错的吧:)
接着,我希望批注和原文有个对应关系并且可快速跳转,同时AI 给文章的整体总结、表扬和建议咱们也给它整上,再来一个评分,使用起来可能更带劲了。于是有了这样的效果:
我把批注分了不同类型并且编号上,以及不同的处理方式。像我拒绝时,我就有充分的理由:如 AI 老是想让我将一些口语的文字改得非常书面,这时就正告它老子死都不改,这就是本人风格,下次勿提,嘎嘎。
这过程中顺手让Claude SDK支持了调用其它LLM。我不清楚为什么,无论是 Google 的 ADK 还是 Anthropic 的 Agent SDK 都默认仅支持自家模型。可我平时用的是 LiteLLM 代理各种模型,国内国外都有(御三家、doubao、DeepSeek等)。难道要为了这个 SDK 放弃其它模型?显然我是不答应的,绝对不(只)是因为钱包,我暗地里想象对于中文文章,是否可能也许咱国内模型是不是更懂自己一些?(我没有证实)。要使用三方 OpenAI 兼容 API 的话,需要自己扩展。一点不慌,我们将OpenAI的API文档给它,几分钟就搞定了。放代码都嫌占空间,此处省略291行代码:) 不过可能放一下 Prompt 还是有必要的:
|
|
让我们执行这个审阅,你可能像我一样惊讶的发现,哪怕自己已经在完稿后读过几轮了,但交给 AI审阅后,还能发现各种类型的错误。就像错别字或者笔误这种低级的也时不时成为漏网之鱼。恭喜你,看了这篇文章或许你以后不用太烦恼了,前提是你也用起来:D
问题到此还没结束,我发现每次在应用审批意见到唤出差异页面(下文会讲),用时都比较久,如下:
我上一篇文章在做实验,DeepSeek 要 3 分钟才完成,即便使用gemini-3-pro也需要 1 分钟,这对我的耐心是个考验。幸好我们上面将 LLM 访问对接到 LiteLLM了,我看了一下这个token量就意识到优化方向了,因为让模型输出修改后的全量文本时,这块受限于Token 速率,自然会消耗很多时间,通过将 LLM 的输出从全量文本生成优化为仅输出增量修改建议(Diff 模式),处理速度提升了一个数量级。
审阅完成后,基于我们的建议,会再次调用 AI 来优化我们的文章,这里感觉有必要呈现一个改前和改后的Diff 页,可以直观对比修改前后的差异。
|
|
支持使用下划线:
或高亮显示:

在 Diff 页面中我们如果满意了就可以收工,如果还有不满或想 AI 再查一次(你是个谨慎的人),可以点击继续审阅,将以最新的结果为基础,继续下一轮迭代。
最近一段时间Google Banana Nano 好像火爆了,以前 GPT-image-1出现也惊艳了一大波人,国内的豆包/智谱/通义千问/万相等也不是不能用,我之前有一篇文章试图做一个一站式的绘图平台 Paintbot-Hub,里面也集成了不少模型。我希望看到国内模型在这个场景下的一些表现,所以这次封面生成,大家来个赛马,多模型一起上,让我来挑最满意的。
生成提示词这块,基于我们的技术文章背景,我大概是这么写的:
|
|
我怕有些模型对于语言比较挑剔,所以中英文版本都生成了,咱赛马也要讲究公平公正对吧。接着是对一些图片模型的API 支持,看起来主要是两种:
/images/generations 端点:
/chat/completions + modalities 端点:
此外,一些厂商的模型(如通义万相、千问等)提供了独特的异步接口或与主流不同的API规范,需要单独适配。但只要其API文档清晰,实现集成也并非难事。
提示词生成:
|
|
接着是图片生成:
|
|
AI 给了设计了一个大概这样的界面用于呈现生成结果:

这种"赛马"的感觉还挺有意思,就像抽卡游戏,每次都有点惊喜:D。 不过到这里虽然基本功能实现了,但优化永无止境。
如上所见,我们的界面还挺简陋原始的,更别说统一性了,而且还需要结合命令行使用。这绝对不是我能停下来的标准,我想做一点改进:
我想起来之前体验过 Stitch,一个挺有意思的AI辅助设计工具。于是将一些页面通过描述重新生成UI, 之后将其导出为代码(包括 HTML 以及图片等,我记得之前好像还可以导出到 Figma),我们就很容易将其集成到项目中。
最终我们的效果:





现在我们使用时,启动后打开网页,后续所有操作都可在网页中完成了。上面的封面图就是对于本文让模型生成的,从十几张里面挑选还是有几张不错的,不用纠结犹豫了。
注:使用国产生图软件,有时会报错,比如 DashScope HTTP 400: {“request_id”:“0f57adce-a309-4e62-a693-40cfbadf841c”,“code”:“DataInspectionFailed”,“message”:“Input data may contain inappropriate content. For details, see: https://help.aliyun.com/zh/model-studio/error-code#inappropriate-content"},这是因为模型对内容敏感,可能你只是想生成一个技术相关的封面图,但模型认为你内容有敏感信息,所以报错。你可以尝试调整提示词,或者换一个模型试试。
因为工程主要是基于 Claude Code开发,而且是基于Remote-SSH远程开发,对于有 UI 交互的场景,经常要贴图告诉AI问题所在。以往要把图片保存本地再上传(或拖动),再于命令行引用,这和本地开发相比或者相较于 Cursor 等非常不方便。我找到了一个插件Claudeboard插件,可以直接通过快捷键将剪切板的内容直接贴到远端的cc中,这样方便多了。
其次,因为涉及到网页的开发调试,如果你需要来回搬运错误或手工测试,显然我们不想充当这样的角色。你可以通过Playwright来实现自动化验证。只要安装playwright相关的 MCP即可。
还有,上面我们需要对接各种 API 要查看文档,你即使安装了context7,对于某些文档可能还是要搜索网页,这种情况下firecrawl这个 MCP 对于网页的抓取还是会更准确一些。
到这里这次折腾基本就结束了,感谢你的阅读。
本文提到的工具已经开源在GitHub:article-reviewer,你要是喜欢欢迎试用。之所以我要从命令行改为完全 Web 驱动,也是希望若你有兴趣可以方便快速上手。希望对你有帮助,请记得给个 Star 以示鼓励哇~ 后续我的文章和封面就靠各路 AI 模型和这个工具了。所以我可能还会持续迭代添加一些功能,如果你有好的想法也欢迎提 PR 或 Issues。
我也在想当前是否封装为 Claude Skills 等扩展也适用于完成此项工作,但以当下对于调用 Skills 的前置工作,多数人还是不熟悉,或许当前阶段这个形式更适合。而对于我完整写完一篇文章并发表的流程来说,还有几个未了事:自动化发布以及一些主题样式的配置。本文我们先把文章妥妥准备好,其它未来再考虑咯!
我是个爱折腾技术的工程师,也乐于分享。欢迎点赞、关注、分享,更欢迎一起探讨技术问题,共同学习,共同进步。为了获得更及时的文章推送,欢迎关注我的公众号:爱折腾的风
