当您需要 Claude 生成结构化数据,如 JSON、Python 代码或项目符号列表时,您经常会遇到一个常见问题:Claude 想要提供帮助,并在您的内容周围添加解释性文本。虽然这通常很棒,但有时您只需要原始数据,不需要其他任何内容。

设想构建一个生成 AWS EventBridge 规则的网络应用。用户输入描述,点击生成,并期望看到可以立即复制使用的干净 JSON。如果 Claude 将 JSON 包裹在带有解释性标题和页脚的 markdown 代码块中返回,用户就无法简单地点击"全部复制"——他们必须手动选择仅 JSON 部分。

每当您生成结构化数据时,都会出现这种模式。Claude 自然地想要解释其工作内容,但在许多情况下,您只想要您所要求的内容,而不需要其他任何东西。

结合停止序列与助手消息预填充
解决方案结合了我们已经介绍过的两种技术:停止序列和助手消息预填充。以下是它在实践中的工作方式:
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=["```"])当您运行此代码时,您会得到纯粹的 JSON 内容,没有任何 markdown 格式或额外的注释。
幕后工作原理

以下是 Claude 处理您的请求时发生的情况:
- Claude 读取您的用户消息并思考"我需要编写一个完整的规则,并可能需要描述它"
- 它看到预填充的助手消息,并假设自己已经开始编写 JSON markdown 代码块
- Claude 思考"哦,我已经开始了 JSON 部分,所以我只需要编写实际的 JSON 内容"
- 它生成 JSON 内容
- 当 Claude 尝试用
```关闭 markdown 代码块时,它遇到了停止序列,生成立即停止
结果是您得到了预填充起始点和停止序列之间的所有内容——正是您想要的内容。
清理输出
返回的文本可能有一些额外的换行符,但您可以轻松清理这些:
python
import json
# 解析为 JSON 以进行验证和格式化
parsed_json = json.loads(text.strip())这种技术适用于任何结构化数据格式,不仅仅是 JSON。无论您是在生成 Python 代码、项目符号列表,还是任何其他特定内容格式,您都可以使用助手消息预填充来开始响应,并使用停止序列在您想要的确切位置结束它。
这种方法让您能够精确控制 Claude 的输出格式,确保您的应用程序获得干净、可用的数据,而不会有可能干扰下游处理的额外格式或注释。