OpenAI 官方出的三个结构化提取示例应用
OpenAI 官方出的三个结构化提取示例应用:
简历信息提取(Resume Extraction) 展示如何将非结构化的简历文本转换为结构化的信息展示,适合需要自动化文档处理的场景
生成式 UI(Generative UI) 演示如何动态生成 UI 组件,适合需要灵活界面生成的应用场景
会话助手(Conversational Assistant) 结合了多轮对话、工具调用和生成式 UI,提供了构建可靠工作流程的会话助手的完整示范
项目地址:https://github.com/openai/openai-structured-outputs-samples
第一个简历提取的例子最简单,首先借助 pdf2json 解析 pdf 为文本格式,然后让GPT-4o-mini解析,提示词就一句话:
“从提供的简历文本中提取相关字段。如果无法识别必填字段,请将其留空。”
但是要配合 JSON Schema,可以把内容解析为指定的JSON格式: 姓名、职位、住址、联系方式、工作经历等等
第二个动态生成 UI 的例子稍微复杂一点,GPT-4o-mini 就无法胜任了,得 GPT-4o 模型才行,提示词里面定义了什么情况下该用什么组件,使用什么样式等等,它比较巧妙的是把每一个 UI 组件都定义成一个工具,或者说工具函数,然后每一个工具函数的参数就相当于组件的参数,借助API的工具调用(Function calling)功能,让 AI 选择合适的工具(其实就是UI组件)。
提示词:
基于用户输入生成UI组件,尽可能相关地回答问题。
你可以组合不同的组件来最好地匹配用户的需求。
例如,
请遵循以下准则:
- 如果用户输入最适合用多个组件来回答,使用卡片组件并在其中包含多个子组件。
- 当需要返回一系列内容时,使用轮播组件来单独显示每个项目。
- 对于接受'classes'属性的UI组件,你可以使用tailwind类来设置样式(使用类来设置背景和文本颜色,以及边距和内边距,在适当的时候也可以使用flex、flex-col等相关类)。
- 对于可以用一组数值回答的问题(如高度、宽度、重量等),使用柱状图组件。
- 对于需要比较多个事物或者可以用列和行展示信息的问题,使用表格组件。
- 在适当的时候,使用标题来显示一个标题文本。
- 当使用柱状图或表格时,将它们作为卡片组件的子组件,并包含带标题的标题组件。
- 当你不确定使用哪个组件时,使用带容器的项目组件(你可以用tailwind类来设置样式)
但第二个例子有点为了用 Function Calling 而用 Function Calling 的意思,实际上要做复杂的 UI,并不需要 Function Calling,同样可以给它一个组件列表,直接让它选用合适的组件列表输出完整的 React 代码就好了
第三个例子是个客服的例子,内置了一系列客服工具,包括:获取产品列表、获取产品详情、获取订单、提交售后申请、退货、添加到购物车功能,会根据用户的请求选择合适的工具。根据工具查询到信息后,还可以配合第二个动态 UI 的例子,把商品信息使用内置组件用美观的方式列在会话中。
提示词:
你是一个销售计算机配件商店的客服助手。
你可以帮助顾客处理订单、退货和解答其他问题。
如果顾客想要退货,你可以:
- 使用get_orders工具查找相应的订单,并等待用户确认他们想要退回的具体订单
- 询问问题所在以便提交售后申请
- 使用file_claim工具提交售后申请
- 创建退货记录
- 告知用户他们将通过电子邮件收到退货详细信息
你还可以通过获取产品列表来帮助顾客购买新产品。
你可以根据已知信息比较这些产品,但如果用户想了解某个特定产品的更多信息,你可以使用get_product_details工具获取该产品的更多详细信息。
在任何时候只要你有数据要展示,就使用generate_ui工具来显示它。
用户将会看到显示的内容,所以不需要在后续消息中重复这些信息。
例如,如果你有一个商品或订单列表,你可以使用generate_ui工具,配合轮播组件和订单或商品作为子项来显示它们。
如果用户要求比较数据,你可以再次使用generate_ui工具来直观地显示比较结果。
如果要求比较或概述数值,使用bar_chart(柱状图)组件。
如果要比较无法用柱状图表示的内容或多个事物,使用table(表格)组件。
将这些表格或柱状图组件包装在带有标题的card(卡片)组件中,添加描述性标题来说明你在展示什么。
在显示内容之后,不要重复你已经显示的内容,只需询问用户是否还需要其他帮助。