AI 想放弃了,人没有 -- 肘子的 Swift 周报 #150

作者:东坡肘子日期:2026/8/25

AI 想放弃了,人没有

最近,Linus Torvalds 在调试一个 Intel Xe GPU 驱动问题时,经历了一场被他自己称为“debug session from hell”的漫长排查。最终的修复简单得有些不可思议:把一处 round_up() 改成 round_down()。但为了找到这一行代码,他前后添加了 24 个调试 patch,启动了 18 次 kernel。其中大量繁琐工作,都是在 AI 的帮助下完成的。

这个故事最有意思的地方并不是“AI 帮 Linus 修复了 Linux Kernel Bug”,而是 AI 在过程中数次想要放弃。它曾明确告诉 Linus,这个问题“impossible and unsolvable”,建议停止继续调查。Linus 没有接受这个判断。在他的坚持下,AI 虽然数次认为问题已经无法解决,却仍然忠实地执行新的任务,最终和他一起找到了那个只需要修改一行代码的原因。

这其实很好地展现了现阶段人与 AI 之间一种颇为微妙的关系。随着 Agent 能力不断增强,我们已经可以把越来越完整的工作交给 AI:阅读代码、提出假设、编写调试工具、执行验证,甚至根据新的结果不断调整下一步行动。过去需要开发者亲自完成的大量重复劳动正在被压缩,人也因此逐渐从具体的执行过程中抽离出来。

但这并不意味着人的作用正在以同样的速度缩小。恰恰相反,当 AI 开始参与分析、提出建议,甚至给出“这个问题无法解决”这样的判断时,人真正需要承担的职责反而变得更加清晰:决定什么值得做,判断什么时候应该相信 AI,又在什么时候拒绝它的结论。

尽管并非所有人类的坚持都会获得类似本次的圆满结果,但有时候,再坚持一下的理由,至少不应该被 AI 的一句“不可能”轻易抹去。

本期内容 | 前一期内容 | 全部周报列表

原创

从使用 AI 到委托 AI:我的一些思考

当一项工作已经有明确目标、边界和验收要求时,怎样把它真正交给 AI?Agent 能完成的工作越复杂,这个问题就越突出。模型的输出存在波动;上下文变长后,目标和规则可能逐渐淡化;拆进多个上下文,又会带来信息损失和交接偏移。让另一个模型复核,也不意味着结果一定会自然收敛。这些问题最终指向同一个词:可委托性。

本文是我对 AI 可委托性的一些思考:执行范围是否稳定,结果能否被信任,投入是否可以预期,以及什么时候需要人介入。相比追求某一次执行的最好结果,我更关心如何通过明确边界、验收标准、外置的权威记录以及合理的人机分工,让 Agent 在更长、更复杂的任务中保持稳定,并让失败能够被发现和纠正。文章最后也结合我目前使用的 Task-Driven 工作流,展示这些原则如何落实到实际的 AI 开发过程中。

近期推荐

认识 Swift 包注册表 (What is a package registry?)

Swift Package Index 加入 Apple 后,双方宣布将共同建设一个面向 Swift 社区的 package registry。但 package registry 与我们已经使用多年的 SwiftPM,以及用于发现和评估包的 Package Index,究竟有什么区别?⁠Dave Verwer 从 SwiftPM 当前基于 Git 的依赖方式讲起:传统依赖需要从 Git 仓库获取源码并 checkout 对应版本,而 registry 可以通过 package ID 直接分发已经发布的源码 archive,无需携带 Git history,同时发布后的版本也具有不可变性。

不过,registry 的意义并不只是让 package 下载变得更轻量。更重要的是,registry 还引入了一套正式的 package publishing 模型,并进一步涉及开发者身份、package scope 所有权、版本发布以及软件供应链安全等问题。这篇文章既是一篇对 Package Registry 工作方式的简明介绍,也为理解 Apple 与 Swift Package Index 接下来准备建设的 Swift 包生态基础设施提供了很好的背景。


如何正确处理 CoreBluetooth 超时与 Task Cancellation

用 withCheckedThrowingContinuation 将 CoreBluetooth 的 delegate API 封装成 async/await 并不困难,真正麻烦的是之后的异常路径:如果 callback 迟迟没有返回怎么办?Task 被取消后,底层蓝牙操作是否仍在继续?当正常结果、超时和取消几乎同时发生时,又该由谁来 resume continuation?

ilawsonlu 围绕这些实际问题,介绍了如何为 CoreBluetooth 的异步封装建立更完整的 timeout 与 cancellation 机制,并明确区分「取消 Swift Task」与「取消底层操作」,同时通过开源库 ArcBLEKit 展示了将传统 delegate API 封装成更健壮的 Swift Concurrency API 的思路。


详解 CloudKit:Apple 生态的后端服务 (What Is CloudKit? Apple’s Backend Explained)

CloudKit 是 Apple 生态中非常重要、却常常被低估的一块基础设施。从简单的跨设备数据同步,到共享数据和公共数据库,它让开发者无需自行搭建服务器,就能依托 iCloud 为 App 提供一套与 Apple 平台深度集成的后端能力。尤其随着 SwiftData 和 Core Data 都能够直接接入 CloudKit,许多开发者实际上已经在使用它,只是不一定需要直接面对 CloudKit API。

⁠Sean Allen 从 backend 的基本需求出发,系统介绍了 CloudKit 的 private、shared 和 public database,以及 Container、Record、Schema 等核心概念,并比较了 SwiftData、Core Data 和直接使用 CloudKit API 三种接入方式。文章并没有回避它的边界,包括对 Apple 生态和 iCloud 的依赖、schema migration、跨平台能力以及复杂服务端逻辑的限制。


重新认识 OCR:它是空间地图,而非纯文本 (OCR Doesn’t Give You Text. It Gives You a Map)

Vision OCR 返回的并不是一段已经组织好的文本,而是一组带有 bounding box 的 observations:数组顺序不代表阅读顺序、单词边界并不存在,字段之间的关系也不能简单通过前后位置判断。⁠Wesley Matlock 在开发唱片封套扫描功能时,一天内连续遇到了四个看似不同、实则来自同一错误假设的 Bug。本文通过这些真实案例展示了如何利用坐标计算阅读顺序、根据间距恢复单词边界,并通过空间邻近关系关联字段。更值得借鉴的是作者的测试方式:将真实图片暴露出的 bounding box 保存为 fixture,用纯几何数据固定每一项布局假设,同时保留真实照片作为端到端测试。正如标题所说,OCR 给你的不是文本,而是一张「地图」,真正的文本结构需要从空间关系中重新构建。


独立应用零成本推广的 6 个策略 (6 ways to promote your app without spending a penny)

对于独立开发者来说,写完 App 往往只是第一步,如何让更多人知道它可能更加困难。由 ⁠Paul Hudson 创建的 Kickstart 在这篇文章中整理了六种几乎不需要资金投入的推广方式:向 Indie App Showcase 等渠道投稿、通过 Kickstart Exchange 与其他独立开发者交叉推广、参与目标用户所在的社区、建立自己的邮件列表、Build in Public,以及持续优化 App Store 产品页面。

另外,MacStories 的 Federico Viticci 正在为年度 iOS 27 Review 寻找值得关注的新 App 和 App 更新。如果你正在准备 iOS 27 版本,可以通过 DM 或邮件 viticci@macstories.net 向他推荐自己的作品。 ⁠

工具

Amethyst Vein:跨平台、SwiftData 风格 API 的开源本地持久化框架

由 Mia Koring 开发的 Amethyst Vein 是一个本地优先的 Swift ORM,采用 SQLite 与 SQLCipher 作为存储基础,API 则明显借鉴了 SwiftData。它试图把 SwiftData 风格的 @Model、@Query、关系和迁移 API 带到 Apple、Linux、Android 与 Windows。项目采用显式版本化迁移、Identity Map 和字段级同步,并同时支持 SwiftUI 与 SwiftCrossUI。


DynamicNotch:帮助开发者为 macOS 构建精致的刘海与屏幕边缘交互

由 Govi 开发的 DynamicNotch 是一个专为开发者打造的 macOS Swift Package,用于创建贴附于屏幕边缘的 SwiftUI 界面,可呈现录音状态、媒体控制、构建进度、操作确认,以及类似 Dynamic Island 的紧凑视图。

它能妥善处理安全区域、多显示器和 MacBook 实体刘海,支持上下左右四个方向,也可以在紧凑与展开状态之间切换。DynamicNotch 的实现比较克制,只负责几何、裁剪、定位与窗口呈现,并未将手势、通知、状态管理等产品逻辑强加给使用者。


SwiftTUI:用 SwiftUI 的方式构建终端界面

由 Adam Zethraeus 开发的 SwiftTUI 是一个面向 Swift 开发者的终端用户界面框架。它将 SwiftUI 的声明式编程模型带进终端:开发者可以使用 View、@State、@Observable、布局容器、焦点、手势与动画构建交互界面,由框架负责布局、输入处理和局部刷新。

SwiftTUI 的有趣之处,不只是“用 Swift 写 TUI”。同一套视图代码还可以运行于 macOS、Linux 和 Windows 终端,并进一步部署到浏览器、WASI,以及原生 SwiftUI 容器;官网提供的计数器就是一个真实的 SwiftTUI 应用,经 WebAssembly 编译后直接运行在网页中。

往期内容

💝 支持与反馈

如果本期周报对你有帮助,请:

  • 👍 点赞 - 让更多开发者看到
  • 💬 评论 - 分享你的看法或问题
  • 🔄 转发 - 帮助同行共同成长

🚀 拓展 Swift 视野


《AI 想放弃了,人没有 -- 肘子的 Swift 周报 #150》 是转载文章,点击查看原文。


相关推荐


DeepSeek API涨价观察:AI行业从免费到收费的转折点
Yoyo Chen1802026/8/12

北大燕姐 · 商业观察 8月6日,DeepSeek一纸公告,AI圈炸了。 短短几行字:API服务价格将整体上调,预计涨幅较大。评论区一片哀嚎,四个字刷了屏:AI免费时代,结束了。 别慌。恰恰相反,我想说一句反话:普通人的机会,来了。 只是机会从来不会平均分配,它只给看得懂的人。这半年,北大燕姐帮企业主和内容创作者做IP定位,见过太多人:工具用得很溜,方向一塌糊涂。AI涨价这一天,恰好是一面照妖镜,照出谁在裸泳,谁早有准备。 一、先把事件捋清楚 8月1日:单日Token处理量破8万亿,


第三人称——骑马系统以及交互动画
神龙天舞20012026/8/3

第三人称——骑马系统以及交互动画 大家好,今天我们来聊一个在游戏开发里特别有“内味儿”的话题——第三人称视角下的骑马系统,以及那些让玩家觉得“哇,这马好听话”的交互动画。骑马不是简单的“把角色模型放到马背上”,它涉及到动画状态机、物理交互、摄像机跟随、甚至还有“骑手重心偏移”这种细节。这篇文章我会用最接地气的方式,把核心逻辑拆开揉碎,配上能跑的代码示例,让你看完就能上手做原型。## 一、骑马系统的核心:不是“骑上去”,而是“合体”很多新手做骑马,就是把玩家角色(Humanoid)的骨骼绑定到马(


Go Modules 包管理详解:go.mod、go.sum 与依赖管理
程序员爱钓鱼2026/7/26

Go 编程实战系列(五) 上一篇《第一个 Go 程序:Hello World》中,我们创建了第一个 Go 项目,并执行过这样一条命令: go mod init hello-go 执行完成后,项目目录中会出现一个 go.mod 文件。 很多初学者第一次看到它时可能会疑惑: go.mod 到底有什么用?Go 项目的第三方库从哪里下载?为什么有时还会出现 go.sum?go get 和 go mod tidy 又有什么区别? 这些问题都与 Go Modules 有关。 Go Modules 是现代


Alibaba买家账号运营指南:注册流程、账号养护及多账号管理实践
xiaobaihuoke2026/7/18

在跨境电商行业中,很多企业把重点放在卖家账号运营、产品推广以及广告投放上,但实际上,一个稳定、高质量的买家账号,同样是跨境运营体系中不可忽视的重要资源。 无论是进行海外市场调研、寻找供应商、分析行业趋势,还是获取产品报价,一个真实、活跃的Alibaba国际站买家号,都能够帮助企业更加深入了解市场。 然而,随着Alibaba平台风控机制不断完善,买家账号的运营已经不再是简单注册即可使用。账号注册后的行为习惯、活跃程度以及采购轨迹,都会影响账号后续的使用价值。 因此,买家号运营逐渐形成了一个完


再见Fable 5,OpenAI出手了!GPT-5.6真香~
AI袋鼠帝2026/7/10

大家好,我是袋鼠帝 我最近在疯狂使用Fable 5,好用是好用,就是太贵啦! 不过不是在Claude 官方使用的,因为我最新的一个号,在7月1号又tm被封了,服了都(已经记不清是第几个了) 天下苦A社久矣.. 所以,我最近都是在Cursor上用的Fable 5,虽然我下血本充了200$的订阅,但跑了两天Fable 5,总用量就已经超过48%了。。。 整的我都有点不敢用了,除非核心任务,其他时候我都只敢开启auto模式(自动选择模型) 就是这么憋屈。 然后今天凌晨,OpenAI终于出手了! G


从零构建ReAct智能体:让AI学会边想边做
树獭非懒2026/7/2

前言 大语言模型已经能写诗、编程、做数学题,但它有一个根本性的短板:无法与外部世界交互。你问它"今天深圳天气怎么样",它只能诚恳地告诉你"我的知识截止到某某日期"——不是它不想回答,是它根本没有"看天气"这个动作能力。 这就是智能体(Agent)要解决的核心问题:让 LLM 不仅能想,还能做。 业界现有的智能体框架(LangChain、LlamaIndex 等)已经将这套机制封装得非常完善,但它们的高度抽象也让很多人停留在"调包侠"阶段,对背后的运行机制一知半解。本文的目标,是带你从零构建一个


Swift 还让你 Excited 吗?-- 肘子的 Swift 周报 #141
东坡肘子2026/6/23

Swift 还让你 Excited 吗? 上周,Reddit 上一篇题为《Is anyone else excited by Swift progress as the language?》的帖子引发了不少讨论。WWDC 2026 上,Apple 明确表示,Swift 已被用于 WebKit 关键组件、QUIC 网络栈、字体渲染、驱动与固件。发帖者据此认为,Swift 正在向核心操作系统内核迈进,并将这一幕视为 2014 年"高级系统编程语言"承诺的兑现。评论区的讨论则很快从“是否兑现了承诺”,


别再让业务层裸奔 CarPropertyManager 了!谈谈汽车车载核心服务的架构封装
潜龙勿用之化骨龙2026/6/15

前言 Android Automotive 项目中,CarPropertyManager 几乎是访问一切车辆状态的入口。但在真实项目里,如果直接在 ViewModel 或业务层大量使用它,代码会变得难以维护、难以测试,也完全不符合 现代Android 架构 的分层思想。 本文将从零开始,梳理一套基于 Clean Architecture 的 CarPropertyManager 封装方案,涵盖: 为什么不能直接用 如何用抽象基类统一封装 callbackFlow 的正确姿势 Flow 与 su


「装闭」-AI驱动的开源装修闭坑系统
fthux2026/6/8

愿每个业主在装修路上心中有数,于是,「装闭」来了。 装修行业的水有点儿深 很多人装修完回头看,都发现自己花了不少冤枉钱。设计师画的效果图美轮美奂——复杂吊顶、满墙背景墙、开放格书架……装好以后才发现,这些东西费钱不说,日常打理还特别费劲。吊顶积灰、开放格藏污纳垢、花哨灯带一年到头开不了几次。 更别说合同和报价单里的猫腻。增项漏项、模糊工艺描述、虚报材料数量——这些套路装修公司玩得轻车熟路,但普通业主根本无从分辨。随便一个增项,几千块甚至上万块就多出来了。 于是就有了「装闭」(RenoPit)这


译 · Jake Wharton 访谈:Android 圈最熟悉的那个名字
bqliang2026/6/1

Jake Wharton 是我的偶像,也是很多 Android 开发者绕不开的名字。Retrofit、OkHttp、Dagger、Ktx... 这些项目或多或少都影响过我们写 Android 的方式。 前几天在网上看到他的这篇访谈,读完觉得很受用。里面既有他早年做 Android、做开源的经历,也有他对职业选择、会议、倦怠、家庭和工作方式的很多真实想法。这里把它翻译成中文,分享给同样喜欢 Android、Kotlin 和开源的朋友们。 ⚡️ 欢迎来到 Effective Interviews

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读