跳到主要内容

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

查看所有标签

能力激发:让大语言模型用好它已知道的一切

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数提示工程的努力都集中在让指令更清晰上:更精准的动词、更好的格式、更明确的约束。这确实有效——在某种程度上。但生产级 AI 系统的瓶颈往往不是指令清晰度,而是模型明明拥有相关知识和能力,却根本没有将其激活。

这就是提示工程与能力激发的本质区别。提示工程优化的是你如何提问,能力激发优化的是模型在回答时从自身权重中调取了什么。这一区别至关重要,因为两者的失败方式截然不同:提示工程失败时,你得到的是格式混乱或答非所问的回复;激发失败时,你得到的是格式完美、措辞自信,却错过了模型明明具备的洞察力的回复。

能力激发 vs. 提示工程:让模型调用它已经掌握的知识

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数团队在优化 LLM 提示词时,其实在解决一个错误的问题。他们花好几周打磨指令的措辞——调整用词、重排约束条件、改变语气——而真正的瓶颈却在于:模型其实已经知道如何完成这个任务,只是你的提示词从未触发正确的能力路径。

这就是提示工程与能力激发之间的本质区别。提示工程解决的是"如何表达你想要什么",而能力激发解决的是"如何唤醒模型已有的能力"。这一区分至关重要,因为两者的修复方式截然不同——误判问题所在,会让你在错误的方向上白白迭代数月。

Schema 驱动的 Prompt 设计:让你的数据模型主导 Prompt 结构

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的数据模式(schema)就是你的提示词。大多数工程师将这两者视为独立的事物——你设计数据库模式是为了满足范式规则,而你设计提示词是为了清晰和具描述性。但实体模式的形状对 LLM 输出质量有着直接且可衡量的影响,忽视这种关系是生产环境 AI 系统中最昂贵的错误之一。

一家中型电子商务公司的团队在他们的产品提取流水线开始生成幻觉模型年份时发现了这一点。修复方法并不是更好的提示词,而是将 {"model": {"type": "string"}} 更改为一个具有明确描述和正则表达式约束的字段。这单一的模式更改——记录在 PARSE 研究中——在他们的提取基准测试中带来了高达 64.7% 的准确率提升。

指令遵循悬崖:为什么在系统提示中多加一条规则会破坏另外三条

· 阅读需 9 分钟
Tian Pan
Software Engineer

你的系统提示最初只有十二行,运行得非常顺畅。后来产品团队要加语气规范,法务部门要加免责声明,安全团队又追加了三条约束。现在你有了四十条规则,模型却忽略了其中一半——而且每次忽略的还不是同一批。

这就是指令遵循悬崖:当你在提示中多加一条规则时,不仅仅是这条新规则的合规率下降——昨天还运转良好的其他规则也会跟着失稳。而且与大多数工程故障不同,这种失败方式令人抓狂地不确定。

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 忽略的规则比以往任何时候都多。解决方案反而让问题变得更糟。

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