📌 新手提示:本文结论基于 Anthropic 官方提示工程指南(https://platform.claude.com/docs/en/build-with-claude/prompt-engineering,海外站点国内需科学上网)。文末一键脚本会生成一个"前后对比"小工具,让你亲眼看到提示词的作用。

前言

很多人以为提示词(Prompt)就是"多说点好话、多发点脾气",这是误解。提示词不是玄学,它有一套官方方法论——就像写代码有规范和架构,写提示词也有原则。

一个残酷的事实:同一个模型、同一个问题,提示词写法和写法之间,回答质量可以差 10 倍。官方文档的原话是:把 Claude 想成一个"聪明但完全不熟悉你们公司的新员工"——你不说清楚,他就发挥不出。

本文带你看官方六大原则 + 一张可直接抄的三段式模板,再用一个真实案例感受差距。

一、官方六大黄金原则

原则 1:清晰直接(Be clear and direct)

说得越具体,得到的结果越好。想要"超出预期"的发挥(比如"做得全面一点"),要明确写出来,而不是指望模型自行领悟。

黄金准则(官方原文):把你的提示词拿给一位对任务几乎一无所知的同事,请 TA 照着做。如果 TA 会困惑,Claude 也会困惑。

对照(官方示例):

  • ❌ 差的:“Create an analytics dashboard”(做一个分析仪表盘)
  • ✅ 好的:“Create an analytics dashboard. Include as many relevant features and interactions as possible. Go beyond the basics to create a fully-featured implementation."(……把能用上的功能和交互都做上,别停留在基础版)

原则 2:补充上下文与动机(Add context)

解释"为什么"能让模型更精准。官方例子:

  • ❌ 差的:“NEVER use ellipses”(永远别用省略号)
  • ✅ 好的:“Your response will be read aloud by a text-to-speech engine, so never use ellipses since the text-to-speech engine will not know how to pronounce them."(你的回答会被语音引擎朗读,所以别用省略号——它不知道怎么发音)

一句话解释了动机,模型就懂了"这是硬规则,不是个人风格”。

原则 3:用例子说话(Use examples)

例子(few-shot,少样本学习)是最可靠的输出控制手段。给出 1-2 个好例子,输出的格式、语气、结构会立刻对齐。官方建议:

  • 数量 3-5 个效果最好
  • 例子要相关(贴近你的真实场景)并且多样(覆盖边界情况)
  • <example> 标签(多个用 <examples>)把例子包起来,让模型分得清"这是指令还是例句”

原则 4:用 XML 标签结构化(Structure with XML tags)

当提示词里混着"指令 + 背景 + 变量"时,用 XML 标签分块,模型解析零歧义:

<instructions>
按下面的规则执行任务。
</instructions>
<context>
这是用户上传的公司制度文档,只可引用,不可篡改。
</context>
<input>
用户的原始问题:________________
</input>

标签名自己起,但请保持一致。嵌套场景就叠着写(<documents> 里包 <document index="1">)。

原则 5:给模型立角色(Give Claude a role)

在 system 提示词(给 AI 立的"人设",优先级最高)里一句话就有效果。官方原文示例:

You are a helpful coding assistant specializing in Python.
(你是一名专精 Python 的编程助手)

角色不是装饰——它决定了语气、知识侧重和回答风格。做客服就写"耐心的中文客服",做老师就写"先讲原理再举例子的小学老师"。

原则 6:控制输出格式 + 复杂任务分步思考

  • 格式控制:明确输出为表格 / JSON / 要点列表,模型会严格照做
  • 分步思考:重要推理任务,让模型"先想清楚再回答"(如官方思考机制,或把任务拆成步骤写进提示词),准确率显著高于直接问答案

二、可复制的三段式模板

把上面六条收拢成一张模板(官方推荐的 Role / Context / Task 三段结构):

<role>
你是一名 {角色}。
</role>

<context>
{与任务相关的背景/限制/术语约定}
本任务要求:输出严格为 JSON 格式。
</context>

<task>
请完成:{任务描述}
要求:{明确约束,如"至少 3 条建议""按严重程度排序"}
<examples>
{2-3 个输入→输出示例}
</examples>
</task>

用模板的收益:可复用(换个内容换行改字)、可测试(改一句话就能对比效果)、可交接(团队共享同一套写法)。

三、实战对比:同一道题的两种写法

任务:给一句电商差评做 严重程度分级 + 处理建议

写法 A(普通人版)

帮我看看这条差评:"鼠标收到当天就双击了,客服说是我的问题,售后形同虚设。" 评价一下严重程度,怎么办?

写法 B(工程化版,套模板 + 角色 + 格式 + 示例)

<role>
你是一名资深电商客服质检主管,评语客观、处理建议可落地。
</role>

<context>
严重程度分三级:S1 产品质量缺陷(须升级处理)/ S2 服务流程投诉(须改进)/ S3 一般负面情绪(安抚即可)。
输出必须为 JSON。</context>

<task>
对下列差评:1) 定级(S1/S2/S3)2) 给出 20 字内结论 3) 给出 3 条按优先级排序的处理动作。
<examples>
{"差评": "快递三天没动,客服一直复制粘贴。", "级别": "S2", "结论": "物流与客服双重失职", "动作": ["联系物流催件并致歉", "升级客服质检", "排查同类投诉"]}
</examples>

<差评>鼠标收到当天就双击了,客服说是我的问题,售后形同虚设。</差评>
</task>

同样的模型(以 claude-sonnet-5 为例),写了 B 你能稳定拿到:

{"级别": "S1", "结论": "产品质量缺陷且售后失职", "动作": ["优先换新并道歉", "复盘质检流程", "跟进客服话术培训"]}

而写法 A 可能给出"这不太好,建议处理一下"这种没法用的回答。差的就是模板那几行

想亲手验证?文末一键脚本会生成 prompt_demo.py,用同一个模型把 A、B 两种提示词各跑一遍并排对比给你看。

四、四个常见误区

误区真相
提示词越长越好是"信息密度"不是"长度";无关废话稀释指令权重。清晰、结构化、短小精悍最好
告诉 AI"你是专家"就能变强角色有用,但能力上限是模型本身;角色 + 具体指令才生效
一次提示词通吃所有任务不同任务换角/换例/换格式;建议每类任务维护一套模板
不验证提示词工程是迭代活:改一句 → 测 5 个样本 → 看差异 → 再改。官方也强调要"定义成功标准并测试"

五、说句实在话:效果的底层是模型

技巧把模型的能力"榨"出来,但模型的绝对上限仍然由模型本身决定。想让提示词跑出最好效果,也要选最合适的模型——Claude 的 Opus / Sonnet / Haiku、GPT、DeepSeek、GLM 各有侧重。

国内调这些 API 最省心的方式还是中转站:一把 Key 全模型可调、OpenAI/Anthropic 双兼容。比如云间 API 中转站(https://cloudzone-api.cyou/)支持 Claude / GPT / DeepSeek / GLM / Kimi 等 90+ 模型,按 token 精确计费、香港节点国内直连——调试提示词时来回换模型对比效果,一个账号就够了。文末脚本配 Key 时默认用它,也会给你 Y/N 自己选择的自由。

尾声

提示词工程是 AI 时代最值得投资的通用技能:不挑平台(Claude/GPT/DeepSeek 通用)、不挑行业(客服/代码/写作/分析都要用)。今天掌握六原则 + 三段式模板,你就已经超过了大多数"随手就问"的用户。

下一层进阶(官方文档都有):system 提示词与多轮对话管理、工具调用提示、长上下文组织。先把模板用起来——下一次让 AI 做事前,花 30 秒套一下 Role/Context/Task,回报是立竿见影的。

脚本配置的默认模型 Key 来自云间 API(https://cloudzone-api.cyou/),输入 N 也可用自己的任意 Key——提示词好不好,跑出来对比最直观。


附:一键部署脚本

不方便下载的同学可以直接复制下方完整源码,新建文本文档粘贴后改后缀为 .sh(macOS/Linux/WSL)或 .ps1(Windows)运行。也可以下载现成文件:

macOS / Linux / WSL(.sh)

#!/usr/bin/env bash
set -u
# ============================================================
#  提示词工程实战 一键脚本(macOS / Linux / WSL)
#  公开源码,欢迎审查 —— 不放心可先复制给 AI 判断
#  默认配置:云间 API 中转站(https://cloudzone-api.cyou/)
#  生成:prompt_demo.py(两种提示词实测对比)
# ============================================================

GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; CYAN='\033[0;36m'; NC='\033[0m'
info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
step()  { echo -e "${CYAN}[STEP]${NC} $1"; }

CLOUDZONE_URL="https://cloudzone-api.cyou"
CLOUDZONE_API_BASE="https://cloudzone-api.cyou/v1"

detect_network() {
  step "检测网络环境(国内 / 国外)..."
  if curl -fsI --max-time 5 "https://claude.ai" >/dev/null 2>&1; then
    info "可直连 claude.ai,判定为海外网络"
    echo "overseas"
  else
    warn "无法直连 claude.ai,判定为国内网络环境(将自动切换国内镜像)"
    echo "domestic"
  fi
}

check_python() {
  step "检查 Python 3..."
  if command -v python3 >/dev/null 2>&1 && python3 --version >/dev/null 2>&1; then
    PY="python3"
    info "找到 python3:$(python3 --version 2>&1)"
    return 0
  fi
  error "未找到 python3。请先安装:https://www.python.org/downloads/ (Windows 建议使用 WSL 后执行本脚本)"
  return 1
}

setup_env() {
  local net="$1"
  step "创建虚拟环境并安装 anthropic SDK(约 1-2 分钟)..."
  mkdir -p prompt-demo && cd prompt-demo || return 1
  python3 -m venv .venv 2>/dev/null || { error "创建虚拟环境失败,手动执行:python3 -m venv .venv"; return 1; }
  # shellcheck disable=SC1091
  source .venv/bin/activate || { warn "激活虚拟环境失败,继续使用系统环境"; }

  step "安装 anthropic SDK..."
  local pypi="https://pypi.org/simple"
  if [ "$net" = "domestic" ]; then
    pypi="https://pypi.tuna.tsinghua.edu.cn/simple"
  fi

  if pip install anthropic -i "$pypi" --timeout 60 >/dev/null 2>&1; then
    info "SDK 安装成功"
    return 0
  fi
  warn "主源失败,回退备用镜像(阿里云 PyPI)..."
  if pip install anthropic -i "https://mirrors.aliyun.com/pypi/simple" --timeout 60 >/dev/null 2>&1; then
    info "备用镜像安装成功"
    return 0
  fi
  error "SDK 安装失败。请手动执行:pip install anthropic -i https://pypi.tuna.tsinghua.edu.cn/simple"
  return 1
}

configure_api() {
  step "配置 API Key..."
  echo ""
  echo "对比实验需要调用大模型 API。默认配置云间 API 中转站:"
  echo "  · 一把 Key 调 Claude / GPT / DeepSeek / GLM 等 90+ 模型,方便对比"
  echo "  · 国内直连免翻墙,按 token 精确计费,Claude 系列约官方 0.4~0.6 倍起"
  echo ""
  echo "是否现在跳转注册并获取 API Key?"
  echo "  Y - 立即跳转至 ${CLOUDZONE_URL}"
  echo "  N - 我已有 Key(官方或第三方),自行输入"
  read -r -p "请选择 [Y/N]: " choice

  local API_KEY=""
  local BASE_URL="$CLOUDZONE_API_BASE"
  if [ "${choice:-N}" = "Y" ] || [ "${choice:-N}" = "y" ]; then
    info "正在打开浏览器..."
    if command -v xdg-open >/dev/null 2>&1; then
      xdg-open "$CLOUDZONE_URL" >/dev/null 2>&1
    elif command -v open >/dev/null 2>&1; then
      open "$CLOUDZONE_URL" >/dev/null 2>&1
    else
      warn "无法自动打开浏览器,请手动访问:$CLOUDZONE_URL"
    fi
    echo "注册后在控制台复制 Key(以 sk- 开头)。"
    read -r -p "粘贴你的 API Key: " API_KEY
    read -r -p "中转地址(直接回车用默认 ${CLOUDZONE_API_BASE}): " input_base
    [ -n "${input_base:-}" ] && BASE_URL="$input_base"
  else
    read -r -s -p "请输入你的 API Key (sk-...): " API_KEY
    echo
    echo "若使用 Anthropic 官方 Key:地址留空即可(默认 api.anthropic.com)。"
    read -r -p "API 地址(直接回车用默认 ${CLOUDZONE_API_BASE}): " input_base
    [ -n "${input_base:-}" ] && BASE_URL="$input_base"
  fi

  if [ -z "${API_KEY:-}" ]; then
    error "未输入 API Key,跳过配置。可稍后手动设置环境变量后重跑。"
    return 1
  fi

  local SHELL_RC=""
  case "$SHELL" in
    */zsh)  SHELL_RC="$HOME/.zshrc" ;;
    */bash) SHELL_RC="$HOME/.bashrc" ;;
    *)      SHELL_RC="$HOME/.profile" ;;
  esac

  info "写入环境变量到 $SHELL_RC(仅 ANTHROPIC_API_KEY 与 ANTHROPIC_BASE_URL 两个变量,原值备份 .bak)"
  if [ -f "$SHELL_RC" ]; then
    sed -i.bak '/ANTHROPIC_API_KEY/d; /ANTHROPIC_BASE_URL/d' "$SHELL_RC"
  fi
  {
    echo ""
    echo "# Prompt 对比实验 - 由一键脚本写入"
    echo "export ANTHROPIC_API_KEY=\"$API_KEY\""
    echo "export ANTHROPIC_BASE_URL=\"$BASE_URL\""
  } >> "$SHELL_RC"

  export ANTHROPIC_API_KEY="$API_KEY"
  export ANTHROPIC_BASE_URL="$BASE_URL"

  info "配置完成!"
  echo "  API Key : ${API_KEY:0:10}********"
  echo "  Base URL: $BASE_URL"
  echo ""
  warn "新开终端窗口后永久生效,或立即执行:source $SHELL_RC"
}

write_demo() {
  step "生成对比实验脚本 prompt_demo.py ..."
  cat > prompt_demo.py <<'PYEOF'
import os
import anthropic

client = anthropic.Anthropic()

review = "鼠标收到当天就双击了,客服说是我的问题,售后形同虚设。"

prompt_a = f"帮我看看这条差评:\"{review}\" 评价一下严重程度,怎么办?"

prompt_b = f"""<role>
你是一名资深电商客服质检主管,评语客观、处理建议可落地。
</role>
<context>
严重程度分三级:S1 产品质量缺陷(须升级处理)/ S2 服务流程投诉(须改进)/ S3 一般负面情绪(安抚即可)。
输出必须为 JSON。
</context>
<task>
对下列差评:1) 定级(S1/S2/S3)2) 给出 20 字内结论 3) 给出 3 条按优先级排序的处理动作。
<examples>
{{"差评": "快递三天没动,客服一直复制粘贴。", "级别": "S2", "结论": "物流与客服双重失职", "动作": ["联系物流催件并致歉", "升级客服质检", "排查同类投诉"]}}
</examples>

<差评>{review}</差评>
</task>"""

def ask(prompt):
    msg = client.messages.create(
        model="claude-sonnet-5",
        max_tokens=600,
        messages=[{"role": "user", "content": prompt}],
    )
    return "".join(b.text for b in msg.content if b.type == "text")

print("=" * 56)
print("写法 A:普通人版")
print("=" * 56)
print(ask(prompt_a))

print()
print("=" * 56)
print("写法 B:工程化版(角色 + XML + 格式 + 示例)")
print("=" * 56)
print(ask(prompt_b))
PYEOF
  info "已生成 prompt-demo/prompt_demo.py"
}

main() {
  echo "============================================"
  echo "  提示词工程实战 一键脚本"
  echo "  适用于 macOS / Linux / WSL"
  echo "  默认接入:云间 API 中转站"
  echo "============================================"
  echo ""

  local NET
  NET=$(detect_network)

  if ! check_python; then
    error "缺少 Python 3,脚本终止。请先安装 Python 后重跑。"
    exit 1
  fi

  if ! setup_env "$NET"; then
    error "环境准备失败,脚本终止。请按上方提示手动处理。"
    exit 1
  fi

  configure_api || warn "Key 未配置,Demo 仍会生成,运行时需要先 export ANTHROPIC_API_KEY"

  write_demo

  echo ""
  echo "============================================"
  info "全部完成!运行对比实验:"
  echo "    cd prompt-demo && source .venv/bin/activate && python prompt_demo.py"
  echo "(同一模型跑 A/B 两种提示词,直观感受模板的力量)"
  echo "============================================"
}

main "$@"

Windows(.ps1)

Windows 运行 .ps1 若提示执行策略限制:打开 PowerShell 输入 Set-ExecutionPolicy -Scope Process Bypass 后回车,再运行脚本。-Scope Process 仅对当前窗口生效,关掉即恢复,不会改动系统全局策略(系统默认限制来自安全设计,不要为了省事永久 Bypass)。

# ============================================================
#  提示词工程实战 一键脚本(Windows PowerShell)
#  公开源码,欢迎审查 -- 不放心可先复制给 AI 判断
#  默认配置:云间 API 中转站(https://cloudzone-api.cyou/)
#  生成:prompt_demo.py(两种提示词实测对比)
# ============================================================
$ErrorActionPreference = "Stop"

function Write-Info  { Write-Host "[INFO] $args" -ForegroundColor Green }
function Write-Warn  { Write-Host "[WARN] $args" -ForegroundColor Yellow }
function Write-Err   { Write-Host "[ERROR] $args" -ForegroundColor Red }
function Write-Step  { Write-Host "[STEP] $args" -ForegroundColor Cyan }

$CLOUDZONE_URL = "https://cloudzone-api.cyou"
$CLOUDZONE_API_BASE = "https://cloudzone-api.cyou/v1"

function Detect-Network {
    Write-Step "检测网络环境(国内 / 国外)..."
    try {
        $null = Invoke-WebRequest -Uri "https://claude.ai" -Method Head -TimeoutSec 5 -UseBasicParsing
        Write-Info "可直连 claude.ai,判定为海外网络"
        return "overseas"
    } catch {
        Write-Warn "无法直连 claude.ai,判定为国内网络环境(将自动切换国内镜像)"
        return "domestic"
    }
}

function Find-Python {
    Write-Step "检查 Python 3..."
    $python = $null
    foreach ($candidate in @("python", "py")) {
        try {
            $out = & $candidate --version 2>&1
            if ($LASTEXITCODE -eq 0) { $python = $candidate; break }
        } catch { }
    }
    if ($null -eq $python) {
        Write-Err "未找到 Python。请先安装:https://www.python.org/downloads/ (安装时勾选 Add Python to PATH)"
        return $null
    }
    Write-Info "找到 Python:$(& $python --version 2>&1)"
    return $python
}

function Setup-Env {
    param([string]$Net)
    Write-Step "创建虚拟环境并安装 anthropic SDK(约 1-2 分钟)..."
    New-Item -ItemType Directory -Force -Path "prompt-demo" | Out-Null
    Set-Location "prompt-demo"

    & $script:PY -m venv .venv
    if ($LASTEXITCODE -ne 0) {
        Write-Err "创建虚拟环境失败,手动执行:$script:PY -m venv .venv"
        return $false
    }
    $script:PY = Join-Path (Get-Location) ".venv\Scripts\python.exe"

    Write-Step "安装 anthropic SDK..."
    $pypi = if ($Net -eq "domestic") { "https://pypi.tuna.tsinghua.edu.cn/simple" } else { "https://pypi.org/simple" }

    & $script:PY -m pip install anthropic -i $pypi --timeout 60 2>$null
    if ($LASTEXITCODE -eq 0) {
        Write-Info "SDK 安装成功"
        return $true
    }
    Write-Warn "主源失败,回退备用镜像(阿里云 PyPI)..."
    & $script:PY -m pip install anthropic -i "https://mirrors.aliyun.com/pypi/simple" --timeout 60 2>$null
    if ($LASTEXITCODE -eq 0) {
        Write-Info "备用镜像安装成功"
        return $true
    }
    Write-Err "SDK 安装失败。请手动执行:$script:PY -m pip install anthropic -i https://pypi.tuna.tsinghua.edu.cn/simple"
    return $false
}

function Configure-Api {
    Write-Step "配置 API Key..."
    Write-Host ""
    Write-Host "对比实验需要调用大模型 API。默认配置云间 API 中转站:"
    Write-Host "  · 一把 Key 调 Claude / GPT / DeepSeek / GLM 等 90+ 模型,方便对比"
    Write-Host "  · 国内直连免翻墙,按 token 精确计费,Claude 系列约官方 0.4~0.6 倍起"
    Write-Host ""
    Write-Host "是否现在跳转注册并获取 API Key?"
    Write-Host "  Y - 立即跳转至 $CLOUDZONE_URL"
    Write-Host "  N - 我已有 Key(官方或第三方),自行输入"
    $choice = Read-Host "请选择 [Y/N]"

    $apiKey = ""
    $baseUrl = $CLOUDZONE_API_BASE
    if ($choice -eq "Y" -or $choice -eq "y") {
        Write-Info "正在打开浏览器..."
        try {
            Start-Process "$CLOUDZONE_URL"
        } catch {
            Write-Warn "无法自动打开浏览器,请手动访问:$CLOUDZONE_URL"
        }
        Write-Host "注册后在控制台复制 Key(以 sk- 开头)。"
    } else {
        Write-Host "若使用 Anthropic 官方 Key:地址留空即可(默认 api.anthropic.com)。"
    }

    $sec = Read-Host "粘贴你的 API Key(输入时不显示字符)" -AsSecureString
    $bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec)
    $apiKey = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
    [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)

    if ([string]::IsNullOrWhiteSpace($apiKey)) {
        Write-Err "未输入 API Key,跳过配置。可稍后手动设置环境变量后重跑。"
        return $false
    }

    $inputBase = Read-Host "API 地址(直接回车用默认 ${baseUrl})"
    if (-not [string]::IsNullOrWhiteSpace($inputBase)) { $baseUrl = $inputBase }

    # 写入用户级环境变量(永久),并导出到当前会话。原因:Demo 代码从环境变量自动读取 Key。
    [Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", $apiKey, "User")
    [Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", $baseUrl, "User")
    $env:ANTHROPIC_API_KEY = $apiKey
    $env:ANTHROPIC_BASE_URL = $baseUrl

    Write-Info "配置完成!"
    Write-Host "  API Key : $($apiKey.Substring(0, [Math]::Min(10, $apiKey.Length)))********"
    Write-Host "  Base URL: $baseUrl"
    Write-Host ""
    Write-Warn "新开终端窗口后永久生效(当前会话已立即生效)"
    return $true
}

function Write-Demo {
    Write-Step "生成对比实验脚本 prompt_demo.py ..."
    @'
import os
import anthropic

client = anthropic.Anthropic()

review = "鼠标收到当天就双击了,客服说是我的问题,售后形同虚设。"

prompt_a = f"帮我看看这条差评:\"{review}\" 评价一下严重程度,怎么办?"

prompt_b = f"""<role>
你是一名资深电商客服质检主管,评语客观、处理建议可落地。
</role>
<context>
严重程度分三级:S1 产品质量缺陷(须升级处理)/ S2 服务流程投诉(须改进)/ S3 一般负面情绪(安抚即可)。
输出必须为 JSON。
</context>
<task>
对下列差评:1) 定级(S1/S2/S3)2) 给出 20 字内结论 3) 给出 3 条按优先级排序的处理动作。
<examples>
{{"差评": "快递三天没动,客服一直复制粘贴。", "级别": "S2", "结论": "物流与客服双重失职", "动作": ["联系物流催件并致歉", "升级客服质检", "排查同类投诉"]}}
</examples>

<差评>{review}</差评>
</task>"""

def ask(prompt):
    msg = client.messages.create(
        model="claude-sonnet-5",
        max_tokens=600,
        messages=[{"role": "user", "content": prompt}],
    )
    return "".join(b.text for b in msg.content if b.type == "text")

print("=" * 56)
print("写法 A:普通人版")
print("=" * 56)
print(ask(prompt_a))

print()
print("=" * 56)
print("写法 B:工程化版(角色 + XML + 格式 + 示例)")
print("=" * 56)
print(ask(prompt_b))
'@ | Set-Content -Path "prompt_demo.py" -Encoding UTF8
    Write-Info "已生成 prompt-demo/prompt_demo.py"
}

Write-Host "============================================"
Write-Host "  提示词工程实战 一键脚本"
Write-Host "  适用于 Windows(PowerShell)"
Write-Host "  默认接入:云间 API 中转站"
Write-Host "============================================"
Write-Host ""

$net = Detect-Network

$script:PY = Find-Python
if ($null -eq $script:PY) {
    Write-Err "缺少 Python,脚本终止。请先安装 Python 后重跑。"
    exit 1
}

if (-not (Setup-Env -Net $net)) {
    Write-Err "环境准备失败,脚本终止。请按上方提示手动处理。"
    exit 1
}

if (-not (Configure-Api)) {
    Write-Warn "Key 未配置,Demo 仍会生成,运行时需要先设置 ANTHROPIC_API_KEY"
}

Write-Demo

Write-Host ""
Write-Host "============================================"
Write-Info "全部完成!运行对比实验:"
Write-Host "    cd prompt-demo; .\.venv\Scripts\python prompt_demo.py"
Write-Host "(同一模型跑 A/B 两种提示词,直观感受模板的力量)"
Write-Host "============================================"