Skip to content
返回 AI 编程

结构化提示词工程模式

产生一致、可审查代码的可复用提示词模式:角色、上下文、约束、输出格式。

提示词工程进阶

为什么

GitHub 2024 调查发现 92% 的美国受访者用 AI 编程工具生成测试用例,73% 的开源受访者用 AI 工具编程或写文档。临时提示词产生不一致的输出。

结构化模式(角色 + 上下文 + 约束 + 格式 + 示例)使输出足够确定以供审查和迭代。这是'偶尔好'与'可靠好'的 AI 代码之间的差别,并让你能将提示词与代码一起版本化。

何时使用

在以下情况使用结构化提示词:重复同类 AI 任务(写单元测试、加 REST 路由);多个队友使用 AI 且希望一致输出;或 AI 输出必须匹配严格格式(JSON schema、特定文件模板)。一次性探索性问题可跳过。

如何做

1. 选择模式。五块模式适用于大多数代码任务: [角色] [上下文] [约束] [输出格式] [示例] 2. 角色:AI 扮演谁。要具体。 "你是一名资深 TypeScript 工程师,编写严格、null 安全的代码。" 3. 上下文:仅提供所需内容,带文件引用。 "项目:Astro 7 + zod。相关文件:@src/api/router.ts @src/data/books.ts" 4. 约束:输出必须遵守的硬规则。 - 仅使用命名导出。 - 用 zod 验证所有输入。 - 不添加新依赖。 - 匹配 router.ts 中现有错误处理模式。 5. 输出格式:你想要的确切形状。 "仅返回新文件内容,无 markdown 围栏,无解释。" 6. 示例:一两对输入/输出(few-shot)。这是杠杆最高的块。 粘贴一个已知良好的路由处理器并说"遵循此形状"。 7. 将提示词存为可复用文件(prompts/add-route.md)并纳入 git 版本。 输出漂移时迭代;像对待代码一样审查提示词。

示例

可复用提示词文件:prompts/add-route.md ## 角色 你是一名 Astro 7 + zod 项目的资深 TypeScript 工程师。 ## 上下文 - 路由:@src/api/router.ts(Hono 风格处理器) - 数据层:@src/data/books.ts(Books 表 CRUD) - 需对照的现有路由:@src/api/routes/health.ts ## 约束 - 用 zod schema 验证请求体;推断类型。 - 创建返回 201,验证错误返回 400,DB 错误返回 500。 - 仅命名导出;不添加新依赖。 ## 输出格式 单个 TS 文件,无 markdown 围栏,无散文。 ## 示例 (此处粘贴 health.ts 内容作为需遵循的形状) 在 Cursor 中使用:@prompts/add-route.md "添加 POST /api/books"

常见问题

  • ⚠错误:模型返回 "I cannot help with that" → 改写去除受限措辞;收窄范围并提供明确的允许示例。
  • ⚠模型输出 JSON 解析错误 → 用 ```json 围栏包裹并在系统提示加 "仅返回合法 JSON"。
  • ⚠错误:超出 token 限制(400 Bad Request) → 拆分提示、摘要前文或切换更大上下文模型。
  • ⚠错误:模型返回 "I cannot help with that" → 改写去除受限措辞;收窄范围并提供明确的允许示例。

最佳实践

  • ✓提示词保持在约 2000 token 以内。过长会稀释对实际任务的注意力。
  • ✓将约束写为否定要点('不添加依赖')— 显式时模型更易遵循否定。
  • ✓在 git 中版本化提示词,并在 PR 中像代码一样审查提示词 diff。
  • ✓对同一任务 A/B 测试提示词变体;保留审查修正更少的那版。
  • ✓全团队对每类任务复用一个规范提示词,保证一致输出。

常见问题解答

什么是五块提示词模式?

角色 + 上下文 + 约束 + 输出格式 + 示例。角色设专长、上下文限定文件、约束设硬规则、格式定形状、示例(few-shot)锚定。合起来使输出足够确定以供审查。

为什么提示词需要 few-shot 示例?

零样本提示词跨模型版本漂移,产生不一致形状。一个输入/输出示例锚定你想要的确切格式,是杠杆最高的块。没有它,同一提示词不同天可能产生不同结构。

结构化提示词该多长?

保持在约 2000 token 以内。上下文过载(粘贴 10 文件)会稀释对实际任务的注意力。仅含输出依赖的文件加一个示例。过长提示词成本更高且表现更差。

应该在 git 中版本化提示词吗?

应该。将可复用提示词存为文件(如 prompts/add-route.md)并提交。在 PR 中像代码一样审查提示词 diff,对同一任务 A/B 测试变体。聊天历史中的未版本化提示词会丢失,团队无法迭代。

如何阻止 AI 用 markdown 围栏包裹代码?

加显式输出格式块:'仅返回新文件内容,无 markdown 围栏,无解释。'没有它,模型默认用围栏包裹代码并加需手动剥离的散文。