当您需要 Claude 生成结构化数据(如 JSON、Python 代码或项目符号列表)时,您经常会遇到一个常见问题:Claude 想要提供帮助,并在您的内容周围添加解释性文本。虽然这通常很好,但有时您只需要原始数据,不需要其他任何内容。
设想您正在构建一个生成 AWS EventBridge 规则的网络应用。用户输入描述,点击生成,并期望看到可以立即复制使用的干净 JSON。如果 Claude 将 JSON 包装在带有解释性文本的 markdown 代码块中返回,用户就无法简单地复制整个响应——他们必须手动选择仅 JSON 部分。

默认响应的问题
默认情况下,当您要求 Claude 生成 JSON 时,您可能会得到类似这样的内容:
markdown
```json
\{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": \{
"state": ["running"]
\}
\}
```
This rule captures EC2 instance state changes when instances start running.JSON 是正确的,但它被包装在 markdown 格式中,并包含解释性文本。对于用户需要复制原始 JSON 的网络应用来说,这会在用户体验中造成摩擦。
解决方案:助手消息预填充 + 停止序列
您可以将助手消息预填充与停止序列结合使用,以获得您想要的确切内容。其工作原理如下:
python
messages = []
add_user_message(messages, "Generate a very short event bridge rule as json")
add_assistant_message(messages, "```json")
text = chat(messages, stop_sequences=["```"])这种技术的工作原理是:
- 用户消息告诉 Claude 要生成什么
- 预填充的助手消息使 Claude 认为它已经开始了一个 markdown 代码块
- Claude 继续只编写 JSON 内容
- 当 Claude 尝试用
```关闭代码块时,停止序列会立即结束生成

结果是没有额外格式的干净 JSON:
json
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["running"]
}
}处理响应
您可能会注意到响应中有一些额外的换行符。这些很容易处理:
python
import json
# 清理并解析 JSON
clean_json = json.loads(text.strip())超越 JSON
这种技术不仅限于 JSON 生成。在您需要不带评论的结构化数据时随时使用它:
- Python 代码片段
- 项目符号列表
- CSV 数据
- 任何您只想要内容而不想要解释的格式化内容
关键是识别 Claude 自然想要用什么来包装您的内容,然后将其用作您的预填充和停止序列。对于代码,通常是 markdown 代码块。对于列表,可能是不同的格式标记。
这种方法使您能够精确控制 Claude 的输出格式,从而更容易将 AI 生成的内容集成到需要干净、结构化数据的应用程序中。