Prompt Engineering 的终极目标往往不仅仅是获得“正确”的答案,更是获得“可用”的答案。 对于开发者而言,最令人头疼的就是 Claude 回复了一堆 "Here is the JSON you requested..." 的废话,或者在 JSON 里加了注释导致 JSON.parse 报错。
本节将传授几招确保留下 干净的机器可读输出 (Clean Machine-Readable Output) 的绝技。
2.6.1 核心技术:Prefill
这是 Claude 相比其他 LLM 最独特的优势之一。 在通用的 Chat Completions API (如 OpenAI) 中,通常 Assistant 的消息是由模型生成的。但在 Claude 的 Messages API 中,可以手动代替 Assistant 说“第一句话” 。
这就像是在它的嘴边放了一句话,强迫它接下去。
不要仅仅在 System Prompt 里求它。直接把 { 塞进它的嘴里。
API Payload:
复制 {
"messages" : [
{ "role" : "user" , "content" : "请分析这段文本的情感,输出 JSON。文本:..." } ,
{ "role" : "assistant" , "content" : "{" } // <--- 关键!
]
} Claude 的反应 : 它必须从 { 后面接着写。它不可能 再说 "好的,这是你的分析:",因为 { 已经发出来了。它只能继续生成 "sentiment": "positive"...。
后端拼接 :
复制 const response = await callClaude ( ... );
const fullJson = "{" + response .content[ 0 ].text; // 记得把预填充的字符拼回去! 同理,预填充 <root> 标签。
Prefill 不仅能控制格式,还能控制内容方向。
Assistant (Prefill) : "这是一个漆黑风暴的夜晚,"
如果无法使用 API 的 Prefill 功能(例如在使用某些第三方客户端),可以通过 Prompt 咒语来减少废话。
通过 Few-Shot 展示“沉默”的美德。
对于 API 集成,JSON 是王道。建议定义 Schema:
Claude 非常擅长遵循这种类 JSON Schema 的定义。
当需要生成大量数据供 Excel 分析时。
最适合人类阅读的结构化格式。
Claude 有时会变得很啰嗦。
"Be extremely concise. No filler words." (极度简洁,无废话)
"Strictly under 50 words." (严格控制在50字以内,注意 token vs word 差异)
"Answer in exactly 3 bullet points." (确切使用3个要点)
"Only answer the 'What', ignore the 'Why'." (只答是什么,不答为什么)
2.6.5 Stop Sequences (停止序列)
这是 API 层面的核武器。可以告诉 API:“一看到某个特定字符,就立即切断生成”。
场景 :只希望 Claude 填空。 Prompt: Q: 1+1=? A: Stop Sequence: \n
当 Claude 生成 2 后,它想换行写解释,但碰到了 \n,API 强制截断。得到了干净的 2。
现在,已掌握了提示工程的所有组件:基础原则、XML 结构、System Prompt、Few-Shot、CoT 和格式控制。 但是,怎么知道写的 Prompt 到底好不好?如何科学地改进它?
➡️ Prompt 优化方法论