返回
如何从 OpenAI Assistant 中提取结构化数据:ResponseSchema 和 StructuredOutputParser 使用指南
python
2024-03-11 07:48:34
用 ResponseSchema 和 StructuredOutputParser 从 OpenAI Assistant 中提取结构化数据
在与 OpenAI 助手交互时,你可能希望提取和解析输出中的结构化数据,例如代码片段、编程语言名称和解释。这是通过使用 ResponseSchema 和 StructuredOutputParser 实现的。
ResponseSchema
ResponseSchema 用于定义你希望从助手接收输出的结构。它指定了输出的格式,使其易于解析。在本文的示例中,我们将创建一个 ResponseSchema 来指定输出应包含一个包含代码块、编程语言名称和解释的对象。
response_schema = ResponseSchema(
name="code",
description="""代码片段块、编程语言名称和解释:
{ "block": string // 代码块, "lang": string // 编程语言名称, "explain": string // 代码解释}
""",
type="string",
)
StructuredOutputParser
StructuredOutputParser 负责解析助手的输出并提取预期的结构化数据。它使用 ResponseSchema 来指导解析过程。
structured_output_parser = StructuredOutputParser.from_response_schemas(
[response_schema]
)
示例用法
要使用 ResponseSchema 和 StructuredOutputParser,请按照以下步骤操作:
- 创建 OpenAI 客户端并创建一个助手。
- 为助手创建线程和消息。
- 创建一个运行并轮询其状态。
- 从线程中提取消息。
- 解析助手输出。
messages = client.beta.threads.messages.list(
thread_id=thread.id
)
if messages.data[0].content[-1].content:
output = messages.data[0].content[-1].content
parsed_output = structured_output_parser.parse(output)
code_block = parsed_output["code"]["block"]
programming_language = parsed_output["code"]["lang"]
explanation = parsed_output["code"]["explain"]
print(f"代码块:{code_block}")
print(f"编程语言:{programming_language}")
print(f"解释:{explanation}")
else:
print("助手没有返回任何输出")
好处
使用 ResponseSchema 和 StructuredOutputParser 有以下好处:
- 轻松提取结构化数据: 你可以轻松地从助手的输出中提取代码、语言和解释等结构化数据。
- 自动化处理: StructuredOutputParser 自动化了解析过程,消除了手动提取数据的需要。
- 改进应用程序集成: 通过提取结构化数据,你可以轻松地将其集成到你的应用程序中,用于进一步处理或展示。
结论
ResponseSchema 和 StructuredOutputParser 是 OpenAI Assistant 的强大工具,允许你提取和解析结构化数据。这使你能够创建更加智能和有用的应用程序。
常见问题解答
- 如何创建 ResponseSchema?
创建一个 ResponseSchema 对象,指定输出的名称、和类型。 - 如何使用 StructuredOutputParser?
从 ResponseSchema 创建一个 StructuredOutputParser 对象并解析助手的输出。 - 是否有更多示例用法?
本文提供了示例代码来展示如何使用 ResponseSchema 和 StructuredOutputParser。 - 我可以提取其他类型的数据吗?
可以,通过创建自定义 ResponseSchema,你可以提取任何类型的数据。 - 有什么其他方法可以从 OpenAI Assistant 中提取数据?
除了 ResponseSchema 和 StructuredOutputParser,你还可以使用其他方法,例如正则表达式或自定义解析函数。