跳到主要内容

86 篇博文 含有标签「architecture」

查看所有标签

以单次对话成本为产品契约:当定价驱动架构设计时

· 阅读需 12 分钟
Tian Pan
Software Engineer

要发现你的 AI 功能定价模型出错了,最直接的方法就是看哪位工程师正在半夜重写截断逻辑。他们并不是在交付什么新功能 —— 他们是在修补一个 PRD 从未提及的单位经济效益(unit-economics)漏洞,而且由于产品规格告诉他们预算是无限的,这个补丁必然是对用户不友好的。在固定费用的 SaaS 方案中,任何时长超过中位数的对话都在实时抽走公司的利润。唯一的问题在于,产品团队是否能在财务部门发现之前承认这一点。

传统的 SaaS 经济模型建立在近乎零的边际用户成本之上:一旦软件构建完成,服务下一个客户几乎不会增加基础设施开支。但 AI 功能打破了这一假设。对话中的每一次交互都会消耗推理算力,其成本随着 Prompt 大小、输出长度、工具调用(tool-call)的扇出量以及检索量而增加 —— 而且对话没有自然的终点。一个重度用户可以在一个计费周期内消耗 50 倍于中位数的成本,且完全不出产品设计的正常路径。在固定定价模式下,这种用户实际上是由其他用户群供养的,而公司通常要到三个月后的销货成本(COGS)报告出来时才会发现这一点。

这就是为什么 AI 功能的定价不是一个等到发布后再处理的财务问题。它是一个架构输入,决定了产品被允许做什么。如果拒绝在产品规格中将其透明化,只意味着它稍后会被那些没有产品决策权的人以更糟糕的方式解决。

跨渠道记忆:当你的智能体遗忘邮件上下文时

· 阅读需 11 分钟
Tian Pan
Software Engineer

周一,一位客户在 Slack 上询问你的助手如何启用某项功能,得到了清晰的回答,然后继续工作。到了周五,他们发邮件要求确认之前的决定,而运行在不同会话存储上的助手——完全不知道周一的聊天发生过——给出了截然相反的建议。客户不会针对两个产品提交两张工单,他们会针对你的 AI 提交一张工单,而且他们是对的。对他们来说,只有一个助手。你写了三个助手并将它们粘在三个特定渠道的会话存储上,这本该是你不该泄露的实现细节。

!["https://opengraph-image.blockeden.xyz/api/og-tianpan-co?title=%E8%B7%A8%E6%B8%A0%E9%81%93%E8%AE%B0%E5%BF%86%EF%BC%9A%E5%BD%93%E4%BD%A0%E7%9A%84%E6%99%BA%E8%83%BD%E4%BD%93%E5%BF%98%E8%AE%B0%E9%82%AE%E4%BB%B6%E5%BE%80%E6%9D%A5%E6%97%B6"]

这就是跨渠道记忆问题,它处于两个被团队低估的因素的交汇点:用户对连续性的假设有多强烈,以及渠道团队为了快速交付而编写各自会话存储的行为有多普遍。最近的行业数据清晰地揭示了这一差距——只有 13% 的组织成功实现了全渠道的完整对话上下文衔接。碎片化多渠道支持的 CSAT(客户满意度)仅为 28%,而真正的全渠道支持则为 67%。这 39 个百分点的差距并不是模型质量的差距,而是记忆架构的差距。

策略文件:为什么你不应该把拒绝规则写在系统提示词里

· 阅读需 13 分钟
Tian Pan
Software Engineer

上个季度,一家金融科技初创公司的安全审核员在系统提示词(system prompt)中添加了四行内容。这次修改包含一条拒绝规则,旨在防止助手为公司未获得运营许可的司法管辖区提供具体的税务建议。这听起来很合理、范围明确且符合审计要求。该规则在周二上线。到周五时,评估套件显示在与税务完全无关的客户入职流程中出现了 7 个点的下降——模型开始对任何提及国家的提问都模棱两可,甚至包括“这个账户持有哪种货币”。产品团队撤回了修改。安全团队在下周以略有不同的措辞重新发布了它。三周后,同样的退化以不同的形式再次出现,而接下来的安全修改又破坏了另一个无关的流程。

这里的 bug 不在于措辞,而在于拒绝规则放错了位置。它被挤进了一个 2,400 token 的构件中,该构件还包含助手的对话语气、格式契约、任务指令以及其他六项策略条款——对其中任何一项的修改都是对所有内容的行为修改,因为模型无法分辨哪句话是策略,哪句话是风格。生产环境中的系统提示词之所以变成了一坨乱麻的单体,是因为三个正交的关注点伪装成了一个整体。没有将它们解耦的团队在每次修改时都在支付“集成税”。

我们已经有了:当 AI 功能在重新造你已有的代码轮子

· 阅读需 13 分钟
Tian Pan
Software Engineer

我合作过的一个团队在上季度发布了一个“智能”日期提取器。该模型可以解析像“下周二”和“14 号之后的两周”这样的自然语言短语,在生产环境中通过功能标志 (feature flag) 运行,在选定的层级上每次请求的成本约为 3 美分。六周后,一位后端工程师偶然参加了一场设计评审,随口提到公司其实早就有了一个日期解析器。它编写于 2019 年,存在于一个 AI 团队中没人读过的工具模块里,能以不到 1 毫秒的延迟处理 99.4% 的相同输入,而且运行成本几乎为零。那个 AI 功能并没有被撤下,而是被合理解释了——“模型可以处理长尾情况”——于是团队继续前进,发布了一个比公司已有方案更贵、更慢、准确度更低的版本。

这并非个案。对于那些比 AI 团队成立时间更久的公司来说,这是 AI 功能最主要的失败模式。这种模式不断重复:一个智能分类器复制了多年前编写的正则表达式流水线;一个检索系统获取了一个内部服务一直作为类型化表维护的供应商列表;一个智能体 (agent) 学习提取那些解析器已经可以确定性提取的实体。AI 功能发布的质量标准甚至低于它并不知道其存在的确定性系统,而构建确定性系统的团队往往在跨团队会议上才发现这一点。

HIPAA、SOC2 与你的智能体:合规性对架构产生的实际约束

· 阅读需 14 分钟
Tian Pan
Software Engineer

典型的 AI 团队在面对合规性时的经历通常是这样的:智能体(Agent)已经上线,用户非常喜欢,然后法务部门转来一封邮件,询问系统是否符合 HIPAA 标准。被指派回答这个问题的工程师发现,上下文窗口(context windows)包含 PHI,没有足够粒度的审计日志,LLM 提供商没有签署商业伙伴协议(BAA),而且智能体的工具权限超出了最低必要标准所允许的范围。修复工作需要三个月,并且需要重写部分代码。

这种模式并非特例。根据 2024 年的一项行业调查,78% 的企业高管无法在 90 天内通过 AI 治理审计,而 2025 年有 42% 的公司放弃 AI 项目主要是由于合规性和治理失败——而非技术原因。所构建的内容与合规性实际要求之间的差距是架构层面的,并且在第一轮迭代(sprint 1)中就已经形成。

速率限制是设计约束,不是错误代码

· 阅读需 10 分钟
Tian Pan
Software Engineer

我认识的一个团队构建了一个带有智能体循环的金融助手。第一周,API 费用是 127 美元。第十一周,费用飙升至 47,000 美元——同样的系统,同样的功能,范围上没有任何有意的变化。智能体触及了速率限制,重试逻辑忠实地进行了重试,循环没有熔断器,成本在悄无声息中不断累积,直到有人注意到他们设置得太高的计费告警。

这不是一个 bug 的故事,而是一个架构的故事。团队的思维模型将速率限制视为需要被动处理的错误。他们构建的系统完全反映了这种模型。那 47,000 美元的那一周,正是系统按设计运行的结果。

超时感知的智能体设计:如何返回部分结果而非静默失败

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个智能体成功创建了 GitHub Issue、开启了 Jira 工单,并更新了共享表格。然后在发送 Slack 通知之前超时了。框架将此次运行记录为"已交付"。用户从未收到通知。副作用存在于三个系统中,而对人类真正重要的结果却没有送达。

这是生产智能体系统中最常见的超时失败模式,但几乎从来不是团队预先准备好的那种。大多数智能体实现把超时当作普通异常处理:捕获、记录、返回错误。即使智能体完成了 90% 的工作,用户也什么都得不到。问题不在于是否设置超时——每个生产系统都需要超时。问题在于当时钟走完时,智能体该如何应对。

AI 系统设计顾问:它能做对什么、会自信地做错什么,以及如何分辨

· 阅读需 10 分钟
Tian Pan
Software Engineer

一个三人团队花了整整一个季度,为一个日活跃用户仅 200 人的应用实现了事件溯源架构。这套架构技术上无懈可击,运维上却是一场噩梦。设计方案来自 AI 的推荐,团队之所以接受,是因为推理听起来流畅、权衡分析看似严谨,而最终构建出来的系统也完全符合高级工程师架构图上的样子。

这个故事如今已成为一种警示性范式,而非孤例。AI 在特定的、可识别的场景下能够提供真正有价值的架构输入——而在从外部看起来几乎相同的情况下,它也会给出自信满满却大错特错的建议。这两者之间的差距,如果你把 AI 当成答案机器,就几乎无从察觉;但如果你把它当成思维伙伴,则完全可以驾驭。

断连代理模式:为不稳定的网络环境进行设计

· 阅读需 12 分钟
Tian Pan
Software Engineer

空乘人员要求你切换到飞行模式。你的团队上季度交付的客服代理正在一个标签页中对话到一半,接下来的用户回合却返回了一个永远无法解决的加载动画。这个智能体并没有以任何有趣的方式崩溃。它只是在一百个未写明的细节中假设了网络是存在的。

这个假设是你的产品团队从未写下的最昂贵的代码行。它支配着你如何存储对话状态、如何调用工具、如何呈现错误、你针对什么进行评估,以及当连接在对用户重要的工作过程中中断时,用户会怎么做。“离线智能体模式”是一种将这一假设从基础架构中抽离出来、审视它,并明确决定当通往托管 API 的往返不可用时应该发生什么的纪律。

运行时 Prompt 热重载:为什么你的 Prompt 不该被锁定在构建流程中

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数公司的第一次 AI 事故都遵循一个剧本:一名提示词工程师发现模型对刚刚开始出现在实际流量中的某个类别进行了错误分类,于是提交了一个 PR,对系统提示词(system prompt)进行了一行微调,然后在模型继续在生产环境中进行错误分类的这 23 分钟里,盯着构建队列。修复手段只是一个字符串。而部署却是一个二进制文件。这种不匹配并不是工具层面的疏忽 —— 而是团队在将系统提示词与应用程序代码一同放入 .py 文件的那天起,就隐含做出的架构决策。

将提示词更改与部署管道耦合是你强加给自己的限制。分布式系统中没有任何定律规定模型的行为契约必须与编排代码封装在同一个制品(artifact)中。运行时提示词热重载模式通过像对待功能开关(feature flags)、路由规则和价格表那样对待提示词,从而切断了这种耦合 —— 即将其视为在请求时从版本化存储中拉取的配置,并辅以短效的本地缓存和定义明确的安全原语(safety primitives)。这样做的好处是事故响应时间从以分钟计的构建时长缩短到以秒计,而代价是你必须正视一个你的发布流程可能忽略的第三个部署平面。

技能即模块:当你的智能体堆栈需要导入系统时

· 阅读需 12 分钟
Tian Pan
Software Engineer

我上个月交流过的一个团队遇到了一个任何资深包管理器用户都能一眼识破的 Bug。他们的智能体中有两个技能(skills)都提供了相同的 search_orders 能力 —— 一个来自计费工具包(billing toolpack),另一个来自 CRM 工具包。最后添加到清单(manifest)中的那个成了生效者。智能体在三周内都在静默地调用错误的能力。退款发到了错误的客户 ID。他们告诉我,修复方法是召集 CRM 和计费工程师开会以“协商命名”。开会。只为了解决两个可安装模块之间的名称冲突。

就在那一刻,我意识到了当前的智能体运行时(agent runtimes)正在发生什么。运行时加载能力模式 —— 技能、工具包、提示词片段、检索提供程序、MCP 服务器 —— 正汇聚到几十年前编程语言通过导入系统(import systems)解决的相同问题上:名称解析、版本锁定、依赖图、冲突检测、延迟加载。而大多数智能体运行时要么在拙劣地重新发明每一项,要么干脆无视,并以“开会”的形式将账单寄给用户。

何时跳过实时 LLM 推理:异步批处理流水线的生产实践

· 阅读需 10 分钟
Tian Pan
Software Engineer

某个团队此刻正看着他们的 LLM 月支出以 10 倍速度增长,而 p99 延迟徘徊在四秒左右。工程师们增加了更多重试。重试触发了速率限制。速率限制触发了回退。回退也是 LLM 调用。没有人停下来问:这个功能真的需要实时响应吗?

大多数 AI 产品团队都为"幸福路径"设计架构——用户发消息,模型响应,用户看到结果。同步调用模式是 API SDK 在第一个代码示例中演示的内容,因此它就这样上线了。但生产 LLM 工作负载中有相当大一部分与用户坐在键盘前等待毫无关系。它们是文档增强任务、内容分类流水线、向量嵌入生成、夜间摘要生成和后台质量评分。对于这些工作负载,实时推理是错误的工具——而坚持使用它所付出的代价是真实的金钱、级联故障,以及你要花费数月才能理清的运营复杂性。