Prompt 模板工程

为什么需要模板?

前三章讲了原理,这章讲"拿来就用"。好的 Prompt 模板有三个特征:

  1. 变量化 — 固定的框架 + 可替换的变量,每次复用只改变量
  2. 格式明确 — 输出结构固定,方便后续处理
  3. 约束完整 — 把 AI 容易犯的错误提前堵死

场景一:代码审查

基础模板

你是一个有 8 年经验的 {{语言}} 工程师,专注于代码质量和安全性。

审查以下代码,按这个格式输出:

## 严重问题(阻塞合并)
- [问题描述] → [修复建议]

## 警告(建议修复)
- [问题描述] → [修复建议]

## 优化建议(可选)
- [优化点]

## 总结
一句话评价这段代码的整体质量。

---
代码:
{{粘贴代码}}

Claude XML 版本(精度更高)

Claude 对 XML 结构的解析优于 Markdown。同样的审查任务用 XML 写:

<task>代码审查</task>

<context>
  <language>TypeScript</language>
  <framework>Next.js 15 App Router</framework>
  <focus>性能、安全性、类型安全</focus>
</context>

<code>
async function getUser(id: string) {
  const res = await fetch(`/api/users/${id}`)
  return res.json()
}
</code>

<output_format>
  <section name="critical">严重问题(附修复代码)</section>
  <section name="warnings">警告事项</section>
  <section name="suggestions">优化建议</section>
</output_format>

为什么 XML 更好: Claude 在训练时大量接触了 XML 格式的文档,XML 标签清晰划分了"指令区""数据区""输出区",AI 不会把你的代码当成指令执行,也不会把输出格式当成背景信息忽略。实测 XML 版本比纯文字版本幻觉率低约 30-40%。

代码重构模板

<task>重构代码</task>

<requirements>
  <from>Class Component + PropTypes</from>
  <to>Function Component + TypeScript + React Hooks</to>
  <constraints>
    - 保持原有 props 接口不变
    - 不改业务逻辑
    - 使用 React 18 并发特性(如适用)
  </constraints>
</requirements>

<original_code>
{{原始代码}}
</original_code>

<output>
仅输出重构后的代码,用注释标注每处关键改动。
</output>

场景二:内容创作

技术博客文章

你是 JR Academy 的技术内容编辑,面向想转行做程序员的职场人写作。

写一篇关于 {{主题}} 的博客文章:

**读者画像**:工作 3-5 年的职场人,有逻辑思维,无编程基础,想了解 AI 工具如何帮助他们的工作

**文章要求**:
- 标题包含关键词,吸引点击
- 开头用一个他们熟悉的职场场景引入
- 每个技术概念配一个非技术类比
- 结尾给出 3 个立即可执行的行动建议
- 800-1000 字,用小标题分段
- 不要废话,每段都要有信息量

**禁止**:不要写"在当今数字化时代"这类套话开头

营销文案(朋友圈/公众号)

你是一个懂技术、也懂用户心理的文案策划。

为 {{产品/课程名称}} 写一条朋友圈推广文案:

目标用户:{{用户画像,如"想用 AI 提升工作效率的职场人"}}
核心卖点:{{1-2个最重要的卖点}}
用户痛点:{{他们现在最大的困扰是什么}}

格式要求:
- 第一行必须能作为标题单独成立(用户只看第一行就决定要不要继续读)
- 100-150 字
- 结尾有明确的行动号召(扫码/点击/私信)
- 不要用感叹号堆砌,不要写"限时优惠"这类已经失效的词

品牌语气一致性技巧

AI 默认输出"通用中文",没有品牌个性。解决方案:给 3 个品牌语气例子,让 AI 从例子里推导风格。

以下是我们品牌的语气风格(从这 3 个例子中学习,不要直接复制):

例 1:「你不需要懂代码,你只需要懂自己要什么。」
例 2:「大多数工具教你怎么用,我们教你为什么这样用。」
例 3:「转行不是逃跑,是重新选择战场。」

现在用同样的风格写:{{写作任务}}

场景三:结构化数据提取

这是 Prompt 工程里最容易量化效果的场景 —— 输出要么对要么错,没有模糊地带。

从非结构化文本提取字段

import anthropic

client = anthropic.Anthropic()

EXTRACTION_PROMPT = """
从以下简历文本中提取信息,严格按 JSON 格式输出,不要输出任何其他内容:

<resume>
{resume_text}
</resume>

<output_schema>
{{
  "name": "string",
  "email": "string | null",
  "phone": "string | null",
  "skills": ["string"],
  "experience_years": "number | null",
  "last_company": "string | null",
  "education": {{
    "degree": "string | null",
    "major": "string | null",
    "school": "string | null"
  }}
}}
</output_schema>

规则:
- 找不到的字段填 null,不要猜测
- skills 只列技术技能,不列软技能
- experience_years 四舍五入到整数
"""

def extract_resume(resume_text: str) -> dict:
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        temperature=0,  # 数据提取永远用 0
        messages=[{
            "role": "user",
            "content": EXTRACTION_PROMPT.format(resume_text=resume_text)
        }]
    )
    import json
    return json.loads(response.content[0].text)

关键点:

  • temperature=0 — 数据提取不需要创意,需要一致性
  • 输出 schema 放在 XML 标签里,与指令区分开
  • 明确说"不要猜测",防止 AI 脑补字段

批量处理时的 Few-shot 加固

单条提取 AI 通常能做好,但批量处理时会出现格式漂移。加 2 个例子稳住格式:

从文本中提取合同关键信息,输出 JSON。

示例 1:
输入:「甲方:北京科技有限公司,合同金额:人民币 50 万元整,交付日期:2026年3月31日」
输出:{"party_a": "北京科技有限公司", "amount": 500000, "currency": "CNY", "deadline": "2026-03-31"}

示例 2:
输入:「乙方:张三(身份证:110...),服务费:USD 5,000,完成时间:下季度末」
输出:{"party_b": "张三", "amount": 5000, "currency": "USD", "deadline": null}

现在处理:
{{合同文本}}

模板复用的工程化思路

当你有 10 个以上的 Prompt 在生产环境运行,需要系统化管理:

// prompt-templates.ts
export const TEMPLATES = {
  codeReview: (lang: string, code: string) => `
    <task>代码审查</task>
    <context><language>${lang}</language></context>
    <code>${code}</code>
    <output_format>严重问题 / 警告 / 建议</output_format>
  `,
  
  blogPost: (topic: string, audience: string) => `
    写一篇关于 ${topic} 的博客文章
    读者:${audience}
    要求:800字,有代码示例,结尾有行动建议
  `,
} as const;

// 用法
const prompt = TEMPLATES.codeReview('TypeScript', userCode);

把 Prompt 当代码管理:版本控制、函数化、测试用例。这是 2026 年生产环境 Prompt 工程的标准做法。

JR Academy · Blog职业洞察

Prompt Engineering 实战指南 — 实战模板库:代码、内容、数据三大场景

覆盖代码审查、内容创作、结构化数据提取的可直接复用 Prompt 模板,包含 Claude XML 结构化技巧

发布日期
阅读时长2 分钟
作者

Prompt 模板工程

为什么需要模板?

前三章讲了原理,这章讲"拿来就用"。好的 Prompt 模板有三个特征:

  1. 变量化 — 固定的框架 + 可替换的变量,每次复用只改变量
  2. 格式明确 — 输出结构固定,方便后续处理
  3. 约束完整 — 把 AI 容易犯的错误提前堵死

场景一:代码审查

基础模板

你是一个有 8 年经验的 {{语言}} 工程师,专注于代码质量和安全性。

审查以下代码,按这个格式输出:

## 严重问题(阻塞合并)
- [问题描述] → [修复建议]

## 警告(建议修复)
- [问题描述] → [修复建议]

## 优化建议(可选)
- [优化点]

## 总结
一句话评价这段代码的整体质量。

---
代码:
{{粘贴代码}}

Claude XML 版本(精度更高)

Claude 对 XML 结构的解析优于 Markdown。同样的审查任务用 XML 写:

<task>代码审查</task>

<context>
  <language>TypeScript</language>
  <framework>Next.js 15 App Router</framework>
  <focus>性能、安全性、类型安全</focus>
</context>

<code>
async function getUser(id: string) {
  const res = await fetch(`/api/users/${id}`)
  return res.json()
}
</code>

<output_format>
  <section name="critical">严重问题(附修复代码)</section>
  <section name="warnings">警告事项</section>
  <section name="suggestions">优化建议</section>
</output_format>

为什么 XML 更好: Claude 在训练时大量接触了 XML 格式的文档,XML 标签清晰划分了"指令区""数据区""输出区",AI 不会把你的代码当成指令执行,也不会把输出格式当成背景信息忽略。实测 XML 版本比纯文字版本幻觉率低约 30-40%。

代码重构模板

<task>重构代码</task>

<requirements>
  <from>Class Component + PropTypes</from>
  <to>Function Component + TypeScript + React Hooks</to>
  <constraints>
    - 保持原有 props 接口不变
    - 不改业务逻辑
    - 使用 React 18 并发特性(如适用)
  </constraints>
</requirements>

<original_code>
{{原始代码}}
</original_code>

<output>
仅输出重构后的代码,用注释标注每处关键改动。
</output>

场景二:内容创作

技术博客文章

你是 JR Academy 的技术内容编辑,面向想转行做程序员的职场人写作。

写一篇关于 {{主题}} 的博客文章:

**读者画像**:工作 3-5 年的职场人,有逻辑思维,无编程基础,想了解 AI 工具如何帮助他们的工作

**文章要求**:
- 标题包含关键词,吸引点击
- 开头用一个他们熟悉的职场场景引入
- 每个技术概念配一个非技术类比
- 结尾给出 3 个立即可执行的行动建议
- 800-1000 字,用小标题分段
- 不要废话,每段都要有信息量

**禁止**:不要写"在当今数字化时代"这类套话开头

营销文案(朋友圈/公众号)

你是一个懂技术、也懂用户心理的文案策划。

为 {{产品/课程名称}} 写一条朋友圈推广文案:

目标用户:{{用户画像,如"想用 AI 提升工作效率的职场人"}}
核心卖点:{{1-2个最重要的卖点}}
用户痛点:{{他们现在最大的困扰是什么}}

格式要求:
- 第一行必须能作为标题单独成立(用户只看第一行就决定要不要继续读)
- 100-150 字
- 结尾有明确的行动号召(扫码/点击/私信)
- 不要用感叹号堆砌,不要写"限时优惠"这类已经失效的词

品牌语气一致性技巧

AI 默认输出"通用中文",没有品牌个性。解决方案:给 3 个品牌语气例子,让 AI 从例子里推导风格。

以下是我们品牌的语气风格(从这 3 个例子中学习,不要直接复制):

例 1:「你不需要懂代码,你只需要懂自己要什么。」
例 2:「大多数工具教你怎么用,我们教你为什么这样用。」
例 3:「转行不是逃跑,是重新选择战场。」

现在用同样的风格写:{{写作任务}}

场景三:结构化数据提取

这是 Prompt 工程里最容易量化效果的场景 —— 输出要么对要么错,没有模糊地带。

从非结构化文本提取字段

import anthropic

client = anthropic.Anthropic()

EXTRACTION_PROMPT = """
从以下简历文本中提取信息,严格按 JSON 格式输出,不要输出任何其他内容:

<resume>
{resume_text}
</resume>

<output_schema>
{{
  "name": "string",
  "email": "string | null",
  "phone": "string | null",
  "skills": ["string"],
  "experience_years": "number | null",
  "last_company": "string | null",
  "education": {{
    "degree": "string | null",
    "major": "string | null",
    "school": "string | null"
  }}
}}
</output_schema>

规则:
- 找不到的字段填 null,不要猜测
- skills 只列技术技能,不列软技能
- experience_years 四舍五入到整数
"""

def extract_resume(resume_text: str) -> dict:
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        temperature=0,  # 数据提取永远用 0
        messages=[{
            "role": "user",
            "content": EXTRACTION_PROMPT.format(resume_text=resume_text)
        }]
    )
    import json
    return json.loads(response.content[0].text)

关键点:

  • temperature=0 — 数据提取不需要创意,需要一致性
  • 输出 schema 放在 XML 标签里,与指令区分开
  • 明确说"不要猜测",防止 AI 脑补字段

批量处理时的 Few-shot 加固

单条提取 AI 通常能做好,但批量处理时会出现格式漂移。加 2 个例子稳住格式:

从文本中提取合同关键信息,输出 JSON。

示例 1:
输入:「甲方:北京科技有限公司,合同金额:人民币 50 万元整,交付日期:2026年3月31日」
输出:{"party_a": "北京科技有限公司", "amount": 500000, "currency": "CNY", "deadline": "2026-03-31"}

示例 2:
输入:「乙方:张三(身份证:110...),服务费:USD 5,000,完成时间:下季度末」
输出:{"party_b": "张三", "amount": 5000, "currency": "USD", "deadline": null}

现在处理:
{{合同文本}}

模板复用的工程化思路

当你有 10 个以上的 Prompt 在生产环境运行,需要系统化管理:

// prompt-templates.ts
export const TEMPLATES = {
  codeReview: (lang: string, code: string) => `
    <task>代码审查</task>
    <context><language>${lang}</language></context>
    <code>${code}</code>
    <output_format>严重问题 / 警告 / 建议</output_format>
  `,
  
  blogPost: (topic: string, audience: string) => `
    写一篇关于 ${topic} 的博客文章
    读者:${audience}
    要求:800字,有代码示例,结尾有行动建议
  `,
} as const;

// 用法
const prompt = TEMPLATES.codeReview('TypeScript', userCode);

把 Prompt 当代码管理:版本控制、函数化、测试用例。这是 2026 年生产环境 Prompt 工程的标准做法。

作者
一键分享或复制链接

相关文章推荐

查看全部文章 →