六大进阶技巧: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 可见推理 | 需要决策审计的场景 |
专栏导航 · Claude 企业级工程实战手册
⬅️ 上一篇:03. 企业级 System Prompt 四层架构:角色 / 上下文 / 约束 / 输出标准 ➡️ 下一篇:05. 像管理代码一样管理 Prompt:企业级版本管理体系全实战
本专栏共 14 篇,系统覆盖 Claude 模型选型 / Prompt 工程 / Claude Code 工作流 / API 高级用法 / MCP / RAG / AI 安全合规全链路。欢迎收藏:Claude 企业级工程实战手册