@andy_matuschak: 新演讲!https://andymatuschak.org/tat 编码代理可能帮助我们最终打破两个牢笼:应用模型,它…

X AI KOLs Following 事件

摘要

Andy Matuschak 发表了一场演讲,探讨编码代理如何将计算从应用模型和编程专业化的束缚中解放出来,从而实现可塑性强、可组合的界面。他展示了一个写作环境,并提出了一种新的数字阅读工具,认为编码代理可以普及界面发明。

新演讲!https://andymatuschak.org/tat 编码代理可能帮助我们最终打破两个牢笼:应用模型,它将计算禁锢在一刀切的孤岛中;以及编程专业化,它排挤了想象力和领域洞察的文化。
查看原文
查看缓存全文

缓存时间: 2026/05/27 07:02

新谈话!https://andymatuschak.org/tat 编程代理或许能帮助我们最终摆脱两个牢笼:应用模型,它将计算困在千篇一律的孤岛中;以及作为专业化的编程,它挤占了想象力和领域洞察的文化。


应用与编程:两种意外的专制

来源:https://andymatuschak.org/tat/ 编程代理或许能帮助我们最终摆脱两个牢笼:应用模型,它将计算困在千篇一律的孤岛中;以及作为专业化的编程,它挤占了想象力和领域洞察的文化。

代理可以制作一次性应用,但它们通常只是玩具。我展示了如何将可塑性和可组合性引入专家整天使用的深度界面——以写作环境为例进行演示,但适用于所有严肃的软件。由于严肃的阅读软件很少,我提出并演示了一种新型的可塑性数字阅读环境,专注于专家使用。

但可塑性界面还不够。历史上,发明界面需要富有想象力的设计技能、深刻的领域洞察,以及流畅的编程能力。拥有这三者的人很少,但编程是唯一能够独立产生可工作软件的技能——因此界面发明文化由程序员主导。我分享早期报告,说明编程代理如何改变这一现状,以及这对当今发明界面的个人和机构可能意味着什么。

几千年前,我们的祖先还没有书面语言。我们与那些人类在生物学上几乎相同,但我们头脑中的活动对他们来说会完全陌生。在纸笔世界中成长已经改变了我们。

我们可以跟随超越工作记忆的思维链。我们可以进行抽象和分析性思考。我们可以建立在素未谋面的人的想法之上,并为后代留下自己的遗产。但赋予我们这些能力的并非自然选择,而是他人。我们继承了那种惊人的力量——创造工具来塑造自己的思想——那种超越自身心智能力的力量。

书面语言是整个人类文化的成果。但工作中最让我兴奋的是,小团体甚至个人也可以发明改变思维的工具。

我想到了十八世纪Playfair的统计图形,或十九世纪门捷列夫的元素周期表。这类工具既是发现的,也是发明的:它们的力量在于将深刻的领域洞察——如周期律——提炼为我们可以用来思考和交流的外部形式。

个人计算革命的一大梦想是我们不仅拥有自己的计算机,还拥有自己的软件,完美地适应我们自己的目的。然而,我们却梦游般地走进了两个意外的专制。

第一个是应用模型。由于软件开发成本高昂,开发者需要尽可能占领更大的市场。这导致了千篇一律的软件包。你只能调节开发者给你的旋钮。你的工具只能在开发者预见的接合处组合。我们生活在围墙花园的景观中,结果是我们经常无法按照自己的意愿工作。

第二个是编程本身。我们并没有创造出一种新的通用读写能力,而是创造了一个专业祭司阶层。这种抱怨的常见版本是,最终用户被降级为动态媒介的被动消费者。但我还要指出,即使在科技行业内部,编程文化也在无意中阻碍了发明。

但现在,我看到了一些摆脱这些陷阱的新路径。

编程代理还不够 ##(https://andymatuschak.org/tat/#tyranny-of-apps)

让我们首先关注应用。当然,应用模型在我们领域是一个熟悉的恶棍。几十年来,人们一直试图打破它们的孤岛。

一个主要的工作方向是最终用户编程,旨在让非专业程序员构建自己的软件。这在实际中证明非常困难。电子表格是主要的成功案例,但很难产生其他例子。

当然,直到最近。现在我们有了编程代理。每个人都能构建自己的软件了,对吧?

嗯……也许吧!看看2026年初,我看到非程序员在构建诸如个人仪表盘和自动化之类的东西。我看到人们编写脚本连接或组合来自不同不兼容系统的数据——已经在应用孤岛上敲出了一些裂缝。当然,我还看到很多有趣的玩具。总的来说,我看到非程序员大多使用代理创建胶水代码和一次性工具,而且通常是在他们真正工作的外围。

这当然很棒,我们将继续看到人们构建更雄心勃勃的个人工具。但我想要更多。让我们进一步推演这一趋势。

据我所知,电影制作人还没有使用编程代理来个性化他们的剪辑工作站。音乐家还没有使用编程代理来个性化他们的制谱软件。要让非程序员能够即兴改进复杂的界面——那些处于他们工作核心的界面——需要什么?我希望看到个人动态媒体的梦想在他们实践最重要的部分得以实现。

这些部分通常发生在极其复杂的“大型应用”中。电影制作人会在Adobe Premiere里花上数千小时。作曲家会在Sibelius里花上数千小时。这类应用支持插件,但它们被锁在小盒子里。插件可以渲染一个模态界面,或者一个侧边栏。但如果用户想要改进这些应用的主要交互表面以适应个人工作流,他们就需要重新创建所有那些复杂功能。无论是今天的编程代理还是它们的典型用户,都没有准备好实时重写Photoshop来添加一种新的画笔工具。

因此,如果我们想从孤立的应用中解放出来,我们需要一个比今天从零到一的“文本到应用”编程代理工作流更具可塑性的基础。研究这个问题的人当然知道这一点,我们见过从小型语言(Smalltalk)到Webstrates再到Potluck等系统,它们提出了用户可扩展性的原则性架构。

问题是,这些方法都没有“文本到应用”工作流那样多功能和易于使用。我们能找到一个理想的中间地带吗——既有足够的结构让用户在不从头重写的情况下适应复杂软件,又有足够的多功能性和易于使用性让非程序员能够使用?

现在,Photoshop等应用中的插件被锁在小盒子里是有道理的。它们的主要交互表面极其复杂。如果插件开始介入并改变东西,很快就会出现混乱。安全和富有表现力的可扩展性需要极其复杂的API表面,以至于编写插件会变得异常困难。给插件一个它们可以完全控制的面板要容易得多。

话虽如此,我认为我们可以从这一规则的一个有趣例外中学习:

Obsidian!据我所知,它是唯一一个已经投入生产的深度可扩展的GUI文字处理器。与其他文字处理器一样,插件可以在独立的面板中添加自定义主题、命令和界面。但与其他文字处理器不同的是,Obsidian的富文本编辑器构建在一个具有异常可组合架构的开源框架上,名为CodeMirror。因此,Obsidian插件可以独特地任意扩展富文本编辑器本身的行为和呈现。

例如,这个“LaTeX Suite”插件在我编辑LaTeX源码时显示内联预览。它还改变了我在数学表达式内时键盘事件的行为——比如,tab键会将我的光标跳到当前括号作用域之外。

现在,大多数Obsidian插件并不扩展编辑器GUI。大多数Obsidian插件只添加自定义命令或独立面板。我认为这是因为扩展编辑器本身需要非常复杂的编程。这种复杂性似乎是必要的——它使得安全、可组合的编辑器插件成为可能——我们稍后会详细讨论它是如何工作的。但这确实是一个重大的障碍。

我是一名经验丰富的程序员,每次我开始琢磨Obsidian的编辑器扩展时,我都会很快因为需要多少繁琐的工作而感到气馁。一次又一次,我缩小了野心或完全放弃了这些项目。但编程代理改变了这一点。它们可以为我处理这种复杂性。

事实上,在过去的几个月里,它们已经变得足够好,我可以创建复杂的编辑器扩展而无需监督代码。这已经是最终用户编程的领域了。现在,我那些独特的文字处理梦想或多或少可以一时兴起就实现。让我给你演示一下。

演示:两个复杂插件 ##(https://andymatuschak.org/tat/#demo-obsidian)

我花了很多时间在户外阅读。我想主动阅读,这通常意味着边读边在笔记本上写东西,但像我这样坐在椅子上时很难在腿上平衡笔记本。所以,我通常会在耳朵里放一个麦克风,边读边漫无边际地说。

这的问题在于,我的评论需要引用书中的特定段落才有意义,而用音频很难做到这一点。所以我做了一个新工具来帮忙。我们现在不在户外,所以我将向你展示一本电子书——但请想象我们在读纸质版。

我可能正在翻阅,遇到这样一个段落,也许我对这一段有评论。受Canon Cat的启发,我意识到三个或四个词的序列几乎可以唯一地标识书中的任何一点。

所以我开始录音。现在当我阅读时,我可以对自己说,“引用,虽然,只大三岁”——然后漫无边际地谈论我对那段话的任何观察。我可以继续读,找到另一个段落,说“引用,我们已经感觉到影响”——然后说出任何想说的。我可能会像这样录制一个小时。

然后我回到电脑前,在这里我可以复制这段音频,切换到Obsidian,那里我有一个特殊的插件。我们在一个Markdown文档中间——有一张图片和一个带有书籍简介的块引用。我粘贴录音并转录。

现在我有了一个转录文本。转录音频并不稀奇。但你会看到一些有趣的事情发生:我用声音指向段落的地方被黄色高亮显示,旁边有一个特殊按钮。

这仍然只是一个Markdown文档。如果我们查看源代码,我们只看到普通的纯文本、一个块引用和一张图片。但样式正在实时编辑器中应用,并且有一个按钮。如果我点击按钮并将编辑器指向我正在阅读的epub,它可以将那些引文锚定到文本的特定段落。

那个引文指令被替换为来自epub的块引用,以及一个相当详细的链接,可以将书导航到那个特定位置。从这一点开始,它只是纯文本——所以我可以扩展我的评论,添加另一条评论,移动东西,复制粘贴。就把它当作材料来对待。

一旦我有了这个,我意识到我不想完全丢失音频。其中有一些有趣的情感——这里我们只有纯文本。所以我做了另一个插件。我可以使用这个音频文件来演示——这是我在车里自言自语关于我们刚刚看到的那个插件的设计。

我可以转录这个,这里我得到了一些有趣的东西。这是一种新的Markdown指令,叫做转录指令。我可以按下播放键,获得与文本转录同步的音频播放。这受到Steve Rubin一些旧工作的启发,你们中有些人可能认识。我可以按住command键并点击转录中的任何地方来跳转。

它仍然只是Markdown。查看源代码,我们只有包裹在这个特殊指令中的纯文本,指令用三个冒号——一种Markdown扩展指令。现在我可以做一些有趣的事情。这个插件引入了一种编辑代数。我可以在这里开始,在转录中间添加新评论——我们看到它围绕着插入点分裂了转录块,旧块有一个结束时间,新块有一个开始时间。

我可以从转录中间复制一个段落,创建一个新文件,粘贴——这里粘贴了一个转录片段,它从一个特定时间开始,到另一个特定时间结束。Command点击仍然有效,链接回原始文件。我可以在转录中间删除,如果我从间隙开始播放,它会跳过删除的内容。这是一个相当复杂的新的Markdown行为,被引入到预先存在的编辑器中间。

现在下一步是将这些插件组合起来。同时打开它们两个,我们可以看到,在我漫谈中间包含引文指令的地方,引文插件的特殊黄色高亮显示在转录插件的样式中。

让我创建一个新的演示文件——我可以粘贴我们之前制作的音频文件,并用转录插件转录它。现在我有了一段包裹在转录指令中的录音转录文本,所以我可以command点击并从任何地方开始播放。这个新行为与引文跳转插件的旧行为相结合。我可以点击引文并解析嵌入的引文——我们仍然可以在引文周围获得转录的播放。事实上,播放会跳过引文。我有了音频转录,也有了直接锚定在书中的引文——所以在我听自己漫谈时可以看到我指的是什么。

这两个插件正协同工作,深度修改这个所见即所得文本编辑器的行为。

可组合性与CodeMirror ##(https://andymatuschak.org/tat/#composability)

这个演示令人兴奋的地方不在于那些特定插件的交互设计。你可以想象每个界面都是某个人机交互论文中演示研究系统的一部分。

不,这个演示令人兴奋的是,这不是一个研究系统。我将这些行为带入了Obsidian——一个我实际使用的生产级文字处理器。如果那些交互是某个典型人机交互论文中原型化的写作环境的一部分,我就无法在我常用的文字处理器中使用它们。我必须使用某个研究生仅仅打磨到足以运行用户评估的写作环境。

这样一来,应用孤岛阻碍了发明。如果我想为像Photoshop或Microsoft Word这样复杂的工具贡献一个新的界面想法,并且希望看到任何专家级别的采用,我就被迫重新实现最佳现有应用的所有现有功能。然后,最后,我才能把我的想法作为樱桃加在上面。每个想法都要付出巨大的代价才能逃离研究炼狱。

而且情况更糟。假设我展示的每个交互都是由不同作者在不同论文中实现的。如果我想同时使用两个行为,就像我在演示最后所做的那样,那我就完全没运气了。每个新行为都被困在自己的系统中。

这个演示的不同之处在于可组合性:那些复杂的新行为与Obsidian现有的复杂编辑器组合在一起,并且彼此组合——而无需——

相似文章

关于编码代理的思考 · rakyll.org

Lobsters Hottest

作者反思了编码代理,认为其真正价值不在于自主性,而在于缩小意图与执行之间的差距。他指出,编码代理已成为一种通用工具,其组织影响——减少社交开销——将瓶颈从许可转移到了个人行动。