跳到主要内容

35 篇博文 含有标签「prompt-engineering」

查看所有标签

Prompt Sprawl:当系统提示词演变成难以维护的遗留代码

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的系统提示词(system prompt)起初只有 200 个 token。一个清晰的角色定义,几条格式规则,一两个约束条件。六个月后,它变成了 4,000 个 token 的指令堆砌,其中一半互相矛盾,团队里也没人能解释为什么会出现关于 JSON 格式化的第三段内容。欢迎来到提示词膨胀(prompt sprawl)—— 这种生产环境中的问题会在每个人都认为提示词“没问题”的情况下,悄悄削弱你的 LLM 应用。

提示词膨胀发生在你把提示词当作“只增不减”(append-only)的配置时。每一个 bug 都会换来一条新指令。每一个边缘案例都会换来一条新规则。每一个利益相关者(stakeholder)都会换来一段新文字。提示词不断增长,却没人删掉任何东西,因为没人知道哪些是起到支撑作用的(load-bearing)。

这就是遗留代码 —— 甚至更糟。没有编译器来捕捉矛盾。没有类型系统来强制执行结构。没有测试套件能验证第 47 条指令是否否定了第 12 条。而且,与乱作一团的代码库不同,你无法安全地进行重构,因为没有依赖图(dependency graph)来引导你。

LLM 应用的 CI/CD:为什么部署 Prompt 与部署代码完全不同

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的代码通过一个流程发布:特性分支 (feature branch) → 合并请求 (pull request) → 自动化测试 → 预发布 (staging) → 生产环境 (production)。每一步都有门槛。如果没有通过你定义的检查,任何东西都无法到达用户手中。这种“枯燥”正是它最好的地方。

现在想象你需要更新一个系统提示词 (system prompt)。你在仪表盘中编辑字符串,点击保存,更改立即生效 —— 没有测试,没有预发布,版本控制中没有 diff,除了手动改回去之外没有回滚的方法。这就是大多数团队的运作方式,也是提示词更改成为 LLM 应用非预期生产事故主要原因的原因。

挑战不在于团队粗心大意。而在于持续交付 (continuous delivery) 的规范是为确定性系统构建的,而 LLM 并非确定性的。整个思维模型需要从头重建。

生产环境中的提示词版本管理:工程团队历经磨难才学会的纪律

· 阅读需 12 分钟
Tian Pan
Software Engineer

你在凌晨 2 点收到了报警。用户报告输出内容全是一堆垃圾。你通过 SSH 登录,检查日志,盯着追踪信息 —— 结构上看起来一切正常。模型有响应,延迟也正常。但答案就是不对劲。接着,事故频道里出现了一个问题:“现在到底运行的是哪个版本的 Prompt?”

如果你不能在 30 秒内回答这个问题,说明你正面临 Prompt 版本管理问题。

在大多数早期 LLM 项目中,Prompt 被当作配置来对待。产品经理修改 .env 文件中的字符串,开发者将更新后的指令粘贴到硬编码的常量中,还有人在 staging 的 Slack 频道中粘贴了一个略有不同的版本。最终,版本产生了偏差,没有人知道哪里运行的是什么。这种在实验阶段助你快速上线的随意性,在你拥有真实用户的那一刻就会变成一种负债。

微调通常是错误的选择:大语言模型定制决策框架

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数构建 LLM 产品的工程团队都遵循相同的路径:提示基础模型,遇到性能瓶颈,然后立即将微调作为解决方案。这种本能反应往往是错误的。

微调是一个强大的工具。它可以释放真实的性能提升,在大规模应用中降低推理成本,并让你对模型行为进行精确控制。但它也带来了隐性成本——在数据、时间、基础设施和持续维护方面——团队通常会系统性地低估这些成本。在许多情况下,提示工程或检索增强(RAG)本可以让他们更快、更便宜地达成目标。

本文为你提供了一个具体的框架,告诉你每种方法在何时胜出,其依据是最近的基准测试和生产经验。

Prompt Caching:将 LLM 成本降低 90% 的优化方案

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数基于 LLM 构建产品的团队都多付了 60%–90% 的费用。这并不是因为他们使用了错误的模型或提示词效率低下,而是因为他们在每次请求中都在重复处理相同的 Token。提示词缓存(Prompt caching)可以解决这个问题,且只需大约 10 分钟即可实现。然而,它仍然是生产级 LLM 系统中利用率最低的优化手段之一。

实际情况是:每次你向 LLM API 发送请求时,模型都会对提示词中的每一个 Token 运行注意力机制(Attention)。如果你的系统提示词(System prompt)有 10,000 个 Token,且每天处理 1,000 个请求,那么你每天仅为提示词中的静态部分(即永不变化的上下文)就要支付 1,000 万个 Token 的处理费用。提示词缓存会存储中间计算结果(即 Key-Value 注意力状态),以便后续请求可以完全跳过这部分工作。

生产级 AI 系统中的提示词版本控制与变更管理

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个团队在客服提示词中增加了三个词,为了让它“更具对话感”。几小时内,结构化输出错误率激增,一条创收流水线停滞。工程师们花了将近一整天的时间调试基础设施和代码,才有人想到去检查提示词。没有版本历史。没有回滚机制。这三个词的修改是由一位产品经理直接在配置文件中内联完成的,他完全没理由认为这会有风险。

这是一个典型的生产环境提示词事故。类似的戏码在各种规模的公司中上演,其根源几乎总是一样的:提示词被视作临时配置,而不是软件。

上下文工程:比提示词工程更重要的学科

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数构建 LLM 系统的人最初几周都会沉迷于优化提示词。他们进行 A/B 测试,争论该使用 XML 标签还是 JSON,并不断迭代系统提示词,直到模型输出看起来正确的内容。然而,一旦进入生产环境,加入真实数据、记忆和工具调用——模型就会开始出现各种提示词调优无法解决的异常行为。问题从来都不在提示词上。

生产级 LLM 系统的真实瓶颈在于上下文——即模型输入中包含什么信息、以何种顺序排列、信息量有多少,以及这些信息是否与模型即将做出的决策相关。上下文工程是将该输入空间作为系统首要关注点进行设计和管理的学科。它包含了提示工程,就像软件架构包含了变量命名一样:较小的技能依然重要,但它并不能大规模地决定最终成果。

你的 CLAUDE.md 可能太长了(这就是它不起作用的原因)

· 阅读需 11 分钟
Tian Pan
Software Engineer

这是一个在采用 AI 编程智能体的团队中不断上演的模式:一位开发者发现 Claude 违反了某条规则,于是他们在 CLAUDE.md 中添加了一个更清晰的版本。Claude 违反了另一条不同的规则,于是他们也把那条加上。几周后,这个文件达到了 400 行,而 Claude 忽略的规则比以往任何时候都多。解决方案反而让问题变得更糟。

发生这种情况是因为指令文件的一个基本属性,而大多数开发者从未将其内化:超过一定规模后,添加更多指令会导致模型遵循的指令变少。 正确编写指令文件与其说是追求完整性,不如说是进行无情的筛选 —— 知道该包含什么、该删除什么,以及如何构建其余部分。

Prompt Engineering 深度解析:从基础到高级技术

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数工程师将提示词(prompts)视为咒语——稍微修改一下措辞,寄希望于它能奏效,然后就此作罢。这在演示阶段(demos)没问题。但在生产环境中,这会导致系统表现不稳定:没人知道为什么模型在周二的表现与周一不同,一次常规的模型更新可能会悄无声息地破坏掉三个功能。正确的提示工程是一门学科,而不是一种仪式。本文涵盖了全栈内容:何时使用每种技术、基准测试(benchmarks)实际显示了什么,以及陷阱在哪里。

微调 vs. 提示工程:生产级 LLM 的决策框架

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数团队在微调的时机上不是太早就是太晚。过早进行微调的团队会花费数周时间在训练管道上,结果却发现一个更好的系统提示就能解决问题。而等待太久的团队则在数百万个重复任务上运行昂贵的 70B 推理,同时接受着一个微调后的 7B 模型能以十分之一的成本击败的准确性。

决策的关键不在于哪种技术“更好”。而在于根据你的具体限制条件——数据量、延迟预算、准确性要求以及任务定义的稳定性——选择合适的工具。下面将介绍如何进行思考。

生产环境中的提示工程:真正重要的是什么

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数工程师学习提示工程都是倒着来的。他们从“发挥创意”和“一步一步思考”开始,反复迭代一个演示直到它奏效,然后在生产环境中发现模型有 15% 的时间在“幻觉”(胡编乱造),他们的 JSON 解析器每隔几小时就会抛出异常。让聊天机器人令人印象深刻的技术,往往不是让生产系统可靠的技术。

在将 LLM 功能部署到真实系统一年后,以下是真正区分有效提示和在负载下仍能保持稳定的提示的关键。