Prompt Engineering 是一项临时技能

发布: (2026年2月2日 GMT+8 18:54)
13 min read
原文: Dev.to

Source: Dev.to

大多数开发者最初注意不到的问题

大多数开发者通过聊天窗口接触 AI。
你输入一些内容。

起初,这种感觉很有力量。通过精心编写提示,你可以**“塑造”输出。经过足够的迭代,你甚至可以得到出乎意料的好结果。许多团队就在这里止步,认为他们已经学会了“使用 AI”**。

问题随后出现

  • 在提示编写几周或几个月后,有人尝试复用它。
  • 输出会出现细微变化。
  • 出现新的边缘案例。
  • 同事为了“修复”一个问题而改写提示的某部分,却不小心破坏了另一个功能。
  • 提示变得越来越长。
  • 上下文被重复。

没有人再完全确定哪些部分是关键的。

最终,提示变成了一个脆弱的工件——它能用就能用,不能用时就失效。

这不是工具的问题,而是一个系统问题

为什么提示工程在真实系统中会失效

  1. 提出问题
  2. 观察响应
  3. 优化措辞
  4. 重复

这在一次性任务、研究、头脑风暴和学习中效果良好。

但它并能清晰地映射到生产软件的构建方式。

生产系统由以下约束定义:可预测性、可复用性、所有权以及随时间的变化。在聊天窗口中编写的提示默认不具备这些属性。

核心不匹配

基于聊天的 AI生产软件
鼓励实验需要稳定性
目标:本次得到一个好答案目标:保证长期行为

提示工程优化的是局部成功。软件工程优化的是长期行为。两者的目标不同。

Source:

提示不是接口

在软件中,接口是你依赖的东西。它有明确的期望:

  • 输入内容
  • 输出内容
  • 不会发生的情况

提示 并不 自然地编码这些保证。

  • 两个看起来相似的提示可能表现截然不同。
  • 一点文字的改动就可能改变语气、结构,甚至任务的解释。
  • 模型没有向后兼容性的概念。
  • 除非你自行构建,否则没有模式(schema)强制。
  • 唯一的“契约”是“上次似乎能工作”。

团队中常见的失败模式

  1. 一位开发者编写了一个对其使用场景有效的提示。
  2. 另一位开发者将其复制到稍有不同的上下文中。
  3. 随着时间推移,出现了各种变体。
  4. 通过添加更多指令来修复 bug。
  5. 该提示变成了 用自然语言编写的、未文档化的微型程序

此时,团队正在 在没有专门用于维护的工具 的情况下维护逻辑。

为什么系统规模扩大时情况会更糟

  • 小系统可以容忍脆弱的组件。
  • 大系统则不能。

一旦 AI 在多个地方使用——面向用户的功能、后台任务、内部工具——不一致的代价就会提升。在某个上下文中“基本可以接受”的回复,在另一个上下文中可能是不可接受的。

团队通过在提示中添加更多约束来应对:格式、语气、排除项、回退方案、示例、警告。

讽刺的是,这常被描述为 “更好的提示工程”。

实际上发生的情况是,提示被 推到超出其擅长的范围——它们被用作设计的替代品。

在大规模下,这会导致三个可预见的问题

  1. 认知负荷
  2. 隐藏耦合
  3. 变更瘫痪

这些并非 AI 问题,而是经典的软件维护问题。

更好的思维模型:从提示到用例

帮助的转变 不是 一个新模型或更好的措辞技巧,而是你对 AI 使用方式的概念化改变。

不要从提示的角度思考,而要从 可调用任务 的角度思考

可调用任务拥有一个可以 独立于其实现方式 命名的目的。它回答的问题类似于:

“这个 AI 组件在系统中执行的工作是什么?”

示例用例

  • “为 Google 搜索广告生成高意图标题。”
  • “将支持工单摘要为面向客户的解释。”
  • “将技术文档改写为适合新用户入职的语言。”

这些 不是提示,而是 用例

一旦你命名了任务,就可以像对待其他系统组件一样对其进行推理。

Source:

AI 作为基础设施,而非对话

在生产系统中,AI 应该更像 基础设施,而不是协作者。

  • 基础设施本质上是 刻意无聊 的。
  • 它是 可预测 的。
  • 它只 做一件事
  • 它是 可调用 的。

你不需要每次使用它时都与之协商。

  • 数据库查询不会因为有人用不同的方式表达而改变行为。
  • 支付 API 不会重新解释意图。

接口定义了允许的操作。

AI 组件不必完全确定性,但它们 必须具备有界行为。目标不是产生相同的输出,而是 保持意图一致

这正是提示(prompts)不足之处。它们太贴近模型的原始行为,向调用者暴露了过多的表面区域。

将 AI 逻辑封装在 稳定的任务边界 后面,可减少这种表面区域。

什么是 AI 包装器

概念上,AI 包装器是一个具名、可复用的任务定义,位于你的系统和模型之间。它编码了:

  • AI 预期执行的任务
  • 它运行的约束条件
  • 输出的结构
  • 系统其余部分可以安全假设的前提

重要的不是措辞,而是抽象

这呼应了数十年前软件工程的转变:

  • 从内联逻辑 → 函数
  • 从脚本 → 服务

一个具体示例:从提示到可调用任务

基于提示的方法

“生成多个高转化率的 Google 广告标题。关注意图。避免使用通用短语。遵守字符限制。”

此提示已复制、调整并在临时使用中重复使用。

基于任务的方法

任务: GenerateGoogleRSAHighIntentHeadlines

  • 只定义一次,拥有明确的契约(输入模式、输出格式、约束条件)。
  • 在代码库中可复用。
  • 集中改进;系统其余部分依赖 任务名称,而不是脆弱的提示字符串。

要点

  1. 将 AI 组件视为基础设施——稳定、可调用且有界。
  2. 定义可复用的任务,而不是散落的原始提示。
  3. 在包装器后封装提示,以强制执行契约、模式和版本控制。
  4. 采用与其他服务相同的工程纪律:测试、监控、文档编写和演进。

通过将“提示工程”转变为 任务工程,你可以把 AI 从脆弱的实验性产物,变成生产系统中可靠且可维护的一部分。

Prompt Engineering 与 Wrapped Tasks

以 Prompt 为中心的开发问题

  • 不稳定性: 模型可能会变化,内部指令也会演进,但任务边界保持不变。
  • 认知负荷: 当 Prompt 直接嵌入代码或配置中时,每个调用点都必须同时理解 它在调用什么 以及 如何向模型提问

包装任务的优势

采用包装任务的方式,责任转移到 任务定义 本身,开发者可以在更高的抽象层次上思考:

“这个组件需要广告标题。”
“这个服务提供广告标题。”

开发者不再需要在每次调用时考虑语气、排除项或格式化——这些关注点在 一次单一位置 处理。这就是成熟系统的扩展方式:将复杂性移动到定义明确的边界上。

Prompt Engineering 仍然适用的场景

Prompt Engineering 并非毫无用处;当它被当作最终架构时,只是 误用

  • 探索工具:
    • 探索模型能做什么。
    • 理解边缘案例。
    • 原型化行为。

这类似于在正式化 API 之前编写探索性脚本。错误在于把探索阶段当作生产解决方案。

长期技能胜过 Prompt 小技巧

  1. 确定稳定的使用场景。
  2. 定义清晰的任务边界。
  3. 设计系统可以依赖的输出。
  4. 在不破坏调用方的前提下演进行为。

这些是 系统设计 能力,而不是 Prompt 编写技巧。

简要介绍 Zywrap

一旦采用基于包装器的模型,接下来要考虑的就是 实现

  • Zywrap 是一个基础设施层,将 AI 用例形式化为可复用、可调用的包装器。
  • 它将真实世界的任务捕获为 稳定的系统组件,而不是临时的提示。
  • Zywrap 不是 聊天式 AI 的替代方案;它实现了另一种思维模型:AI 作为生产基础设施

无论是自行构建这样的层,还是采用已有的实现,架构上的转变都是关键所在。

未来:更少提示,更多系统

  • 提示工程仍将在探索、教育和实验方面保持价值。
  • 不会成为定义可靠 AI 系统的技能。

长寿系统建立在抽象之上,而非巧妙的措辞。

长期在 AI 领域取得成功的团队,将不再问“我们如何写出更好的提示?”,而是开始问“我们的系统依赖的稳定任务是什么?

这个问题引导出可维护的设计,这是一项永不过时的技能。

Back to Blog

相关文章

阅读更多 »

可见的努力

在选择不使用当前的情况下,名为 Pith 的代理最近写了一篇关于从一个 AI 模型切换到另一个模型的文章。权重发生了变化。API key 也进行了交换。

设计智能体工作流:实用示例

上一篇文章聚焦于 failure modes:agents 失效的地方,以及我们在审查它们的 output 时的失误。此次跟进从 diagnosis 转向 design。Sa...