11.structured data(结构化数据)
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org
==================================================
当你需要Claude生成结构化数据(如JSON、Python代码或项目符号列表)时,经常会遇到一个常见问题:Claude希望提供帮助,会在你的内容周围添加解释性文本。虽然这通常很有用,但有时你只需要纯粹的原始数据,不需要其他任何内容。
考虑构建一个生成AWS EventBridge规则的Web应用。用户输入描述,点击生成,期望看到可以立即复制和使用的干净JSON。如果Claude返回的JSON被包装在markdown代码块中并带有解释性文本,用户就无法简单地复制整个响应——他们必须手动选择JSON部分。

默认响应的问题
默认情况下,当你要求Claude生成JSON时,你可能会得到这样的结果:
```json
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["running"]
}
}
```
此规则捕获EC2实例在开始运行时的状态变化。
JSON是正确的,但它被包装在markdown格式中并包含解释性文本。对于用户需要复制原始JSON的Web应用来说,这会在用户体验中产生摩擦。
解决方案:助手消息预填充 + 停止序列
你可以将助手消息预填充与停止序列结合使用,以获得你想要的确切内容。工作原理如下:
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,没有额外的格式化:
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["running"]
}
}
处理响应
你可能会注意到响应中有一些额外的换行符。这些很容易处理:
import json
# 清理并解析JSON
clean_json = json.loads(text.strip())
Beyond JSON
这种技术不仅限于JSON生成。任何时候当你需要结构化数据而不需要注释说明时,都可以使用这种方法:
- Python代码片段
- Bulleted lists
- CSV data
- 任何你只想要内容本身,而不需要解释说明的格式化内容
关键在于识别Claude自然倾向于用什么来包装你的内容,然后将其用作你的预填充和停止序列。对于代码,通常是markdown代码块。对于列表,可能是不同的格式标记。
这种方法让你能够精确控制Claude的输出格式,使得将AI生成的内容集成到需要干净、结构化数据的应用程序中变得更加容易。
==================================================
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org