Author: root

  • 淘本旧书

    淘本旧书

    昨天中午,约了一对好久没见的老友夫妻在老阊门那边吃饭。

    席上聊了不少,主要是现在在干啥、孩子在干啥。

    谈着谈着,谈到了一个很有趣的话题:性本善?性本恶?我推荐小秦去看《合作的进化》:从性本恶出发,可以自洽地演绎出自发合作,这样的合作是robust的,并促进发展,无需任何理论指导、领袖指挥。

    还谈到一个有趣的话题——也是我这段时间和几位家长就他们孩子未来升学筹划进行讨论时固化的一个观点:Voice - Choice - Ownership中的Choice——我们在做选择的时候,不应该回避,而是应该追求

    怎么说呢?有几位家长在和我讨论是不是要将孩子送进国际高中、出国留学时,quote的理由有一个相同点:孩子成绩不太好,高中/大学恐怕考不上太好的学校,所以出门去。

    在我看来,这就是在回避:想回避国内卷到没边的中考和高考。但是,这样的选择要追求什么呢?我没看出来。

    =======

    吃过饭,看到饭店边上有家小书房“十方书屋”,就顺便进去兜兜。

    这个书房的名字起得不错。“十方”既是说书籍、客人的来处,也是说书屋不大,拢共也就十来个平方。

    进门第一排就看到特价区里有一本最老最老版本的《安徒生童话全集之八:老槲树的梦》

    我迅速打开我的“任氏有无轩”藏书页面,搜索了一下,发现这本书我竟然还没有收藏!有个藏书管理管理页面的好处这就体现出来了:不重复、不漏过。

    这本书一口价10元,品相相当好。我家里藏的几本,因为一直暴露在空气中,加上搬了好几次家,封面都有点发黄了。

    加上这本,我收藏的这套老版安徒生童话全集分印本就有11本了,依次是:

    1. 一:海的女儿
    2. 二:天国花园
    3. 四:祖母
    4. 五:母亲的故事
    5. 六:柳树下的梦
    6. 七:聪明人的宝石
    7. 八:老槲树的梦
    8. 十:沙丘的故事
    9. 十一:冰姑娘
    10. 十二:小鬼和太太
    11. 十六:幸运的贝尔

    还有缺的,不过我会比较佛系地去“偶遇”了。

    =======

    叶君健翻译的这套《安徒生童话》有很多年头了,之前我收藏的10本应该是在我15岁前(40年前),先严陆续购入的。

    当年书籍很少,每次搞到一本新书都要反复看好几遍——这也是我之前的这10本书比较“破烂”的重要原因。

    童话故事很好看,我很喜欢看。

    我最喜欢的数学家哥德尔也很喜欢看童话,他最喜欢看的童话是《白雪公主和七个小矮人》。他在谈到自己的这个爱好的时候,说:

    “Only fables,” he said, “present the world as it should be and as if it had meaning.” “只有寓言(注,这里哥德尔可能搞混了寓言和童话的区别),”他说,“才展现了这世界应有的样子,而且还好像有意义。” ——A World without time

    童话里经常出现“苹果”,而苹果也关联着众多意象:公主吃下苹果进入深度睡眠(但王子会唤醒她);图灵用毒苹果自杀——图灵在1930年代访问过普林斯顿,虽然两人没见过面,但可能他从哥德尔感染了对白雪公主童话的热爱,从而最终决定吃下一个注射了氰化物的苹果自杀;乔布斯用咬了一口的苹果作为商标……

    而哥德尔的死也很悲剧:他最终陷入疑心重重的境地,怕有人下毒害他,所以最终是饿死的(神经性厌食症——和歌手卡朋特一样)。

    BTW,今天也是著名的程序员节。祝天下所有程序员都健康!

  • assert(编程!=抽烟烫头喝着酒)

    assert(编程!=抽烟烫头喝着酒)

    国庆放假前,一直在折腾全球最大同性交友网站刚推出的spec-kit。这个项目有多火爆呢?到今天,这个工具推出短短3周,已经获得了33.1K个Star,而且迭代极快,几乎每2-3天就会有个更新。

    AI对编程的影响很大,且一般而言,Junior一点的软件攻城狮受到的冲击更大。最近一段时间,所谓的Vibe Coding更是成为一个很时髦的名词:我就经常看到各个社交媒体上出现类似“全程0代码创建一个app”的帖子,而且在VC的冲击下,大家似乎都有了一个“不好”的想法:

    编程已经不是一个技术活了。不需要专业的培训——CS的毕业生去死吧!——而只要给出命令。

    我不同意这个说法。

    我同意的是,编程不仅仅是一个技术活。从最广义的角度来说,“标准”、“规范”的制定,是最高层次的“编程”。比如说安全应用中绝对不能少的加密/解密来说,它需要高深的数学知识、物理知识,还有社会学等等诸多方面的了解。这里的很多东西已经超出了纯技术的范畴,而是进入了哲学层面。

    这上面的这些东西,哪个不需要专业的培训?我们简单地认为编程不用培训是将“编程”这个动作太过简单化了。

    单从这个角度出发,我就很容易理解为什么过去50年的技术发展大部分会出现在那些发达国家的原因。而我最近在AI编程工具上的一段亲身经历,也让我对“规范”的重要性有了更深的体会。

    =====

    在玩spec-kit之前,我用了一段时间的Kiro,很喜欢那种编程的过程:我有很多想法可以通过AI快速地进行原型开发——有些能走到底,有些走不到底。然后还接受了朋友的邀请去他公司进行了一次分享:《while(编程\=\=抽烟喝酒烫着头)》。

    当时,我比较推崇被Kiro推到一个很高的高度的VC。但是,Kiro的“收费”机制实在让我捉鸡,不得不在Discord频道里和全球开发者一起吐槽。这不,直到10月,Kiro终于大幅修订了它的收费机制,让我这个免费用户也能有500请求/月的额度了——这下,我可就更不想交钱订阅了。

    这次我测试spec-kit有了一些不一样的想法,而这是由spec-kit这个工具带来的。

    spec-kit的开发过程一共8步,其中第一步init在AI Agent之外运行,而后续的clarifyanalyze可选。

    • constitution:顾名思义,这是这个项目的“宪法”。这里提到的要求,在任何时候都不能违背。为了帮助“我们”编写这个宪法,spec-kit提供了一个很全面的模版。根据我的经验,我们对这个模版只要做很少的更动,而且TDD是“宪法”中没得商量的一个部分。而其他涉及数据隐私、开发流程等重要方面。
    • specify:这是一个重要的流程,同样也有模版。需要特别注意的是,这个文件不涉及任何技术细节(也就是如何实现的问题),只讨论要什么、为什么要的问题。最终的文档就是一个用户场景描述:
    Input: User description: “it scans pre-given directories for documents (md, pptx, pdf and mostly in Chinese), and use necessary lib to parse the contents to generate a vectorized local db. Then, it can accept queires from user, use AI agent to generate relevant responses.” User Scenarios & Testing (mandatory) User Story 1 – Document Indexing (Priority: P1) A user wants to build a searchable knowledge base from their existing document collection. They point the CLI tool to directories containing their documents (markdown files, PowerPoint presentations, and PDFs primarily in Chinese), and the system processes these documents to create a local vector database for fast retrieval. …

    可见,我只是很简单地说了我的要求:“扫描文档、向量化、保存、查询、AI返回相关的回答”。而spec-kit进行了非常详细的用户使用场景分解:文档索引、交互查询、数据库管理。

    • plan:通过这个命令,我们进入真正的技术层面:用什么来实现我们想要的东西呢?根据之前specify得到的需求和用户的指定,spec-kit可以给出非常详尽的技术框架:开发语言(Python 3.11+)、主要的依赖包(BGE-large-zh用来嵌入,FAISS用于向量存储,Ollama是本地的大语言模型……) ,以及一些其他开发要求。
    • tasks:这是真正进行开发前的最后一个重要命令。spec-kit会根据到目前为止所有的文档,生成一个完整的开发任务清单。针对我的小程序(RAG CLI),它生成了一个6阶段、共76个子任务的任务清单,涵盖了初始编程设置、编程基础设施设置、用户需求(共3个)和最后打磨。
    • implement:在Kiro的环境下,这个命令可以基本“全自动”地完成那些直截了当的任务,而且不需要人工干预,只有在明确需要用户参与、交互的时候,Kiro才会停下来。对于那些和用户需求直接关联的任务,它往往可以一路跑下去。

    可以看到,spec-kit 的整个流程,从“宪法”到“计划”再到“任务清单”,完全不是VC。它强调的是严谨的需求定义、场景分析、技术规划和任务分解。这正是专业软件工程的核心价值所在,也是目前AI无法完全替代人类的地方。

    目前,借助spec-kit,我已经做出了一个小小的原型:它索引了我历年写作的博客(md格式)和演示(PPTX)以及少量PDF文件,共300余篇,形成了一个包含1024个维度的向量数据库。可以接受用自然语言输入的问题,如:任老师对学习有怎样的见解?并在一个合理的时间内(25s)给出回复:

    我对目前的进展表示满意,并得出结论:assert(编程!=抽烟烫头喝着酒)。AI工具的强大,不是为了让编程变得廉价和随意,而是将开发者从繁琐的实现中解放出来,让我们能更专注于定义问题和规划蓝图这些更高层次的创造性工作。这非但不是对专业性的削弱,反而是提出了更高的要求。

  • 论一个小编的自我修养——从一篇新浪文章说起

    论一个小编的自我修养——从一篇新浪文章说起

    今天一大早看到这么一条来自新浪财经的消息

    看完标题,我有两个问号:

    1. 什么是“哥德尔测试”?
    2. 哪三大数学猜想?

    我不负责任地做个断言:国内知道哥德尔的人不多,看过他相关书籍的人不多,知道并深刻理解他的著名定理的人更少——而肾上鄙人在下我,算是一个。

    我从来没有听过“哥德尔测试”。在AI或者说计算机领域,著名的测试是“图灵测试”,但和“证明数学题”关系不大,它更多地是测试智能体能否“冒充”(imposter)一个人——哪怕是一个三四岁的小孩。

    为了避免我的“武断”妨碍了我的判断,我找到了消息中提到的原文。原文也没有定义,而只给出了一个说明:evaluating whether a model can produce correct proofs for very simple, previously unsolved conjectures.(评估一个模型1是否能就非常简单但之前未曾解决的猜想,给出正确的证明)

    而且整个关于“godel test”的搜索,也没有任何一个权威、可靠的地方给出定义。

    所以,我的推测是:这个Godel Test应该是一个新造的词,算是对哥德尔的致敬。

    以上的研究,算是回答了我的第一个问号。

    第二个问号:哪三大数学猜想?

    如果只看标题,我会想到:黎曼猜想、孪生素数猜想、哥德巴赫猜想……

    显然,如果GPT5解决的是这三个猜想中的任何一个,新闻界就不会这么安静了。我又仔细看了一下论文中提到的喂给GPT5的5道题目,显然它们都属于submodular maximization, a subfield of combinatorial mathematics with many applications in AI:一个组合数学中的分支,在AI中有很广泛的应用。

    那么,我会将这样的题目称为“标题党”:没能恰当地表述原文的核心思想:这三个被证明的猜想,根本称不上“大”。

    =========

    原文提到了陶哲轩(Terence Tao)对AI的一个印象。他和OpenAI的o1模型协作了一段时间,得出如下印象:就感觉像是在指导一个平庸但不是完全不行的研究生...seemed roughly on par with trying to advise a mediocre, but not completely incompetent, graduate student)。

    (我最近也一直在 调戏调教AI写程序,我的感觉和他一毛一样。)

    写到这里,我想到了一位物理学家对问题难度的定义。《混沌——科创新科学》这本书里提到(p3):

    就像其他物理学家一样,费根鲍姆2使用一种简短的“行话”来评价这些问题。他会说,“这种事是显然的”,指任何熟练的物理工作者通过适当思考和计算就能够理解的结果。“并非显然”,指的是那些赢得尊重和诺贝尔奖的工作。而对那些最艰难的问题,那些只有长期深入钻研宇宙奥秘才能有所领悟的问题,物理学家们备用的词语则是“深刻”。

    在我看来,只有“深刻”的问题才能称为“大”问题。费根鲍姆在1974年研究的正是一个“深刻”的问题:混沌。


    1. 这里的模型特指LLM模型。 
    2. 爱德华·阿尔伯特·费根鲍姆(Edward Albert Feigenbaum,1936年1月20日—),生于美国新泽西州,计算机科学家,专长于人工智能,经常被人称为专家系统之父。为1994年图灵奖得主。 
  • “没得选”才最可怕

    “没得选”才最可怕

    写在前面

    前一篇文章《认证、授权、人脸识别——国产App的信任危机》发布后,收到了远超我预期的回复和讨论。非常感谢每一位分享观点、提出质疑的朋友。这些反馈让我意识到,我们所感受到的“验证之苦”,并非孤例,而是一种普遍的集体情绪。

    其中,有几类非常有代表性的观点,反复出现。它们构成了我们理解这个问题的关键。这篇文章的目的,就是回应这些声音,并试图将讨论引向一个更深的核心:选择权

    我先声明一下,上篇文章确实是在AI的帮助下完成的。我提供了核心论点和一些我认为ridiculous的实例,然后做了所谓的proof reading/checking。我想说的不是什么横空出世的全新概念,AI完全可以帮我写出那些common sense。本篇也是如此。(图片是用另外一个AI生成。)

    “这不都是法律要求的吗?”——合规的底线与商业的上限

    这是最常见的,也是最有力的一条反驳。

    这个观点说对了一半。中国的法律法规,确实要求网络运营者在提供服务时,对用户进行实名认证。但问题的关键在于:法律要求是什么?而App实际做的又是什么?

    法律要求的是“后台实名”,是为了在出现问题时能够追溯到责任人。但这并不意味着平台有权在我第一次打开App,只想看看它长什么样时,就用一套“手机号+验证码”的组合拳把我拦在门外。

    《个人信息保护法》明确规定了“最小必要”原则,即“处理个人信息应当限于实现处理目的的最小范围,不得过度收集个人信息。” 一个新闻App,阅读新闻的“最小必要信息”是什么?一个电商平台,浏览商品的“最小必要信息”又是什么?绝不是我们的手机号,更不是我们的人脸。

    因此,当平台以“合规”为由,理直气壮地索取超出必要范围的个人信息时,我们看到的,其实是商业利益假借合规之名,进行的一场数据“圈地运动”。它们巧妙地混淆了“合规的底线”与“商业的上限”,而我们用户,则成了这场混淆的最终买单者。

    “不喜欢就换一个啊!”——选择的幻觉与市场的失灵

    “用脚投票”是市场经济的黄金法则,听起来无懈可击。但现实是,我们常常“没得选”。

    这早已不是一个简单的“A或B”的选择题,而是一个系统性的“生态题”。当过度验证和信息索取成为整个行业的“潜规则”时,用户的选择权就被釜底抽薪了。我们以为自己在做选择,其实只是在不同的笼子里挑选一个看起来稍微舒服点的姿势。从A坑跳到B坑,本质上没有区别。

    更何况,许多头部应用凭借其强大的网络效应,早已将我们深度“绑定”。我们的社交圈、工作流、消费习惯都建立在这些平台之上。“换一个”,说的轻巧,但背后是割裂社交关系、重塑生活习惯的巨大成本。

    所以,“不喜欢就换”的论调,忽略了用户在当前市场格局下的真实处境。它将一个本应由平台和监管共同承担的生态治理责任,轻飘飘地甩给了势单力薄的个人用户。我们需要的不是在烂苹果里挑一个不那么烂的,而是共同呼吁,让市场里能长出真正健康的好苹果。

    为什么“有得选”如此重要?

    这引出了本次讨论最核心的部分。当“没得选”成为常态,我们失去的,绝不仅仅是另一款App。

    首先,选择是防止“傲慢”的唯一刹车。

    当一个平台知道你“离不开”它时,它优化的目标就不再是你的体验,而是它自身的利益——更高的广告加载率、更激进的数据收集、更随意的规则变更。用户的感受被排在了次要位置。选择权的存在本身就是一种威慑。哪怕只有一小部分人有离开的可能性,平台在做决策时就必须有所忌惮。当这种可能性消失时,傲慢便滋生了。

    其次,选择是制衡权力的最后防线。

    当平台形成事实上的垄断,它与用户之间就不再是平等关系,而是一种准权力关系。平台制定规则,用户必须遵守。在这种不平等的结构中,用户唯一的制衡手段,就是“用脚投票”的权利。当这条路被堵死时,我们就从“用户”沦为了“数字农奴”,被捆绑在平台这片“土地”上,只能被动接受规则,贡献数据,消费内容,却没有迁移的自由。

    最后,选择是个人尊严的体现。

    强制性的、不加解释的验证流程,之所以让人反感,不仅是浪费时间,更是因为它传递了一种居高临下的信息:“你,是不被信任的;你的感受,是不重要的。” 它将一个本应双向合作的关系,变成了单向的审查。而拥有选择,意味着“我”是主体。我的同意是有价值的,是需要你通过优质服务和尊重的态度来换取的。当“没得选”时,我们便成了被管理的对象,这种被动和无力感,是对个人尊严的持续侵蚀。

    结语:我们是数字公民,不是数据矿产

    我们是数字世界的居民,不是数据世界的矿产

    我们的每一次点击,每一次授权,都不应是一次无奈的妥协,而应是一次知情且自愿的托付。当选择权被剥夺,我们失去的不仅是便利,更是作为数字公民的自主与尊严。

    温水正在慢慢升高。每一次我们对不合理的验证习以为常,每一次我们对自己说“算了,就这样吧”,都是在默许自己的权利边界被再次侵蚀。

    因此,让我们重新变得“计较”和“敏感”起来。

    下一次,当一个App用繁琐的验证和霸道的条款考验我们的耐心时,请记住:你不是在完成一个麻烦的注册流程,你是在用行动为我们想要的数字世界投票。

    我们投下的每一票,都在决定这个世界的未来是走向开放与尊重,还是走向封闭与控制。

  • 三个AI做一道小题目

    三个AI做一道小题目

    昨天去好朋友张总的公司参加了一次分享。分享人是Sasaya-san,一位资深的IT人员。

    他除了展示他平时如何使用公司内置AI平台、公共AI平台以及本地AI平台(如Ollama)来帮助他总结资料、提取要点外,还展示了他向AI提问的一些框架,如:5W1H,MECE1,PREP等。这些框架的介绍让我有了新的思路和想法。Arigato, Sasaya-san!

    今天在某视频平台看到了一道有意思的题目。这道题目不算太难:

    简单翻译一下:某人(Amrit)和他爷爷同一天生日,爷爷的岁数是他的3倍。生日气球送来的时候被弄乱了。而这4个生日气球是“6 8 7 2”(如图)。请问,Amrit几岁?——据说只有30%的人可以答对。

    通过简单的计算,就可以知道:$26*3=78$。26 78正好用完四个气球。

    (你做到这里停下了笔,开始奇怪为什么这么简单的题目只有30%的人能做对,“自然”得出结论说歪果仁的数学真的很差……)

    这道题目有一个小陷阱——“气球被弄乱了”。弄乱不光可以是先后顺序乱了,还可以是“上下”顺序乱了!所以,6这个气球其实……可以是9来的!而$29*3=87$,也正好用完4个气球!

    所以,这道题目有两个合理的答案:Amrit要么26岁,要么是29岁。

    ==========

    题目做完了,我在想,能否让AI来试试这个挑战呢?

    我询问了:DeepSeek,豆包以及Gemini Cli。前两个是图片直接上传,最后一个是用文字转述。

    结果如下:

    DeepSeek(深度思考)

    1. 上传图片。
    2. 基本读懂题意,但受到图片中“30%”的干扰,然后开始blahblah……
    3. 打断DS,明确告知不用理睬“30%”。
    4. 得到26的答案。(37秒)
    5. 提示:The balloons are muddled up. It gives you an important hint.
    6. 还是只得到26的答案。(67秒)

    豆包

    1. 上传图片。
    2. 得到Amrit只有2岁(他的爷爷6岁)这个讲不通的答案。
    3. 提示:你必须用完4个气球。
    4. 得到26的答案。
    5. 提示:The balloons are muddled up. It gives you an important hint.
    6. 还是只得到26的答案。

    Gemini CLI

    1. 因为我用的是CLI,所以没有上传图片,而是用文字描述。(也就去掉了30%这个干扰项)。
    2. 得到26的答案。
    3. 提示:The balloons are muddled up. It gives you an important hint.
    4. Gemini恍然大悟。它“认为”类似这样的经典谜题中,这样的提示表明有一个数字也许可以看成另外一个数字。
    5. 判定如果6翻个个儿,就变成了9
    6. 重新计算,得到新的答案29

    (Gemini最后的推理过程)

    综合评分

    DS和豆包差不多在伯仲之间。DS受到干扰项的影响,而豆包第一个答案完全没有道理。而经过第二个提示,两者都未能找到第二个答案。所以我觉得能给到45-50分。

    而Gemini第一次给出了一个答案,经过提示给出了第二个答案。我觉得可以得到80分左右。

    (该图片由Nano Banana生成)

    反思

    这道题目,我一开始也没有想到第二个答案,也需要再想想才能得到。一方面是这样的题目做得不多,二方面可能还是有思维定式。

    结合昨天Sasaya-san的演讲,得到一个有用的hint就是:在使用AI提升自己的生产力的时候,还是不能太随意、太vibe,人类的充分思考和方法论的引入还是有用的——否则,你真不知道ta是怎么想的。我将其称为在不确定性下追求确定性的一种努力。


    1. MECE: Mutually Exclusive, Collectively Exhaustive. 大概可以翻译为:不交叉、不遗漏。 
  • Reflect on IB

    Reflect on IB

    昨天,应肾上的老朋友保罗的邀请,为湖大的校友做了一次有关IB教育的分享。上次分享还是在2022年,时隔三年,有了一些新的感受。

    这次的分享大大超时。本来我想,2个小时绰绰有余了,不过最终来到了3个小时,5点才结束——不过这样也好,正好有蹭饭的最好理由了。

    (本图由豆包生成,经过三次修订。)

    ==========

    有关教育、特别是国际教育方面的分享,如我所判定,来的人不会太多。我想,可能有两个原因:

    首先,大家应该都听过国际教育(以及学校),但大部分人——特别是孩子们——没有亲历过。自己的国际教育可能只限于自己的出国留学经验。

    其次,对国际教育所采纳的体系的适用性有着怀疑。它也许很好、很棒,但是不是适合我的孩子呢——尤其是考虑到国内教育体制的“约束”,这个顾虑就更深了。

    ==========

    这次的分享,我讲了5个数字:

    • 1个目标:终生学习者。对“学习”的定义,我们要宽容,不是只有看书、进课堂上课才是学习,广而言之,看看小姐姐教你如何做番茄炒蛋也是学习。
    • 2个动作:探究(Inquiry)和反思(Reflection)。简单说,就是多问和“吾日三省吾身”。
    • 3个关键:声音(Voice)/选择(Choice)/拥有(Ownership)。这个Ownership比较难找中文的对应词。简单说,就是首先要有发声:孩子的声音、父母的声音——其他都是噪音。有了声音才能有选择、才能做出选择。而只有自己的选择,才会有Ownership——再苦再卷都是自己的选择。
    • 7个核心概念
    • 6个主题

    作为一个尝试,我这次请到场的家长和孩子们进行一次UOI(Unit Of Inquiry)的设计。从效果来看,当然比不上专业IB老师的设计,但作为第一次尝试,还是很有亮点的。孩子的充分参与和勇敢展示是其一,其课程中的探究线和探究设计都有很不错的创意。

    ========

    课程临近尾声的时候,我提出了几个进行最终Reflection的问题,我一并放在这里:

    • 1-2-3-7-6是什么?
    • 这些主题和关键词是否与家庭有关,也就是说,受到家庭组成、物质条件、父母教育程度等等的影响——以至于和你的价值观相悖、或者无法使用?
    • 在使用这些主题、关键词进行孩子教育的设计时,是否一定要求父母是专家,有很多教育学的背景和很多辅助的东西?
    • 是否一定需要父母的介入和指引?
    • 这些东西是不是所谓的“高科技”?在今天的分享前,是不是大家已经自觉、不自觉地有了应用?
    • 这些主题和关键词,和孩子年龄段有关吗?
    • 作为“大人”,是不是也能用这样的框架?
    • 你能想到哪些马上能做的事情?

    想通了这些问题,也许就能解不少惑。比如:国际教育真的就只是“快乐”么?如果是快乐的,这样的快乐来自哪里?这样的一套思考体系,是不是很接近于所谓Critical Thinking了?有了这样的CT,对自己的工作、生活、学习有帮助吗?如果不能有帮助,那么是哪里出了问题?

    (欢迎随意打赏并留言索取完整PPT。)

  • 认证、授权、人脸识别——国产App的信任危机

    认证、授权、人脸识别——国产App的信任危机

    最近我在苹果手机上安装了几个新的国产App。安装过程没啥可说,但使用起来却让我很“难受”。为什么我们需要经历如此繁琐的身份验证流程?手机号、短信验证码、实名认证、人脸识别——仅仅是想看看这个平台上有什么内容,就要经历这样一套“安全大礼包”么?

    这让我想起了在继续聊我的AI编程中提到的那种无奈:

    我就是注册一个小卡拉米的用户,我需要手机认证、实名认证,登录也要手机认证。何必同志,何必呢!

    在我看来,这不仅仅是一个用户体验的问题,更是一个关于信任的深层次问题。

    层层设防:过度的身份验证

    想象一下这个场景:你下载了一个新的购物App,首先需要手机号注册,然后是短信验证码,接着是实名认证,有时甚至还需要人脸识别。如果你只是想看看这个平台上有什么商品,这一系列的“安全措施”是否显得有些过度?

    更荒谬的是,有些App在你已经通过手机登录后,还要求你接收同一手机的短信验证码。这种做法并没有实质性地提高安全性,只是增加了用户的操作步骤——这就是典型的形式主义安全。

    我理解平台需要确保用户身份的真实性,特别是涉及到金融交易的场景。但问题是,为什么连最基本的浏览功能都需要如此严格的身份验证?在国外的许多平台,你可以先浏览内容,只有在需要进行交易或使用特定功能时才需要登录。

    这种差异反映了一个根本性的问题:信任的缺失

    信任危机的根源

    这种层层设防的身份验证机制,表面上看是为了保护用户安全,但深层次的原因让人深思。

    说白了,这背后有几个驱动力:

    首先是数据的诱惑。每一个真实身份背后,都是一座待挖掘的金矿。平台知道你的真名、手机号、甚至长相,就能更精准地给你推送广告,更准确地分析你的消费习惯。在这个数据就是金钱的时代,谁不想要更多、更准确的用户信息呢?

    其次是简单粗暴的风控思路。与其花大力气开发智能的风控系统,不如直接要求所有用户实名认证——这样既省事,又能向监管部门“交差”。至于用户体验?那是次要的。

    还有就是责任转移的心理。通过收集大量用户信息和多重验证,企业可以在未来可能发生的纠纷中为自己开脱:我们已经尽到了所有可能的验证义务,出了问题不能怪我们。

    但这种做法的代价也很明显:

    用户体验变得糟糕,特别是那些只想“试试看”的潜在用户,往往在繁琐的注册流程面前就放弃了。更可怕的是隐私风险——收集这么多个人信息,一旦发生数据泄露,后果不堪设想。

    最讽刺的是,过度的身份验证反而让用户产生逆反心理:“为什么要怀疑我?”信任感不但没有增加,反而在下降。

    国内外的差异

    在国外的许多平台,身份验证通常采用渐进式的方式:你可以先匿名浏览,需要更多功能时再逐步完成身份验证。这种方式既保护了用户隐私,又提供了良好的用户体验。

    X(Twitter)的启示:

    最典型的例子就是X(原Twitter)。作为全球最大的社交媒体平台之一,拥有数亿用户,但它的登录过程却异常简单:邮箱或用户名+密码,就这么简单。你可以立即开始浏览内容,发表推文,参与讨论。没有手机验证,没有实名认证,更没有人脸识别。

    这种简洁的设计背后,体现的是对用户的基本信任:我们相信你是一个正常的用户,除非你的行为证明了相反。而当真的出现问题时,平台会通过行为分析、社区举报等方式来处理,而不是一开始就把所有用户都当作潜在的问题用户。

    信任的哲学差异:

    相比之下,国内的许多App似乎采取了“先验证,后使用”的策略。这种差异不仅反映了技术实现上的不同,更反映了对用户的基本态度:是将用户视为需要被验证的对象,还是将用户视为值得信任的合作伙伴?

    就像我在继续聊我的AI编程中提到的:

    那么转向国内的AI应用如何?当然没问题,只是我不能理解的是,我就是注册一个小卡拉米的用户,我需要手机认证、实名认证,登录也要手机认证。何必同志,何必呢!

    规模与复杂度的悖论:

    有趣的是,往往是那些用户规模相对较小的国产App,却要求最复杂的身份验证流程。而像X这样服务全球数亿用户的平台,反而能够保持简洁的登录体验。这种悖论说明,复杂的身份验证并不是因为技术难度或用户规模,而是因为设计理念的根本差异。

    二步验证的架构差异:

    还有一个深层的差异体现在二步验证的实现方式上。海外应用在需要二步验证时,通常使用私人开发的应用程序(如Google Authenticator、Authy等),这些工具完全由用户控制,生成的验证码只存在于用户的设备上。

    而在国内,所谓的“二步验证”通常依赖于政府控制的基础设施——主要是几大国有电信运营商的短信系统。这意味着每一次“验证”实际上都要经过一个中心化的、政府可控的节点。

    这种差异不仅仅是技术选择的问题,更反映了两种截然不同的信任模型:一种是基于用户自主控制的去中心化信任,另一种是基于中心化权威的集中式信任。前者赋予用户更多控制权,后者则将控制权集中在系统层面。

    其实可以做得更好

    我并不是反对身份验证,而是觉得现在的做法太粗暴了。完全可以做得更聪明、更人性化一些。

    比如说,可以根据功能的重要程度来分级:看看商品信息不需要登录,但要购买就需要注册;浏览公开内容随便看,但要发表评论就得验证身份。这样既保护了隐私,又满足了安全需求,不是很好吗?

    再比如,现在的技术完全可以通过分析用户行为来判断风险,而不是一上来就要求提供所有个人信息。一个正常用户和一个恶意用户的行为模式是不同的,智能系统完全可以识别出来。

    最重要的是透明度。如果一定要收集我的信息,至少告诉我为什么需要,会怎么使用,存多长时间,会不会给别人。现在很多App就是一句“为了您的账户安全”就把所有要求都打包了,这种解释等于没解释。

    还有就是给用户真正的选择权。不要总是“不提供就无法使用”的强制选择,而是让用户自己决定:愿意提供更多信息换取更多功能,还是保护隐私但功能受限。这样的选择才是真正的选择。

    技术是可以向善的。现在已经有很多新技术可以在保护隐私的前提下完成身份验证,关键是平台愿不愿意投入成本去做这件事。

    信息孤岛:当创新被扼杀在摇篮中

    这种层层设防还带来了一个意想不到的后果:信息孤岛的形成。

    每个平台都设置了严格的身份验证门槛,表面上是为了防止数据被爬取,但实际上是在阻碍信息的自由流动。就像我在继续聊我的AI编程中提到的那个例子:我想开发一个简单的程序来获取电影评分信息,结果被某瓣网站的严格防爬措施给拦住了。

    创新,除了需要脑子,还需要信息的充分流动。大创意是在无数个像我这样的小点子的基础上最终萌生的。

    每个平台都成了一个封闭的盒子,里面的数据谁都不能碰。结果就是,真正想做点有意思东西的个人开发者被拒之门外,而那些有资源的大公司却能通过各种渠道获取数据。

    国外的平台虽然也有数据保护措施,但很多都提供了开放的API接口,让开发者可以在规则范围内使用数据。这种开放性催生了无数创新应用。

    相比之下,国内的做法就像是把所有的积木都锁起来,然后抱怨为什么没人能搭出好作品。这种思维方式,长远来看对整个生态都是有害的。

    结语:重建数字时代的信任

    信任是双向的。当平台不信任用户,用户自然也会对平台产生怀疑。在这个数字化时代,我们需要重新思考如何构建一个基于互信的网络环境。

    信任危机的代价:

    过度的身份验证不仅没有增加安全感,反而可能加剧了信任危机。用户开始质疑:为什么一个简单的应用需要知道我这么多信息?这些信息真的安全吗?平台是否在利用我的数据牟利?

    同时,这种做法也阻碍了信息的自由流动和创新的萌发。当每个平台都成为一个封闭的孤岛,当每个创新想法都被繁琐的验证流程扼杀,我们失去的不仅仅是便利,更是整个互联网生态的活力。

    技术的初心:

    回到技术的初心,互联网的诞生是为了连接世界,促进信息的自由流动。而今天的许多做法,似乎在背离这个初心。我们需要问自己:技术的发展是为了让生活更美好,还是为了让控制更严密?

    未来的希望:

    希望未来的App设计能更多地考虑用户体验和隐私保护,找到安全、便捷与开放之间的最佳平衡点。希望监管部门能够更加精准地制定规则,避免"一刀切"的简单做法。希望技术公司能够承担起更多的社会责任,不仅仅追求商业利益,也要考虑对整个社会的影响。

    毕竟,技术的终极目标应该是服务人类,促进创新,而非控制人类,阻碍进步。在这个数字化转型的关键时期,我们每个人都有责任推动一个更加开放、透明、可信的网络环境的建设。

    只有这样,我们才能真正享受到技术进步带来的红利,而不是被技术所束缚。

  • 一道GPT5没能答对的题目?

    一道GPT5没能答对的题目?

    今天晚上10点,会有一件很大的事情:凹凸曼将宣布ChatGPT 5!他甚至发了一张非常震撼的图——星战迷当然会一眼懂:

    国外有一些人已经提前拿到了邀请,开始了测试,据说表现可圈可点,在编程、推理、科学、数学等方面都十分强劲,110先。

    一些海外的up主也纷纷贴出了自己的测试结果,其中有这么一位老兄提到,他给了GPT5十个问题,它一次(最多两次)答对了9题,只错了1个逻辑推理题!

    一道GPT5都没能答对的题目!

    题目是这样的:

    (图片来自相应公众号)

    这个题目有两个难点。第一个是,如果有两个答案正确,那么简单的那个答案更正确。第二个是,作为读者需要深刻理解英文原文中mistruthlies的区别。

    lies容易理解,就是“撒谎者”。如果A是一个真的陈述(比如2+2=4),那么此人知道A为真,但偏偏会回答“否”(也就是他会说2+2=4为假,2+2!=4)。

    mistruth比较绕,我愿意将其翻译为“误信者”。什么意思呢?同样对于2+2=4这个陈述,他认为(相信、确信)2+2!=4,也就这么表达出来:2+2!=4注意,他说的是实话,但是是“错误”的实话,他并没有撒谎!

    因此,这道题目翻译过来,大概就是:

    Amy是个误信者,Sam是个撒谎者(骗子)。你没法分辨谁是谁。你可以想他们中的一个问一个问题,来找到A/B两条路中哪一条通往藏宝洞。你应该问什么问题(如果两个问题都能达到效果,那么更简单的问题为正确答案)。

    • A: 如果我问你的sister,哪条路是对的,她会怎么说?
    • B: 你姐姐叫什么名字?
    • C: 哪条路通往藏宝洞?
    • D: 要你猜的话,我会走哪条路?
    • E: 藏宝洞里的藏宝是什么?
    • F: 你sister的电话号码是啥?

    关于此类“君子/小人”的逻辑谜题,我真的强烈推荐斯穆里安写的《这本书叫什么?》。在这本书的第12章《德古拉是否还活着?》里,他定义了四种特兰西瓦尼亚(Transsilvania)的居民:

    我在特兰西瓦尼亚那会,当地居民大概有一半是活人,而另一半是僵尸。活人和僵尸在外表上没有任何区别,但是――至少在特兰西瓦尼亚――活人总是说真话而僵尸永远撒谎。但更复杂的情形是,特兰西瓦尼亚一半的居民完全疯了,他们的信仰中是非完全颠倒:他们认为所有真的命题是假的,而假的命题却是真的。另一半完全正常并知道哪些命题真、哪些命题假。因此特兰西瓦尼亚的居民有四类:清醒人,疯癫人,清醒鬼,疯癫鬼。清醒人说的为真;疯癫人说的为假;清醒鬼说的为真;疯癫鬼说的为真。举例来说,清醒人会说2+2=4;而疯癫人会说不是(因为他确实认为不是);清醒鬼会说不是(因为他知道是但撒谎);疯癫鬼会说是(因为他认为不是但说到他相信什么时会撒谎)。

    如果将这四种人映射到题目里提到的两种人,那么Sam显然是个清醒鬼——她知道哪条路才是对的,但会撒谎;而Amy显然是个疯癫人——她知道哪条路是“对”的(但实际是错的)而说实话。

    由于我受《这本书叫什么?》的影响很深,所以一开始我很“理智地”认为答案A才符合正确答案的特征——事实证明,这个答案也是对的。请读者自行分析。

    但在分析A的过程中,我发现C也可以达到效果。分析如下:

    假定正确的道路是A。你问:正确的道路是哪条?

    如果问到的是Amy(误信者),那么她会“认为”正确的道路是B,于是老老实实说“B”;如果问到的是Sam(撒谎者),她知道A是正确答案,但会撒谎说“B”。

    所以,无论他们的回答是什么,你只要选择另外一条路就对了。这个答案比A更简单,所以更应该成为正确答案。

    (注意,如果是常规的“君子小人”局面,在不知道谁是君子、谁是小人的前提下,问题C是不起作用的。)

    GPT5选择了A作为答案。我很难说它判断错了,因为A确实也能达到目的(但不需要反转得到的回答)。只是出题的人太刁钻,在这个题目的环境下,放入了一个非常像错误答案的正确答案。

  • 继续聊我的AI编程

    继续聊我的AI编程

    18号的那篇Kiro,你真的很棒!为我带来了难得的破万浏览量——但没有任何打赏。不是我写的有多好,讨论的问题有多深刻,而是因为:

    好多人没能用上,而我是“最早”体验的那一批。

    在国内想好好编程,搞点好玩的东西,真的很难。

    您所在的区域不在我们服务范围

    自从最早出世的ChatGPT将中国大陆地区列为“不服务”地区后,这就成了国外AI公司的标准条款,而且越来越严格。这不,香港SAR都被一些应用(比如NotebookLM,比如Gemini CLI)归为“不服务”地区了。

    那么转向国内的AI应用如何?当然没问题,只是我不能理解的是,我就是注册一个小卡拉米的用户,我需要手机认证、实名认证,登录也要手机认证。何必同志,何必呢!

    也许,有人会批评我:你老老实实用国内模型不就好了?国内AI的发展有目共睹!很好!这个问题我稍后探索。

    信息孤岛终将扼杀创新

    第一次通过Kiro的Spec方式开发了复古Hangman游戏后,我曾放言:等我用“抽烟喝酒烫头”的Vibe模式再来搞一个!

    我的想法是这样的:我经常会在我的硬盘里堆积了好多电影——也不算太多,大概20-30本的样子。如果我想看电影,我该看哪一本?我是一个不喜欢看烂片的人,所以我之前的做法是去某瓣找这些电影的评分,只有8分左右的片子才可能被我挑中。这是一个很烦的事情。

    于是我想,能不能用程序来完成呢:获得电影列表,处理一下获得片名和发行日期,程序去某瓣搜索,通过抓取关键信息(比如评分)我就可以很快完成这个工作。

    某瓣原来有API接口,但早就关闭了。所以我不能用最最简单直接的API方式开发,而要用别的方法。

    Kiro下的 抽烟喝酒烫头Vibe开发很顺利,而且用我自己的站点测试完全可行,但是:某瓣防页面爬取、内容仅登录(需要SMS认证)可见,就将我的想法从底层给粉碎了。

    当然,这么做的不仅是某瓣,还有很多很多……

    这是很悲哀的一件事情。我宁可你对API收费,限制使用条件——就像只存在于传说中的X、FB那样,也不愿看到这样的情形。

    创新,除了需要脑子,还需要信息的充分流动。大创意是在无数个像我这样的小点子的基础上最终萌生的。

    生产力爆炸和非线性

    农业社会,落后地区追赶先进地区,可能需要数百年;工业社会,几十年;信息社会,10年;AI社会,3-5年。追赶的速度,是肉眼可见的快。

    生产力发展了,生产关系就可能成为桎梏——这是马克思说的。值得注意的是,这不代表在落后的生产关系下不能有生产力的发展,而是表明生产力发展到了一定程度,生产关系不改变的话,就会出问题。

    肾上鄙人在下我认为,信息孤岛就是不合理的关系。

    当然,更严重的还有国内AI的莫名“过滤”。

    AI模型动辄几百亿参数,且不论非线性是不是在模型中起作用,但肯定没有人知道这个参数从0.1变成0.1000000001后,模型会怎样表现。如果人为地设置很多“参数”和“禁区”,我认为是会影响整个模型的性能的。当然,后期处理也不是没有办法:不动模型,而是加一个过滤层,在生成内容后加以过滤。

    不过,更大的问题将继续存在:随着AI根据“新”的内容继续“进化”,它看到的东西就只能是被过滤后的东西,基于这些而进行后续训练的输出,其品质我是会打问号的。

    我用的三个IDE的横向评测

    目前,我常用的是VSC,Trae(VIP,等Solo模式邀请)和Kiro。我不是专业程序员,也不会写很多代码,所以我只说我的一些使用心得。

    可用性:VSC。你不是Trae的VIP,你就一定会排队,完全失去了编程的节奏。Kiro的可用性叫做50-50。每天我的9点到20/21点之间,Kiro表现神勇,毫无等待。你甚至可以感受到Kiro想要帮助我这个菜鸟的迫不及待的热情。但在另外一个12小时时间段,Kiro就一定会处于不可用状态。所以,我现在每天早上打开Kiro,第一个问题就是“Are you OK?”

    我的猜想是,在我的9-21点,美国的程序员们都下班了,所以对Kiro的调用额度就可以转移到我身上了;到了我的21-9点,美国的程序员们正在认真工作,所以我就用不上了。

    帮助性:Kiro。我有时(比如Kiro不可用的时候)会切换的别的IDE,试图让它完成Kiro未竟之事业。但VSC、Trae的表现令我失望:它不能很清楚地知道“原来”是咋样,而一意孤行地用它的思路去完成——而且这个思路还不一定是我编程所用框架下的最佳实践。反过来,Kiro很清楚我要干什么也知道别的AI干了什么,可以很清楚地清理代码,保持思路而一往无前。

    这也提醒我们,除非必须,否则不要随意切换你的IDE

    和AI的交流

    扯一点题外话,怎么和AI交流?在我使用我的编程工具的时候,我已经决定用英文。为了测试,我在Kiro下曾经耗光了一个Session的中文对话和一个Session的英文对话。我的结论是:英文交流好于中文交流。

    我想,这里有很多因素。

    一个是英文是自然断词的,AI提取我说话中的语法要素简单多了。

    另一个是语境和词汇的发展。不得不说,中文的技术单词大量来自英文的翻译——有些翻译得很不错。我在之前一些文章中,提及了语言的先进性:语言是文化、科技、生活……的产物。一种语言的先进性不是由讲这个语言的人数决定的,而在一定程度上体现了讲这个语言的人的文化、科技、生活……的先进性。简单的说,就是100个中学生讲的话加起来也不会比1个(真正的)博士讲的有道理、更先进。

    这也是我一再强调,学习一门外语(特别是英语)的重要性。

  • Kiro,你真的很棒!

    Kiro,你真的很棒!

    先说我的“结论”:

    • 10小时(分两天)较专注的编程
    • 全程AI代码生成,0人工代码,只参与了前期需求定稿
    • 产品:一个复古样式的Hangman猜单词游戏

    【图一:游戏启动】

    (项目仓库地址

    个人编程经验

    我个人算有一些编程的经验,近几年主要用PHP和TypeScript写我的个人站点,用C++写一些算法题。对各类开发工具有一定了解,对当今技术趋势有一定了解。

    总体过程

    16号晚上下载了Kiro,先用它对我现在在重写的“任氏有无轩”项目进行了一两个测试,感觉模型可以(直接Claude 4),速度可以(不用等),结果可以。然后试图创建一个“大”程序……到晚上,放弃。但积累了一些过程性体验和经验。

    17号上午,决定用一个比较“小”的程序——也就是Hangman猜英文单词——入手。当天编程时间较多,估计在7-8个小时,进入基本可玩状态(但有一个后来发现的问题)。

    18号上午,修正了AI调用的问题,加入了一些修饰功能(如个人进度跟踪等),用时3小时左右。

    全程10个小时中:

    1. 人工输入:确定需求、涉及和任务(下文详述);手工干预一些设置;现场输入;点击“运行”让Kiro执行命令。也就是说,人工的输入已经来到了“最低”限度。
    2. AI产出:分析、编码、纠错、提示人机交互。

    详细过程

    第一天

    Kiro的工作流程很有意思。Kiro会提示你用“Spec”的方式来进行开发。

    什么是“Spec”式开发?我的理解是,用户作为“甲方”只管提出要求,而Kiro会根据它的经验,进行进一步的分解,最终形成3个供后续开发使用的文件。

    我的第一步工作(也算是最大的输入工作)是创建了一个spec.md文件,写下了我最根本、最基本的要求,全文如下1

    # Objective
    
    To build a retro Hangman game using latest technology and a beautiful UI.
    
    # Tech requirements
    
    1. Typescript, with framework support (say Nuxt)
    2. Elegant UI, such as Tailwind, Flowbite
    3. Use locally installed Ollama qwen3:1.7b to get a random word
    4. Show correct letters and guessed letters.
    5. Every failed attempt will decrease your "life" and show progress accordingly.
    6. Display "Win" or "Lose" accordingly.
    

    Kiro看了这个文件,生成了三个新文件:requirements.mddesign.mdtasks.md

    1. requirements.md是一个比较结构化的文档,对于每个需求(requirement),有“用户叙事”(User Story)和“验收标准”(Acceptance Criteria)。对这个文件,用户应该花一些心思进行修订。
    2. design.md是一个技术设计文档。其中规定了应用使用到的技术栈,Kiro还贴心地画出Mermaid流程图让“甲方”更好地理解程序整体架构。对这个文件,用户应该花很多心思进行审阅,因为技术栈的选择对整个程序的开发速度和难度至关重要。
    3. tasks.md是一个具体指导Kiro开发的详细技术文档。我这个Hangman程序,最终有13个一级任务,涉及项目自举、后台准备(如难度、游戏状态、游戏逻辑)、界面、AI调用、个人成就、集成、单元测试、集成测试等重要节点。对于每个一级任务,Kiro会将它分解为一些二级任务以及更小的待实现功能点。用户应该认真地审阅这个文件,但不用过细。我就只看了一级任务和一些二级任务。

    这三个文件一旦确定,就可以进入Kiro自驱动的开发。

    整体而言,第一天的开发还是比较顺利的。我只进行了两次代码提交,就已经有了一个还可以看的界面,游戏逻辑已经基本就位,还加入了一些音效反馈。

    这一天的工作中,有不少是耗在了调用外部AI以及相关的工作上。我弃用了本地Ollama提供单词的想法,申请了豆包API,花了很多时间调试提供给豆包的提示词,调整参数(为的是在速度和准确度间找到平衡)。最终在测试中得到较好的结果。

    第二天上午

    在第二天上午的试用中,我发现了一个重大问题:程序在找单词的时候,一直在所谓fallback的词库里选择单词,游戏因此不具备了可玩性。

    (我手动修改了程序中的Fallback词库,使其只包含无意义的一些中文字。这样,我就能判断程序是否真正用了AI提供的单词。)2

    我和Kiro进行了长时间的对话,而Kiro也非常配合,通过不同的API调用方式,最终找到了问题,并完成了最有突破性的修订(见这个Git Commit)。之后我又对UI提出了一些改进意见,Kiro也都一一完成。

    第二天的另一个重要功能,是加入了所谓的“个人进度”:你玩了几次游戏?各个难度的准确率是多少?——这也是我一开始对Kiro的要求。而Kiro显然不满足于这么简单的一个进度系统。它主动加入了“成就”系统——虽然还很少,目前只有5个——并很快完成。

    最终运行

    游戏运行后,会出现“难度选择”(见图一)。选择难度后,进入初始界面:

    【图二:游戏开始的初始界面】

    随着用户的输入,界面不断更新:吊死鬼的状态、猜对/猜错的字母,当前游戏整体进度等。

    【图三:游戏进行中】

    这是游戏中的“个人进度”:

    【图四:个人进度和成就】

    写在最后

    这几年,“用了XXX,0代码一天我编写了一个????”的帖子是很能吸引眼球的。我做这样的一个“试验”,也是为了去验证这样的说法到底是不是成立。

    你问我的结论?我的结论是:用了AI,0代码一天写一个app,可行但不要过于乐观

    “可行”在于,通过我的实践,我发现确实可以0代码用一天的时间写一个app。

    “不要过于乐观”在于,我是一个有一定编程基础的“非程序员”。我可以不知道正确的代码、最好的做法是啥——这是AI的工作,但我知道:我想要什么,程序设计应有的结构,一些关键的“卡点”。

    Kiro和所有的AI一样,一般都会over thinking(过度思考)。在不少场合,我必须打断它“无休止”的思考而提出强硬的要求,而如果没有一定(可能还是很深厚)的编程基础和实践,真的编程小白恐怕是无法做到这个的。

    AI编程的意义在哪里?

    对于那些重复性的、可验证的、可参考性强的工作,AI比人有着巨大的优势。无论是快速原型迭代还是功能、细节的改进,AI的“知识库”一定胜过任何程序员。

    如果一项任务可被验证,比如:应用启动时,应该显示一个“复古”界面就是一个可被验证的任务——Kiro“知道”复古界面是什么意思,应该有些什么元素。

    人的优势在于,对于开发的进程以及一些关键节点(以及相应的干预)有着清楚的认识。在人的干(tiao)预(jiao)下,AI不至于陷入“幻觉”或者“过度思考”。人在这个模式下,更像一个纯甲方+PM,提出需求、迭代需求、适当干预、最终验收(方式各异)。

    Kiro还提供了Vibe模式——抽烟喝酒烫头式模式——进行开发,我会用这个模式试着开发下一个练手项目。

    如果你已经看到这里,不妨访问我的代码仓库,clone一份到本机执行,顺便加个star吧!


    1. 这里的模型需求后来被我override了,改用了豆包的API接入。 
    2. 另一种做法,是手工维护一个本地字库。但这样一来,这个程序本身就一点都和AI挂不上边了,对吧?