返回

如何从 OpenAI Assistant 中提取结构化数据:ResponseSchema 和 StructuredOutputParser 使用指南

python

用 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,请按照以下步骤操作:

  1. 创建 OpenAI 客户端并创建一个助手。
  2. 为助手创建线程和消息。
  3. 创建一个运行并轮询其状态。
  4. 从线程中提取消息。
  5. 解析助手输出。
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 的强大工具,允许你提取和解析结构化数据。这使你能够创建更加智能和有用的应用程序。

常见问题解答

  1. 如何创建 ResponseSchema?
    创建一个 ResponseSchema 对象,指定输出的名称、和类型。
  2. 如何使用 StructuredOutputParser?
    从 ResponseSchema 创建一个 StructuredOutputParser 对象并解析助手的输出。
  3. 是否有更多示例用法?
    本文提供了示例代码来展示如何使用 ResponseSchema 和 StructuredOutputParser。
  4. 我可以提取其他类型的数据吗?
    可以,通过创建自定义 ResponseSchema,你可以提取任何类型的数据。
  5. 有什么其他方法可以从 OpenAI Assistant 中提取数据?
    除了 ResponseSchema 和 StructuredOutputParser,你还可以使用其他方法,例如正则表达式或自定义解析函数。