2.6 输出格式控制

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 说“第一句话”

这就像是在它的嘴边放了一句话,强迫它接下去。

强制 JSON 输出

不要仅仅在 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; // 记得把预填充的字符拼回去!

强制 XML 输出

同理,预填充 <root> 标签。

引导思维方向

Prefill 不仅能控制格式,还能控制内容方向。

  • User: "给我写个故事。"

  • Assistant (Prefill): "这是一个漆黑风暴的夜晚,"

  • Claude: "侦探史密斯压低了帽檐..."

2.6.2 移除“废话”

如果无法使用 API 的 Prefill 功能(例如在使用某些第三方客户端),可以通过 Prompt 咒语来减少废话。

负面约束法

示例示范法

通过 Few-Shot 展示“沉默”的美德。

2.6.3 标准格式详解

JSON Mode

对于 API 集成,JSON 是王道。建议定义 Schema:

Claude 非常擅长遵循这种类 JSON Schema 的定义。

CSV

当需要生成大量数据供 Excel 分析时。

Markdown 表格

最适合人类阅读的结构化格式。

2.6.4 长度控制

Claude 有时会变得很啰嗦。

目标
Prompt 技巧

极简

"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 优化方法论

最后更新于