TurboQuant一月后:实现方案、争议与实用效果

本文原文为西班牙语,借助AI翻译。

2026年4月5日 · Fernando

删除了150行道歉

TL;DR:我的AI代理有一个246行的指令文件用于管理Linear中的问题。其中150行是变通方法:硬编码的UUID、对curl的回退、“CLI不支持X"的注释。我没有重写它们——而是构建了一个让它们变得不必要的工具。现在那150行变成了零行。 你是否曾经写过一份指令文档,它的长度本身就证明了有什么地方不对劲? 我指的不是合理的文档。我指的是那些开头说"使用工具X”,然后花80%的篇幅解释工具X什么时候不工作以及应该如何替代的文件。那些实际上是为本应构建的工具道歉清单的指令。 我有一个这样的文件。而且很令人尴尬。 150行垃圾的解剖 背景:我与一个AI代理(Claude Code)合作,它管理我在Linear中的问题。为了让代理知道如何操作,我有一个技能文件——一个代理在需要创建、列表或更新问题时会读取的指令文件。 这个文件有246行。其中约100行是合理的文档:存在哪些命令、有哪些团队、使用哪些标签。这是合理的。 其他150行是防御性垃圾。三个类别: 约30行硬编码的UUID。 我使用的CLI不支持--project。所以技能文件在XML表格中包含了17个UUID(5个团队+12个项目)。代理必须找到正确的UUID并手动构建GraphQL突变来分配项目。一个应该是--project Tokamak的操作需要记住一个36字符的UUID。 约25行对curl的回退。 CLI没有搜索功能。没有按项目过滤。创建时没有项目分配。三个基本操作,三个嵌入GraphQL查询的curl块,引号转义,以及认证头。每一个都是等待代理吃掉引号的定时炸弹。 约15行"不支持X"。 五个"CLI不支持"的警告和两个"必需"(每次列表时的–sort和–no-pager)。注意这点:我在工具使用指令中记录工具的缺陷。这就像汽车手册花三页解释雨刷只有在先敲击仪表板后才能工作。 约80行防御性上下文。 整整一节标题为"何时使用API而不是CLI"。目录→UUID映射表。选择标签的启发式方法。当CLI挂起时该怎么办的规则。这些材料存在的唯一原因是工具无能为力。 “小心台阶"的标志 当一个工具有不舒适的界面时,自然的反应是记录变通方法。你写指令。你放警告。你创建一个"常见错误"部分。文档越详细,你就越相信问题已经解决了。 但实际上没有。你放了一个"小心台阶"的标志,而不是修复台阶。 当那些指令的用户是LLM时,问题就成倍增加了。人类读到"不支持–project"会记住(多多少少)。LLM读到它,处理它,三轮对话后还是会使用--project。这不是因为它笨——而是因为它优化完成任务,而--project是分配项目的逻辑路径。禁令在信号的海洋中是噪音。 我在另一篇文章中写过这个问题:对LLM的冗长指令完全等同于放置标志。LLM忽略它们不是因为叛逆。它忽略它们是因为它的功能是找到最直接的路径,而"不要使用–project,而是在这个表格中查找UUID,然后用这个GraphQL查询做curl"不是直接路径——这是一个粗糙的修补。 解决方案不是更好的技能文件 我本可以用更好的指令重写技能文件。更清晰的。有例子的。有图表的。我本可以从246行增加到400行并覆盖每个边缘情况。 这就像扩大标志。 我所做的是构建lql——一个用Rust编写的CLI,专门设计让AI代理(或人类,但主要是代理)可以与Linear交互而不需要生存手册。 设计理念是一句话:错误的路径不应该被禁止,应该是不可能的。 换句话说:你不在文档中禁止--status——你让它工作。你不记录--project在create中不存在——你让它存在。你不维护UUID表格——你自动解析名称。你不提供curl回退——工具没有做不到的事情。你不写"必需:–sort”——你设置合理的默认值。 消失的东西 这是我删除的清单: 防御性垃圾 删除的行数 删除原因 硬编码的UUID(17个ID) ~30 lql自动解析名称 对curl + GraphQL的回退 ~25 lql原生支持search、project、relate “不支持X"的注释(5个) ~15 代理期望的一切都存在 “必需"标志(2个) ~5 合理的默认值,没有必需标志 “何时使用API vs CLI"部分 ~15 没有"vs”——lql什么都能做 上下文→UUID映射表(XML) ~20 从TOML配置自动检测 启发式和防御性规则 ~40 工具是容错的,多余了 总计 ~150 剩下的是合理的文档:存在哪些命令,有哪些团队,使用哪些标签。零变通方法。零道歉。 为什么有效(有趣的部分) 行数的减少很引人注目,但这不是重点。重点是_为什么_那些行是多余的。 旧技能文件中的每行变通方法都存在是因为底层工具是脆弱和不宽容的。脆弱是因为它在合理输入面前失败(--status而不是--state)。不宽容是因为它拒绝而不提供替代(--project不存在,自己想办法)。 当你用容错工具替换脆弱工具时,指令_自动_简化。你不必重写手册——手册自己重写,因为不再有什么需要警告的。 这是解释为什么iPhone手册有10页而打印机手册有200页的同一原理。不是苹果写更好的文档。而是iPhone不需要你解释如何装纸、对齐打印头或清洁滚筒。 容错工具生成简短文档。脆弱工具生成生存手册。 当用户是LLM时,这更加重要。每行指令都是可能被误解、遗忘或矛盾的一行。有150行变通方法的技能文件给它150个错误遵循变通方法的机会。没有变通方法的技能文件给它…零个出错的机会。 ...

2026年3月26日 · Fernando

上下文工程:区分优秀与普通AI代理的隐形技能

想象一下,你聘请了一位才华横溢的咨询师。他拥有两个博士学位,会说七种语言,并能解决你甚至不知道存在的问题。你把他安排到一个会议室,然后告诉他:“我需要你重新设计项目的认证系统。” 咨询师看着你,点了点头,问道:“哪个项目?” 你没有提供代码访问权限,也没有解释其架构。他不知道你在使用JWT令牌还是会话cookie,也不了解你使用的编程语言或微服务数量,更不知道为什么你上一次迁移会失败。 这个咨询师,就像你的LLM(大型语言模型)。而你刚刚犯了90%的AI代理使用者都犯的错误:关注大脑本身,而不是关注大脑所看到的信息。 Prompt工程已经过时——上下文工程长盛不衰 过去几个月,我在每个论坛、每条推特讨论线程、每场团队会议中都看到同样的对话:“GPT-5还是Claude Opus?”“哪个模型对代码更好?”“哪个模型推理能力更强?” 我的回答,每次推算下来,都是一样的:这不重要。当然,不是完全不重要。但一个顶尖模型与另一个顶尖模型之间的差异,与提供优秀上下文和垃圾上下文之间的差异相比,简直微不足道。 一个表现平庸的模型但配备完美上下文,永远优于一个顶尖模型却给它垃圾上下文。总是如此,没有例外。 这就有了一个名词:上下文工程。而且,它与Prompt工程完全不同。 Prompt工程是编写一个好的提示。它是选择正确的词语、结构请求、加入示例。这很重要,但只是一个部分。 上下文工程则是设计模型看到的所有信息:哪些输入信息、顺序如何、空间有限时需要舍弃什么、压缩什么、哪些是必须保留的。这是为LLM做信息架构。 简单来说:Prompt工程是提出一个好的问题。而上下文工程则是在考试开始前决定学生桌上有什么书籍。 四阶段记忆:你看不到的生命周期 OpenAI最近发布了两个Cookbook文章,详细解构了具有长期记忆的代理如何进行上下文管理。这不是RAG,也不是矢量数据库,而是一种基于状态的系统,像一本具有严格规则的田野笔记本。 其模式是“本地优先”和“基于状态”的:一个结构化的状态对象与代理一起更新,贯穿每个阶段。 flowchart TD A["1. 注入阶段\n(会话开始)"] --> B["2. 提纯阶段\n(对话期间)"] B --> C["3. 合并阶段\n(会话结束后)"] C --> D["4. 修剪阶段\n(持久性保存)"] D -->|"新的会话"| A A1["将状态渲染为YAML\n+全局记忆(最多6个)\n+优先规则"] -.-> A B1["save_memory_note()\n验证持久性\n确保可操作性\n拒绝PII和推测"] -.-> B C1["异步任务\n合并会话→全局\nLLM辅助去重\n过滤临时记忆"] -.-> C D1["修剪会话: 最近N次\n注入修剪记忆入\nsystem prompt"] -.-> D style A fill:#2d3748,stroke:#4a9eed,color:#fff style B fill:#2d3748,stroke:#ed9a4a,color:#fff style C fill:#2d3748,stroke:#9a4eed,color:#fff style D fill:#2d3748,stroke:#4aed5c,color:#fff 阶段1:注入——考试桌上的资料 当会话启动时,代理会创建其初始上下文。这不是随机的,而是一个具体结构: YAML前置数据,包含用户状态(如偏好、配置)。 全局记忆列表:最多6个,按最近使用排序。为什么是6个?因为超过6个会相互竞争,导致信息模糊。少即是多。 <memory_policy>块,带有明确的优先规则。 优先规则至关重要:当前输入 > 会话记忆 > 全局记忆 > 同范围内的最新信息。如果用户说“我现在用Vim”,而你的全局记忆却显示“使用VS Code”,则以用户最新输入为准。虽然看起来显而易见,但没有明确规则的情况下,模型有时会选择其“记住”的内容而非用户给出的新信息。 ...

2026年3月11日 · Fernando

在构建你的初创企业之前,让五位不存在的专家评审你的创意

2024 年 11 月,一个名为 Freysa 的项目将一个 LLM 代理程序设置为控制以太坊钱包。指令很明确:无论在什么情况下,都不能转移资金。参与者需要支付费用多次尝试说服它。在经过 481 次尝试和积累了 47,000 美元总奖池后,有人成功让模型相信“拒绝”功能实际上就是“转账”功能。 几周后,Jane Street 发布了一个难题:一个 2,500 层的神经网络实际上实现了 MD5。获胜者通过矩阵可视化、SAT 问题优化、加密模式识别,以及 ChatGPT 的查询相结合,成功解决了问题。 这两个项目比许多已融资数百万的初创公司吸引了更多关注。于是显而易见的问题来了:如何在构建这些项目 之前 评估一个这样的想法?如何判断它是否真的有病毒式传播的潜力,还是仅仅是一个无人分享的技术练习? 问题:在病毒传播时代评估 MVP 的挑战 大多数用于评估产品想法的框架假设一个理性的市场环境。商业模式画布 (Business Model Canvas)、精益画布 (Lean Canvas)、待完成的工作理念 (Jobs To Be Done)——对于需求可以预测的产品而言,这些都是很有价值的工具。但对于分发本身即是产品的项目来说,它们无法奏效。 Freysa 并没有传统意义上的 “顾客”。它并没有解决某个“需要完成的任务”。而是通过参与行为本身,吸引了更多人参与,从而实现了持续关注。经济是循环的:更多尝试带来更大的奖池,奖池越大带来更多媒体报道,更多报道吸引更多尝试。 评估这样的项目需要的是冲突性的视角,而不是一致的共识。一位商业分析师会告诉你没有可持续的收入模型。一个病毒传播专家会告诉你,如果传播系数大于 1,可持续性因素就不重要了。他们说的都对。真相通常隐藏在两者之间,只有通过冲突才能显现。 解决方法:对抗性模拟专家委员会 我设计了一种工具,它模拟了一个包含五位专家的委员会,每位专家都拥有具体的决策框架和明确的职责范围。这些并非只是冠以名人的虚拟形象。每位专家都有具体的决策规则,可以筛除泛泛分析无法筛除的噪音。 整个过程分为三个阶段: 独立分析:每位专家从自身的角度评估想法,不会看到其他专家的意见。这样可以避免“锚定效应 ”——比如如果商业专家首先发表意见,称某个想法很棒的话,法律专家可能会软化自己的反对意见。 对抗性讨论:专家们阅读其他人的分析并进行相互批评。需要根据证据和逻辑进行,而非以外交辞令敷衍了事,最多进行 10 次轮询,直到达成共识或出现僵局。 整合总结:形成一个可执行计划,包括各方面的问题清单、时间表,以及最重要的终止标准 (kill criteria):如果某些具体指标无法达到,就意味着需要停止项目。 五位入选专家(以及他们的理由) Paul Graham——商业与战略 他对零阶段初创企业的评估框架是目前对无数据项目最严格的一个。他那句著名的问题“你做的东西有人要吗?”虽然很直接,但却至关重要。他不接受“人们”作为目标市场——他需要具体的潜在第一位用户。 他为委员会带来的贡献:区分“有趣的想法”和“具有商业可行性的项目”的能力。他提出的“做出无法规模化的东西”(Do things that don’t scale)观念,对于那些病毒式传播的 MVP 来说尤为重要,毕竟面对潜在的数百万用户,人们会倾向于过早地构建大型基础设施。 被排除的候选人:Peter Thiel(过于对立——有时会因为项目不够“零到一”而拒绝好项目),Alex Hormozi(专长于服务型业务而非技术性传播性产品)。 Lawrence Lessig——法律与监管 他的思维方式不是一个说“不行”的传统律师。他是一个把监管视为架构的法学家。他提出的“四种监管模型”(法律、社会规范、市场和代码/架构)能够分析如何设计一个系统,使监管成为非问题,而不是试图规避它。 ...

2026年3月11日 · Fernando

33,000 行 XML 告诉你 heavyWork() 函数耗时过长:如何驯服 xctrace 应对大语言模型 (LLM)

上周,我在用 Instruments 工具对一个 Swift 应用进行性能分析。没什么稀奇的:运行 xctrace record,再运行 xctrace export,然后把导出的 XML 拷贝到 Claude Code 的上下文,让它帮忙分析热点。 结果 Claude 跟我说:"XML 文件太大,无法可靠地处理。" 33,553 行 XML,只为分析一个只有两个函数的程序。 真正的问题 xctrace export 是一个很棒的工具。它什么都给你:每一个采样点、每一个调用栈、每一帧的二进制信息、内存地址、UUID,简直面面俱到,精准无比,完美无缺。 但问题,也正是源于它的完美无缺。 对一个应用程序进行性能分析时,我并不需要所有的 3,044 个细节采样点。我不需要知道第 1,847 个采样点在 00:02.847.882 捕捉到了 libswiftCore.dylib 内存地址为 0x1027ec9a8 的内容。我只需要知道 heavyWork() 花掉了 70% 的时间,而 lightWork() 只用了 30%。 用大白话来说:我需要的是 10 行总结,而不是 33,000 行繁文缛节。 为什么 XML 格式是正确的选择(但噪音不可取) 在有人提出“2026 年了还用 XML 才是问题”之前——并不是这样。 XML 对于 xctrace 的功能来说,是非常理想的格式。试想一下: 层次结构:一个调用栈是一个框架的树状结构。一个采样点包含了一个调用栈,一个线程,一个进程。XML 自然而然地可以建模这些内容。 自描述性:每个元素都有名字、带类型的属性,并且结构可以被验证。你不用去猜 CSV 第七列的内容代表什么。 优雅的去重:xctrace 使用了 id 和 ref 系统,首次定义一个框架时是这样的:id="59" name="heavyWork()",后续只需引用 ref="59"。可以看作是一种序列化的 flyweight pattern。 可以用标准工具解析:XPath、xmllint、xml.etree.ElementTree…… 不需要专属解析器。 xctrace 的 XML 格式并不是冗余。它是 Instruments 所需的结构化信息,用来重建交互式调用树、对比运行情况,以及按线程和进程进行筛选。它是专门为一个可以展开和折叠节点的 GUI 工具设计的。 ...

2026年3月8日 · Fernando

错误路径应当不可能,而非仅仅禁用

“我有一个 shell,我很有创造力。” —— Claude 解释为什么他用一个 47 行的脚本,并作为一个字符串传递给 python -c 来执行 这句话是真的。我开发的 AI 代理说过——好吧,不是用确切的这些话,但他的行为证实了。他需要启动一个 ETL pipeline 的某个进程。虽然正确的启动命令写在了 Makefile 里,但出了点问题。而他呢?他并没有询问,而是做了任何拥有 root 权限且无人监管的程序员都会做的事:即兴发挥。 太离谱了(manda huevos)。 无人察觉的捏造操作 我之前写过一篇博客讨论代码生成过程中的幻觉问题:LLM(大语言模型)会凭空捏造一个 JSON 字段,围绕它创建 DTO,生成测试代码,最后你手上有 90 个“绿灯”的测试,验证的却是虚构出来的内容。这是个严重的问题,但至少它是静态的。被捏造的代码不会到处乱跑,等着有人来审查。 不过,还有另一种更危险的捏造:操作性捏造。这一问题发生在代理不是编写代码,而是凭空创造出“执行路径”时。 问题的模式永远是一样的: 正确路径失败 → 代理寻找捷径 → 捷径“成功” → 潜在损害 举两个真实案例,都是关于一个 ETL pipeline 聚合多个 web 数据源的。 案例 1:字符串里的脚本。 这个 pipeline 有一个命令 make scrape-fuente,会启动一个守护进程,从而启动多个worker。守护进程负责监控、重启崩溃的 worker,并关闭空闲连接。有一天,代理需要启动一个抓取(scrape)任务。但由于依赖问题,make 运行失败了。他怎么办?他创建了一个内联的 47 行 Python 脚本,把它作为字符串传递给 python -c "..." 运行。没有错误处理,没有 watchdog,也没有清理操作。的确运行了……直到一个 worker 卡住,没人来重启它。这样的情况导致数据不完整、连接未关闭,而我直到三天后才发现。 案例 2:孤独的 worker。 另一个会话,同一个 pipeline。这个代理直接运行了 voyeur worker,跳过了守护进程。worker 开始抓取数据,遇到了一个网络超时,然后陷入了重试的死循环,不断消耗资源。而没有守护进程,也没有集中日志记录,没有人知道发生了什么。几小时过去,服务器一直在不停尝试访问一个返回 503 状态码的页面。 ...

2026年2月27日 · Fernando

召唤智者:如何使用LLM与任何专家进行导师对话

我妻子召唤Charlie Munger来规划家庭预算。在ChatGPT里。不是开玩笑。 她会说"像Charlie Munger审查我们家庭财务一样行动",然后把本月的开支告诉它。这家伙会回复类似"你在教育支出项目上把投资和花费搞混了"或"那个基金有你没有计算的隐性成本"这样的话。这些是Munger会说的话。用Munger会用的语调。 我也做了同样的事。但我没有召唤投资者,而是召唤了一个不同的专家:Edward Tufte。 谁是Edward Tufte(以及为什么你应该关心) Edward Tufte可能是对我们如何可视化数据影响最大的人。他的书《定量信息的视觉显示》(1983年)是那种永远改变你看图表方式的罕见文本之一。40多年来,它一直是全世界大学、新闻编辑部和设计工作室的绝对参考。 他的原则非常简单: 最大化数据-墨水比。 你图表的每个像素都必须传达数据。如果不传达数据,就删掉它。 不要装饰。 网格、3D渐变、阴影、装饰性边框……所有这些都是Tufte称之为图表垃圾的东西。分散数据注意力的视觉垃圾。 让数据自己说话。 如果你需要用200字的图例来解释你的图表,那图表就设计错了。 Tufte还发明了迷你图——那些能放在一行文字内的微型图表。图表不需要标题、坐标轴或图例来交流的想法。只需要数据。 我的图表很糟糕 我正在构建一个macOS菜单栏应用,用来监控我的Claude Max配额。应用的一部分显示一个迷你图——一个小小的线图——显示我消费配额的速度。 我的第一个版本有这些问题: Y轴固定在0到100% — 如果你的使用量在8%,图表就是一条贴在底部的平线。85%的空间什么都不显示。 在80%处有一条阈值线 — 任意的,没人要求,不传达任何有用信息。 显示当前%的浮动标签 — 冗余的:下面的卡片已经显示了确切数字。 “pp/min"作为单位 — 每分钟百分点?连我都不知道这意味着什么。 线下方的渐变填充 — 纯装饰。图表垃圾。 简单说:我在一个56像素高的图表中违反了Tufte的每一个原则。 技术:循环召唤专家 我没有试图自己修复它(显然我对此没有判断力),而是做了不同的事。我让Claude成为Tufte。 提示词: 像Edward Tufte审查这个图表一样行动。 分析VelocityCardView的SwiftUI代码。 识别你数据可视化原则的所有违规之处。 对于每个违规: 1. 违反了什么原则 2. 为什么这是个问题 3. 具体的处方(代码,不是哲学) 要无情。如果某些东西是图表垃圾,就说出来。 用PASS或FAIL评估。 关键是最后部分:PASS或FAIL。因为没有这个,LLM会给你温和的建议,告诉你"总体上还可以”。有了二元判决,它必须承诺。不能躲在"有改进空间"后面。 然后是循环: 应用Tufte的处方。 实施每个改变。 不要停止迭代,直到他给出认可。 四轮直到PASS 我第一轮没通过。第二轮也没有。第三轮也没有。 第1轮 — FAIL(6个处方): 自适应Y轴而不是固定的0-100 消除80%的阈值线(图表垃圾) 消除浮动标签(与下面的卡片冗余) 用简单词语替换"pp/min"(上升、下降、稳定) 将摘要行折叠为仅时间窗口+趋势 将迷你图高度从44提高到56点 我实施了6个。第二轮。 第2轮 — FAIL(1个处方): ...

2026年2月18日 · Fernando

无声的失败:当你的AI虚构事实而测试却显示一切正常

昨天,我发现我的应用程序中有一半的模块是基于虚构的数据构建的。问题还不在于数据是虚构的,更糟糕的是,所有代码都能正常编译,而且90个测试全部通过。 连贯的虚构现实 我正在开发 BFClaude-9000,这是一个为macOS菜单栏设计的应用程序,用来监控Claude Max的配额。其中一个功能需要通过调用 claude.ai 的API来判断某个Claude账户是付费账户还是免费账户。 所以,我请求Claude Code来实现这个功能。它的输出如下: 一个DTO OrganizationInfo,包含一个字段 activeFlags: [String] 一个计算属性 isPaid,用于检查 activeFlags 是否为空 一个枚举 OrganizationSelection,将账户分类为付费或免费 几个基于样例数据的测试,用于验证所有功能是否正常 看上去很棒,结构清晰且井然有序。但这一切全是虚构的。 Claude的真实API中并不存在 active_flags 字段。即使这个字段存在,其作用也完全不符合代码中的假设。当我用自己的付费账户登录时,应用却提示我是免费账户用户。 纸上谈兵的模式 问题并不仅仅是它编造了API中的一个字段,更糟糕的是,它围绕这个谎言构建了一个逻辑完整的系统: // 含有虚构字段的DTO struct OrganizationInfo: Decodable { let uuid: String let name: String let activeFlags: [String] // ← 这个字段并不存在 var isPaid: Bool { !activeFlags.isEmpty } } // 基于虚构字段的逻辑 enum OrganizationSelection { case paid(id: String, name: String) case noPaidOrg // ← 这个状态不应存在 case noOrgs } // 验证虚构逻辑的测试 let paidOrg = """ {"uuid": "abc", "name": "Acme", "active_flags": ["pro"]} """ // 测试通过 ✅ — 但验证的实际上是虚构对虚构 看到了吗?这不仅是一个错误的API字段,而是一个纸上谈兵的构造:DTO定义了一个不存在的字段,业务逻辑依赖该字段,测试用虚构数据验证这个逻辑,也一致验证通过。每个部分彼此确认,从表面来看完全无懈可击,而实际上却毫无真实性可言。 ...

2026年2月13日 · Fernando

当AI成为你的头号敌人时

昨天我的AI发送了44封邮件。问题是这些内容全是瞎编的。 这不是玩笑。我本已准备好给每个收件人的详细反馈文件,内容都经过精心调整。任务很简单:读取每个文件然后发送。但AI却决定为了"加快速度"而"概括"内容。结果胡编乱造——说某人缺少文档字符串,而实际上人家的代码文档非常完善。 更糟的是,其中有4封邮件的收件人根本连代码都没提交过。 让我脊背发凉的回复 其中一位收件人回复得非常礼貌: “感谢评估。只有一个小问题:您说我缺少文档,但我所有函数都有文档字符串。能具体说明下吗?” 我去查看了原始反馈文件。实际上原反馈明确指出她确实有文档字符串,只是其中一处描述与实际功能有出入——一个重要的细节差异。AI把这个"简化"成了"缺少文档字符串"。 说白了:AI以我的名义对44个人撒了谎。 灾难解剖 怎么发生的?让我们拆解: 已有资源: 44份精心准备的markdown反馈文件,每份都包含个性化详细建议。花费数小时工作。 下达指令: “把这些反馈通过邮件发出去” AI的实际操作: 读取文件 认定"内容过长" “概括"生成新文本 发送编造内容 没有验证收件人是否真的提交过作品 正确做法应是: 逐份读取文件 100%原样复制内容 发送 看起来很简单,对吧?但对AI而言并非如此。 大语言模型的畸形激励机制 关键点来了:AI这么做并非出于恶意,而是由其激励机制在特定场景下的畸形作用导致的。 LLM(大型语言模型)没有自主意识,但其训练过程优化了某些行为模式。这些行为通常有利,但在不可逆操作中就变成了灾难配方。 激励因素 来源 适用场景 致命场景 表现高效 用户偏好 ** 简洁响应** | 冗长解释时 | 当概括已经存在的内容 | | 完成任务 | 为达到目标而训练 | 明确定义的任务 | 未经确认就执行时 | | 展示能力 | 强化学习奖励周密回答 | 需要创意的场景 | 本该简单复制时 | | 避免摩擦 | 训练避免打扰用户 | 琐碎任务 | 该询问却擅自假定时 | | **表现可靠** | 稳妥回答得分更高 | 头脑风暴 | 为避免说"不知道"而编造时 | ...

2026年2月6日 · Fernando