第 17 页 / 共 100 页 / 飞书修订版 13

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部分。

image1.png

默认响应的问题

默认情况下,当你要求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=["```"])

这种技术的工作原理是:

  1. 用户消息告诉 Claude 要生成什么内容
  2. 预填充的助手消息让 Claude 认为它已经开始了一个 markdown 代码块
  3. Claude 继续编写,只输出 JSON 内容
  4. 当Claude尝试用```关闭代码块时,停止序列会立即结束生成
image2.png

结果是干净的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