跳到主要内容

35 篇博文 含有标签「engineering」

查看所有标签

提示词考古:从无文档遗留提示词中还原设计意图

· 阅读需 10 分钟
Tian Pan
Software Engineer

你加入了一个团队,他们已经在生产环境中运行某个 LLM 功能十八个月了。这个功能运作正常——用户喜欢它,业务也在乎它——但没有人能确切解释这个提示词做了什么,或者为何要这样写。编写它的工程师已经离职。当时讨论它的 Slack 消息埋在某个不复存在的频道里。提示词躺在数据库记录中,长达 900 个 token,没有注释,提交信息除了"更新提示词"什么都没有。

而现在,你被要求去修改它。

这种情况比业界承认的要普遍得多。提示词被当成配置值来对待:写起来很快,代码审查中看不到,一旦跑通就被遗忘。区别在于,配置错误的 feature flag 会立即暴露问题,而配置错误的提示词会在数周内悄悄地降低某些边缘情况的处理质量,直到有人注意到。

AI 个性化的冷启动问题:在拥有数据之前如何提供价值

· 阅读需 13 分钟
Tian Pan
Software Engineer

大多数个性化系统是围绕一个飞轮构建的:用户进行互动,你学习他们的偏好,你展示更好的推荐,他们从而进行更多互动。随着数据的积累,飞轮转得越来越快。问题在于,飞轮需要速度才能产生升力——而新用户完全没有速度。

这就是冷启动问题。而且它比大多数团队在首次发布个性化功能时所认识到的更为危险。一个新用户在到达时没有任何历史记录,没有信号,通常还带着怀疑的先验预期:“AI 并不了解我。”你大约有 5 到 15 分钟的时间来证明并非如此,否则他们就会形成一种定论,决定他们是否会留得足够久,以产生那些能让你真正帮助到他们的数据。如果这个窗口期表现糟糕,高达 75% 的新用户会在第一周弃用产品。

冷启动问题不是数据问题,而是初始化问题。工程上的问题是:在缺乏历史记录的情况下,你应该注入什么?

LLM 流水线单体 vs. 链式架构的权衡:任务分解何时有益,何时有害

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数构建 LLM 流水线的团队几乎立刻就会选择链式架构。复杂任务被拆分为多个步骤——提取、分类、摘要、格式化——每个步骤都有自己的提示词。这感觉很自然:更小的提示词更容易编写、调试和迭代。但很少有人会问:链式调用真的比在一次调用中完成所有工作更准确吗?在我见过的大多数代码库中,没有人测量过。

单体 vs. 链式的权衡是 AI 工程中最关键的架构决策之一,但几乎总是凭直觉做出的。本文将梳理实证依据,说明分解何时真正有帮助、何时会悄然使事情变得更糟,以及在生产环境中需要关注哪些信号。

生产环境中的采样参数:那些没人解释清楚的调参决策

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数工程师将 LLM 质量回归视为提示词工程问题或模型能力问题。他们会重写系统提示词、尝试更新的模型,或添加少样本示例。他们很少检查每次 API 调用顶部静静躺着的三个数字:temperature、top-p 和 top-k。但这些默认值正在悄然改变模型产出的每一个响应,错误的调参会导致输出方差——团队往往数月内都把锅甩给模型,直到意识到罪魁祸首不过是一个从未动过的配置值。

这不是入门教程。如果你在生产环境中运行 LLM——用于信息抽取管道、代码生成、摘要,或任何输出流入真实系统的任务——以下是你在智能调参之前必须理解的机制与权衡。

AI 界面中无人关注的可访问性鸿沟

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数 AI 团队都会对其落地页进行无障碍审计。但几乎没有人对聊天界面本身进行审计。这种差距并非源于懒惰 —— 而是因为工具根本不存在。WCAG 2.2 没有针对流式内容的成功标准,没有针对非确定性输出的标准,也没有针对逐个 token 传输的指南。这意味着目前每个将响应流式传输到 <div> 中的 AI 产品都处于合规灰色地带,同时破坏了很大一部分用户的体验。

这并不是一个微不足道的边缘情况。盲人和低视力用户报告称,寻求信息是他们使用 AI 的首要场景。患有诵读障碍、ADHD 和认知障碍的用户正积极尝试使用 AI 工具来减轻阅读负担 —— 而默认的实现模式却实际上让情况变得更糟。

大规模 AI 代码审查:当你的机器人带来的工作量超过它节省的工作量时

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数采用 AI 代码审查器的团队都会经历同样的阶段:最初的兴奋,伴随着大量看似有用的标注问题,然后逐渐演变成完全忽视该机器人。几个月内,工程师们已经形成了一种在不阅读 AI 评论的情况下直接将其关闭的肌肉记忆。工具仍在运行,评论仍在出现,但没有人再根据它们采取行动了。

这不是工具问题,而是衡量标准的问题。团队在部署 AI 代码审查时,从未定义过什么是“净收益”——如果没有这个基准线,告警疲劳最终会胜出。

非确定性服务的 API 契约:随机输出下的版本管理

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的内容审核服务返回 {"severity": "MEDIUM", "confidence": 0.85}。下游计费系统将 severity 解析为枚举值 ["low", "medium", "high"]。一次模型更新后,服务偶尔开始返回首字母大写的 "Medium"。没有任何部署发生,没有 schema 变更。集成在生产环境中悄然崩溃,整整六天无人察觉——因为所有 HTTP 状态码都是 200。

这是 LLM 支撑服务 API 契约的根本问题:表面看起来像 REST API,但底层行为是概率性的。标准契约工具假设确定性。当这个假设被打破时,它是悄无声息地崩溃的。

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

· 阅读需 13 分钟
Tian Pan
Software Engineer

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

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

提供商抽象税:构建无需重写即可切换模型的 LLM 应用

· 阅读需 12 分钟
Tian Pan
Software Engineer

一家医疗初创公司从某个主流前沿模型迁移到了同一供应商提供的新版本。结果是:为了恢复功能对等(feature parity),耗费了 400+ 个工程小时。新模型每次响应生成的 token 数量是原来的五倍,抵消了预期的成本节省。它开始提供未经请求的诊断建议——这带来了合规性风险。而且它破坏了下游的所有 JSON 解析器,因为它把响应包裹在了 Markdown 代码块语法中。同一供应商,不同的模型,却是推倒重来。

这就是供应商抽象税(provider abstraction tax):它不是切换供应商的成本,而是不为此做规划所产生的累积成本。它不是一次性的迁移事件,而是一个持续的消耗——你在升级三周后发现的行为退化、无法跨模型迁移的提示词工程工作,以及因为某个供应商分别计算输入和输出 token 的速率限制而导致静默失败的重试逻辑。直接在单一供应商之上构建系统的团队会无形中积累这种债务,直到收到弃用通知或价格变动通知时,账单才会一次性结清。

你的 AI 功能应该先输给正则表达式一次

· 阅读需 10 分钟
Tian Pan
Software Engineer

一个团队花了三周时间集成一个基础模型,将收到的支持工单分类到不同的路由类别中。该模型在测试中达到了 87% 的准确率。他们发布了。六个月后,一名工程师注意到 70% 的工单在主题行中包含产品名称,而一个简单的查找表就能以 99% 的准确率处理这些工单。LLM 正在处理那困难的 30%,而在其余时间里则在胡言乱语。

这并非一个少见的故事。之所以会发生这种情况,是因为团队将“使用 LLM”作为首选的实现方案,而不是最后的手段。解决方法是设立一个强制性的关卡:在被允许构建 AI 版本之前,你的 AI 功能必须先输给一个笨规则。

委托悬崖:AI 代理可靠性为何在 7 步以上崩溃

· 阅读需 10 分钟
Tian Pan
Software Engineer

一个单步可靠性为 95% 的代理听起来相当出色。但在执行 10 步任务时,成功率降至 60%;20 步时降至 36%;50 步时只剩约 8%——而这还是基于 95% 这个乐观的估计。实际数据显示,真实世界中代理每步操作的失败率接近 20%,这意味着一个 100 步的任务成功率约为 0.00002%。这不是模型质量问题,也不是提示工程问题,而是一个复合数学问题——而大多数构建代理的团队还没有真正内化这一点。

这就是委托悬崖:当你给代理的任务多增加一步时,失败率不是线性增加,而是成倍放大。

AI 功能的延迟预算:当核心组件是随机的,如何制定并达成 p95 SLO

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的系统平均端到端延迟为 400ms,p95 是 4.2 秒,p99 是 11 秒。在产品规格中你承诺了"亚秒级"体验。仪表盘上的每个指标看起来都很正常,直到有人问起 5% 的用户遭遇了什么——这时,你一直引以为傲的平均值才成了埋葬你的东西。

这就是 AI 功能的延迟预算问题,它与你之前解决过的问题有着本质区别。当核心组件是数据库查询或微服务调用时,p95 延迟大致可预测,并且适用标准 SRE 技术。而当核心组件是 LLM 时,响应时间的分布呈重尾特征,依赖于输入,并且部分由你无法控制的条件驱动。在制定诚实的 SLO 之前,你需要一套不同的思维模型——更别说去达成它了。