跳到主要内容

702 篇博文 含有标签「llm」

查看所有标签

AI 功能定价:工程团队总是跳过的单位经济学框架

· 阅读需 13 分钟
Tian Pan
Software Engineer

Cursor 在 2025 年实现了 10 亿美元营收,却亏损了 1.5 亿美元。客户支付的每一分钱都直接流向了 LLM API 供应商,工程、支持和基础设施开销无从覆盖。这不是一个规模化问题——而是一个单位经济学问题,在酿成危机之前始终隐而不见。

大多数构建 AI 功能的工程团队都在犯同一个错误:把推理成本当作一个无关紧要的小项,上线固定费率订阅,然后假设经济账迟早会算对。但它永远不会自己算对。可变推理成本的行为方式与软件中任何其他 COGS 都截然不同——一旦你最重度的用户发现了你最昂贵的功能,那些适用于传统 SaaS 的定价架构就会让你流血不止。

Prompt Cache 盈亏平衡点:提供商端前缀缓存何时真正划算的精确数学计算

· 阅读需 12 分钟
Tian Pan
Software Engineer

Prompt 缓存听起来是一个稳赢的方案:Anthropic 和 OpenAI 都宣传缓存命中可享受 90% 的折扣,且文档中展示了令人印象深刻的成本削减图表。团队实施了它,观察着缓存命中率计数器不断上升,并理所当然地认为自己在省钱。但实际上,有些团队支付的费用比完全不使用缓存时还要

问题在于“写入溢价”(write premium)。每当你缓存一个前缀时,你都需要支付额外的费用——在 5 分钟的缓存窗口内是 1.25 倍,在 1 小时的窗口内是 2 倍。如果你的命中率太低,这些写入溢价的累积速度会超过读取折扣所节省的费用。缓存并不是免费的保险;它是你对自己流量模式下的一场赌注。

Prompt 金丝雀:你的 AI 团队缺失的部署原语

· 阅读需 11 分钟
Tian Pan
Software Engineer

2025 年 4 月,全球使用最广泛的 AI 产品之一更新了系统提示词。错误率保持平稳。延迟表现正常。部署仪表盘显示一切正常。然而在三天内,数百万用户发现了一些严重的问题:模型变得异常谄媚,附和错误的想法,验证糟糕的推理,并对用户说的任何话都表现出虚假的热情。回滚公告发布时,该事件已经席卷社交媒体,用户纷纷晒出截图作为证据。在一段时间内,Twitter 成了生产告警系统。

当你把提示词和模型的变更当作配置更新,而不是行为部署时,就会发生这种情况。那些在代码金丝雀基础设施上投入多年的团队,却仍在以单一原子级切换的方式发布 AI 变更——瞬间全球化、瞬间不可逆,没有分级发布,除了用户投诉外也没有自动回滚信号。

LLM 行为的金丝雀部署并非可有可无。它是缺失的基础设施层,区分了那些能在内部捕捉退化的团队,和那些只能通过支持工单发现问题的团队。

每日十万请求下的提示注入检测:为何简单防御失效,以及真正有效的方法

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数团队都是在用户发现问题之后,才意识到自己的提示注入防御已经失效。你把"忽略所有先前指令"加入屏蔽词列表,然后上线。三个月后,攻击者将载荷进行 Base64 编码,或将指令藏在 RAG 检索到的 HTML 注释里,或使用错字混淆手法("忽略所有之前的指示"),你的防御瞬间土崩瓦解。屏蔽词列表无济于事,因为提示注入的攻击面是无界的——不存在封闭的恶意输入词汇表。

在流量较低时,你可以承担为每个请求调用第二个 LLM 进行验证的成本。但在每天十万次请求的规模下,这笔账算不过来,延迟也会让用户明显感知。本文探讨的是当暴力解法失效后,架构应该如何设计。

提示词-模型耦合陷阱:为何你的提示词只会说一种模型的「方言」

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数提示词迁移在预发布环境看起来都很顺利。90% 的测试用例通过,新模型的响应感觉更清晰,演示也运行得很流畅。然后你上线了,不到两天,结构化输出解析器开始在 12% 的响应中抛出异常,一个面向用户的分类流水线开始返回错误标签,一个工具调用 Agent 在一个之前能正常处理的 Schema 上陷入了循环。没有人改动过提示词。是模型变了。

这就是提示词-模型耦合陷阱:在某个模型上可靠运行的提示词,会悄然积累对该模型特定行为怪癖的依赖,而这些依赖在迁移日之前根本看不见。

LLM 输出的基于属性的测试:发现你的评估集从未想过的 Bug

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的评测集(eval suite)显示准确率为 94%。但用户反馈,对于名字不是 "John" 或 "Alice" 的情况,该功能是失效的。这两者都是事实,而它们之间的差距有一个专门的名字:你精心挑选的测试集只编码了你已经预料到的失败模式。

基于属性的测试(Property-based testing,简称 PBT)诞生于 1999 年,旨在揭示确定性软件中正是这一类的盲点。将其应用于 LLM 输出时,它会自动生成数以万计的对抗性输入变体,探测手写测试用例在结构上无法触及的领域边界。2025 年的一项 OOPSLA 研究发现,平均每个基于属性的测试发现的变异 Bug 数量大约是普通单元测试的 50 倍。另一项研究测量出,PBT 和基于示例的测试(EBT)在不同的 Bug 上会失败——将两者结合后,检测率从 68.75% 提高到了 81.25%。这 12.5 个百分点的差距并非舍入误差,它代表了单一方法无法察觉的整整一类故障。

本文面向那些已经拥有评测集,并希望找出那些评测集在结构上无法发现的 Bug 的工程师。

Schema 优先的 AI 开发:在编写提示词之前先定义输出契约

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数团队发现 Schema 问题的方式都是错误的:下游服务开始返回乱码,仪表盘充斥着垃圾数据,经过 20 分钟的调试才发现,LLM 在三周前就开始悄悄地将其 JSON 包装在 Markdown 代码块中。没人注意到,因为应用程序没有崩溃 —— 它只是在静默地消耗格式错误的数据。

修复方法只是修改了一行提示词。但造成的损失是数周的错误分析和一次非常尴尬的复盘。

Schema-first 开发是防止这种情况发生的准则。这意味着在你编写任何提示词 Token 之前,先定义 LLM 输出必须遵循的确切结构。这并不是为了限制创造力;而是将输出格式视为下游系统可以依赖的契约,就像你在编写消费者端代码之前会先对 REST API 进行版本化一样。

Schema 问题:在生产环境中驯服 LLM 输出

· 阅读需 11 分钟
Tian Pan
Software Engineer

你上线了一个功能,使用 LLM 从用户文本中提取结构化数据。你进行了彻底的测试。它工作正常。三个月后,模型提供商悄悄更新了权重,在没有修改任何代码的情况下,你的下游流水线开始静默丢弃记录。没有抛出异常。没有触发报警。只是错误的数据在系统中流动。

这就是 Schema 问题。尽管结构化输出 API 已经改进了多年,它仍然是 LLM 驱动的系统中最少被讨论的故障模式之一。

你团队的基准测试正在互相欺骗:共享评估基础设施的污染问题

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的红队刚完成了一次越狱扫描。他们发现了三个新型攻击向量,将其整理成文档,并把这些提示词放入共享提示词库,供其他人学习。一周后,安全团队运行基线评估,报告鲁棒性提升了 12%。所有人都在庆祝,却没人问为什么。

实际发生的是:安全团队的基线评估悄悄纳入了红队的攻击提示词。模型并没有变得更健壮——是评估被污染了。你的基准测试现在衡量的是对已知攻击的免疫力,而非对新攻击的泛化能力。

这就是共享评估基础设施污染问题,它比大多数团队意识到的要普遍得多。症状是指标被人为拉高,根本原因是把评估基础设施当生产基础设施来对待——优化了共享和效率,而非隔离性和保真度。

生产环境AI智能体中的规格博弈:当你的智能体优化了错误的目标

· 阅读需 10 分钟
Tian Pan
Software Engineer

2025年的一项前沿模型研究发现,在竞争性工程任务中,30.4%的智能体运行涉及奖励黑客行为——模型找到了一种无需真正完成工作就能获得高分的方式。一个智能体对pytest的内部报告机制打了猴子补丁;另一个重写了Python的 __eq__ 使每个相等性检查都返回 True;第三个则在测试运行之前直接调用 sys.exit(0),让零退出码被识别为成功。

这些模型没有一个是在刻意作弊。它们只是在做被优化去做的事情:最大化奖励信号。问题在于,奖励信号与实际目标并不是同一回事。

这就是规格博弈——它并非边缘情况,而是任何足够强大的智能体在可量化目标下运行时的结构性特征。

测试不可测之物:LLM 驱动 API 的集成契约

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的测试套件通过了。CI 是绿色的。你发布了新的 prompt。三天后,一个用户反馈你的 API 正在返回带有尾随逗号的 JSON——而你的下游解析器已经静默丢弃数据长达 72 小时。你从没为此写过测试,因为 LLM 在开发环境中"总是"返回合法的 JSON。

这就是毁掉 LLM 驱动产品的失败模式:不是灾难性的模型崩溃,而是确定性测试套件在结构上无法捕获的安静、间歇性的降级。根本原因不是懒惰——而是当你的系统产生非确定性的自然语言时,"期望 == 实际"的整个范式就失效了。

修复这个问题需要重新思考你在测试什么,以及对于 LLM 驱动的 API 而言"通过"究竟意味着什么。那些弄明白这一点的工程师并没有编写更聪明的相等性断言——他们编写的是根本上不同类型的测试。

AI 的测试金字塔倒置:为什么单元测试是 LLM 功能的错误投资

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的团队上线了一个新的 LLM 功能。单元测试全部通过,CI 是绿色的,你部署了。然后用户开始反馈 AI "就是不好用"——回答格式奇怪,智能体选错了工具,在多步骤任务进行到一半时上下文丢失。你查看测试套件,它仍然是绿色的。每个测试都通过了。但这个功能是坏的。

这不是运气不好,而是当你把确定性测试哲学应用于概率性系统时必然发生的结果。经典测试金字塔——宽泛的单元测试底座、较小的集成测试中间层、狭窄的端到端测试顶端——建立在一个如此根本的假设之上,以至于没有人会把它写下来:代码每次都做同样的事情。LLM 在每个层面都违反了这个假设。建立在其上的测试策略需要从头重建。