Claude Prompt 六大进阶技巧全实战:Effort 控制 / Few-Shot / CoT / Cache / 双层护栏

9 阅读8分钟

六大进阶技巧:Effort 控制 / Few-Shot / CoT / Prompt Cache / 双层护栏全实战

本文是「Claude 企业级工程实战手册」专栏第 04 篇。六个高价值技巧,每个都附生产可用代码。


技巧一:Effort 级别控制(最高杠杆)

effort 参数是控制模型算力分配的核心变量,也是最容易被忽视的优化点。

四个级别

Effort 级别适用场景成本/延迟
low日志分类、简单提取、格式清洗最低
medium常规代码审查、标准文档生成中等
high(默认)功能开发、局部重构、常规 Debug标准
xhigh多模块集成重构、底层技术栈迁移
max高敏漏洞防御、核心密码学重写最高

核心原则

如果你在复杂任务上看到浅层推理,先提高 Effort 级别,再考虑修改 Prompt。这几乎总是正确的修复顺序。

代码实现

import anthropic

client = anthropic.Anthropic()

def call_with_effort(prompt: str, effort: str = "high") -> str:
    """
    effort: low / medium / high / xhigh / max
    """
    response = client.messages.create(
        model="claude-opus-4-8",
        max_tokens=64000,          # xhigh/max 时必须给足空间
        thinking={"type": "adaptive"},  # 显式激活自适应推理
        output_config={"effort": effort},
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text

# 按任务类型选择 effort
tasks = [
    ("判断这条日志是否为错误:ERROR: connection timeout", "low"),
    ("审查这个 PR 的代码质量", "high"),
    ("设计整个支付系统的密钥轮换方案", "max"),
]

for prompt, effort in tasks:
    result = call_with_effort(prompt, effort)
    print(f"[{effort}] {result[:100]}...")

企业 Effort 分配策略

EFFORT_ROUTING = {
    # 任务关键词 → effort 级别
    "分类|提取|判断|标签|总结": "low",
    "审查|生成|文档|测试": "high",
    "架构|安全|迁移|重构|密码": "xhigh",
    "漏洞|灾难|核心|生产事故": "max",
}

import re

def auto_effort(prompt: str) -> str:
    for pattern, effort in EFFORT_ROUTING.items():
        if re.search(pattern, prompt):
            return effort
    return "high"  # 默认

技巧二:XML 结构化标签

Claude 被专门训练为将 XML 标签识别为结构标记。多组件 Prompt 使用 XML 标签,可以防止模型将输入代码中的异常注释误判为系统指令。

标准模板

<context>
  项目描述:核心结算系统的账单数据汇总服务
  技术栈:FastAPI, SQLAlchemy 2.0, PostgreSQL 15
</context>

<task>
  为下面的 Python 实体类生成完整的 SQLAlchemy ORM 定义
</task>

<input>
  [动态输入:用户提交的代码]
</input>

<constraints>
  - 所有表必须包含 created_at 和 updated_at 时间字段
  - 外键必须显式声明 ondelete 级联行为
  - 输出语言:中文注释,英文代码标识符
</constraints>

<output_format>
  返回规范的 Python 代码块,末尾附加前提假设列表
</output_format>

团队规范

统一 XML 标签命名规范,所有人用同一套体系:

# 团队标准标签集
STANDARD_TAGS = {
    "context":       "静态背景信息(适合缓存)",
    "task":          "本次具体任务目标",
    "input":         "动态用户输入",
    "constraints":   "本次约束规则",
    "output_format": "期望输出格式",
    "examples":      "Few-Shot 示例",
    "guardrails":    "安全护栏规则",
}

技巧三:Few-Shot 示例注入

Few-Shot 是保障输出质量稳定、避免格式漂移的最强稳定器。用你们公司的内部标准作为示例,让 Claude 对齐内部规范而非默认规范。

<examples>
  <example>
    <input>审查这段 Python 接口实现的安全性</input>
    <output>
## 安全审查报告

**风险等级**:高风险(Critical)

**发现的安全问题**:
1. SQL 注入隐患(第 14 行):直接对用户入参进行 f-string 拼接,未采用参数化绑定
2. 敏感信息泄露(第 22 行):捕获 Exception 时,直接将数据库 traceback 写入日志

**修复建议**:
\`\`\`python
# 推荐参数化查询修复
stmt = select(UserModel).where(UserModel.id == user_id)
result = await session.execute(stmt)
\`\`\`

**审查置信度**:95%(基于 OWASP API Security Top 10)
    </output>
  </example>
</examples>

现在用完全一致的评估格式,审查以下代码:
[用户提交的代码]

Few-Shot 最佳实践

# 维护公司内部的高质量示例库
EXAMPLE_LIBRARY = {
    "security_review": [
        {"input": "...", "output": "..."},  # 正例
        {"input": "...", "output": "..."},  # 正例
    ],
    "bad_outputs": [
        {"input": "...", "bad_output": "...", "reason": "格式不符合规范"},
    ]
}

def build_few_shot_prompt(task_type: str, user_input: str) -> str:
    examples = EXAMPLE_LIBRARY.get(task_type, [])
    example_xml = "".join([
        f"<example><input>{e['input']}</input><output>{e['output']}</output></example>"
        for e in examples[:3]  # 最多 3 个示例
    ])
    return f"<examples>{example_xml}</examples>\n\n{user_input}"

技巧四:可见推理链(Chain-of-Thought for Enterprise)

强制可见推理链,防止 Claude 对最可能的答案进行模式匹配然后事后填充理由。

<task>
  评估我们是否应该将订单核心数据库从 PostgreSQL 迁移到 MongoDB
</task>

<instructions>
  在给出任何结论前,必须在 <analysis> 标签内进行严密推导:

  1. 我们当前的写多读少、强事务模型是否能容忍文档数据库的最终一致性?
  2. 底层数据迁移(含历史脏数据清洗)的时间、人力成本和物理风险?
  3. 迁移后对现有分布式缓存方案及 CDC 数据流水线的重构冲击?
  4. 团队当前对 NoSQL 运维和索引优化的技术栈储备匹配度?

  完成论证后,在 <recommendation> 标签内给出:
  - 明确的方向性决策(迁移 / 放弃 / 局部迁移)
  - 支撑该决策的三个核心底线技术假设
  - 评级最高的前两个架构风险及缓解预案
</instructions>

企业价值:推理过程可以被审计,决策有据可查,便于团队复盘。


技巧五:Prompt Caching 成本优化

基本原理

缓存命中时,费用仅为常规输入 token 的 10%。静态内容(System Prompt、大型参考文档)适合缓存,动态内容(用户查询)不缓存。

2026 年关键变化:TTL 缩短为 5 分钟

Anthropic 在 2026 年初将 Prompt Cache TTL 从 60 分钟缩短至 5 分钟。对低频、长周期任务影响巨大:

  • 每次缓存击穿 → 触发 1.25x 计费的缓存写入
  • 会话间隔超过 5 分钟 → 下次请求重新全量写入

应对策略

import anthropic
import time

client = anthropic.Anthropic()

STATIC_SYSTEM = "你的企业角色定义 + 上下文 + 约束..."  # 静态内容,适合缓存
LAST_CACHE_TIME = 0

def smart_cached_call(user_query: str, large_doc: str) -> str:
    global LAST_CACHE_TIME
    now = time.time()

    # 判断是否还在 5 分钟缓存窗口内
    use_cache = (now - LAST_CACHE_TIME) < 270  # 4.5 分钟,留缓冲

    system_content = [{"type": "text", "text": STATIC_SYSTEM}]
    if use_cache:
        system_content[0]["cache_control"] = {"type": "ephemeral"}

    response = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=4096,
        system=system_content,
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": large_doc,
                        "cache_control": {"type": "ephemeral"} if use_cache else None
                    },
                    {"type": "text", "text": user_query}
                ]
            }
        ]
    )

    if use_cache:
        LAST_CACHE_TIME = now

    return response.content[0].text

# Cache + Batch 叠加:最高节省 95%
# 详见第 11 篇 Claude API 高级用法

缓存前缀一致性规约

# ❌ 绝对禁止:动态时间戳在头部
WRONG_SYSTEM = f"Today is {datetime.now()}. 你是..."

# ✅ 正确:时间戳放在用户消息里
CORRECT_SYSTEM = "你是...(静态角色定义)"
user_message = f"当前日期:{datetime.now().strftime('%Y-%m-%d')}\n用户问题:{query}"

技巧六:双层护栏(Guardrails)

单层防御不够可靠。企业生产环境需要双层:

用户输入
    │
    ▼
┌──────────────────────────┐
│  提示词层护栏(软性)     │  ← 拦截方向性偏差
└──────────────────────────┘
    │ 通过
    ▼
┌──────────────────────────┐
│  代码层护栏(硬性)       │  ← 确定性静态检查
└──────────────────────────┘
    │ 安全
    ▼
  物理执行终端

提示词层护栏

<guardrails>
  输入验证:
  - 如果用户请求直接涉及生产数据库的 Schema 修改或全表删除,
    必须强制要求其附带 APPROVE_TOKEN
  - 如果任务超出工程边界,必须输出拒绝说明并提供人工通道,
    严禁通过猜测给出未经测试的代码

  输出约束:
  - 所有数据库变更脚本,必须在变更块前附带风险判定:⚠️ DANGER_SCHEMA_MUTATION
  - 置信度低于 70% 时必须明确标注
</guardrails>

代码层护栏

import re

def enforce_guardrail(raw_response: str, user_permissions: dict) -> dict:
    violations = []

    # 检查高危操作是否有安全警告
    dangerous_patterns = [
        r"DROP\s+TABLE",
        r"DELETE\s+FROM\s+\w+\s+WHERE\s+1\s*=\s*1",
        r"TRUNCATE\s+TABLE",
    ]
    for pattern in dangerous_patterns:
        if re.search(pattern, raw_response, re.IGNORECASE):
            if "⚠️ DANGER_SCHEMA_MUTATION" not in raw_response:
                violations.append(f"检测到高危数据库操作但缺少安全警告标记")

    # 检查用户权限
    if "SECURITY_FAIL_P0" in raw_response:
        if not user_permissions.get("can_override_security"):
            violations.append("触发 P0 阻断,当前用户不具备安全豁免权限")

    return {
        "is_safe": len(violations) == 0,
        "violations": violations,
        "should_execute": len(violations) == 0
    }

# 使用
response_text = call_claude(prompt)
check = enforce_guardrail(response_text, current_user.permissions)

if not check["is_safe"]:
    print("安全检查未通过:", check["violations"])
else:
    execute(response_text)

六个技巧的使用优先级

优先级技巧场景
🔴 必做XML 结构化标签所有多组件 Prompt
🔴 必做双层护栏所有涉及生产操作的场景
🟡 高价值Effort 控制复杂任务 / 成本优化
🟡 高价值Prompt Cache高频调用场景
🟢 按需Few-Shot有格式/风格要求的场景
🟢 按需CoT 可见推理需要决策审计的场景

下一篇:05. Prompt 版本管理体系


专栏导航 · Claude 企业级工程实战手册

⬅️ 上一篇:03. 企业级 System Prompt 四层架构:角色 / 上下文 / 约束 / 输出标准 ➡️ 下一篇:05. 像管理代码一样管理 Prompt:企业级版本管理体系全实战

本专栏共 14 篇,系统覆盖 Claude 模型选型 / Prompt 工程 / Claude Code 工作流 / API 高级用法 / MCP / RAG / AI 安全合规全链路。欢迎收藏:Claude 企业级工程实战手册