GPT结合业务探索的思考一

背景

最近 Chatgpt 的推迟和相关应用业务的火爆, 需要让我们也必须跟上脚步, 不管是开发上还是业务上都必须对当期 AI 的能力有所了解, 并且开始探索也应用.

探索应用场景

内部成立的 gpt 的实验项目, 恰巧当时我也开始思考了一些, 所以给出了应对 “请假” 这个内部系统场景的方案.

用户的自然语言 -> 通过数据抽取 -> 程序语言(可执行代码/数据结构)

因为要和现有业务规则融合, 我们选择申请一个助理机器人作为 AI 的入口

优势

  • 独立原有的业务项目, 可以独立添加一个入口, 也意味着可以独立下掉(对未来政策的担心)
  • 更接近我们的目标, Jarvis

初次获取数据场景

将 “我下周一请半天假” 转为 JSON 结构返给业务程序

{
"type": "事假",
"startDate": "yyy-mm-dd",
"startTime": "上午",
"days": 0.5,
"reason": "有事要处理"
}

prompt

请开启一个新会话,不要和之前内容关联
当前时间是北京时间2023年04月13日 18:48:53 周四,你将作为一个语言转换器,你的任务是从下面给出的文本中提取出以下内容:请假类型、开始日期、开始时间、请假天数、请假原因,请提取出精确的表达。请假类型包括病假、年假、婚假、产检假、产假、丧假、流产假、陪产假、公益日、育儿假、护理假、调休.如果没有明确说明类型,需要根据描述或者请假原因来推断出最可能的类型. 如果无法推断出已知类型中就认为是事假。

身体不适属于病假;

如果没有明确说明请假原因,你可以适当发挥你的创造力。如果实在没有原因请返回 null

开始时间只能为上午或者下午,如果没有明确说明是上午或者下午,那么就是上午。

请假天数以0.5天为单位,返回一个不包括单位的数字。
如果只说明上午或下午,那么请假天数是0.5;
例如: 下午要请假. 请假天数你应该取到0.5。
如果没有分析出明确的请假天数,但描述中提到多个具体的日期那么请假天数是最大日期减去最小日期的差+1;
例如我请17号18号的年假,请假天数为 2.
如果没有分析出明确的请假天数也没有明确的日期,那么请假天数是1.
例如:我请个事假,请假天数为 1.


星期一是每周的第一天.
如果请假类型是婚假,那请假天数必须是10。
将结果返回一个JSON对象,type字段是请假类型,startDate字段是开始日期,startTime字段是开始时间,days字段是请假天数,reason字段是请假原因,不需要返回多余的信息。如果提供了当前数据,则在当前数据基础上重新提取后返回新JSON对象。

下面是你需要处理的文本:我明天要请个假,想回趟家

对现有数据修改的场景

  • 获取到上一次解析出的 JSON, 并作为参考,让 gpt 修改. 这样做可以保证我们 prompt 的 token 数量是一定的. 不会持续的增加. 又能让用户和机器人进行多轮的对话

原有 prompt 里,这句话是重点

如果提供了当前数据,则在当前数据基础上重新提取后返回新 JSON 对象。

针对复杂场景的引导方案

有些场景 gpt 无法根据 prompt 来返回预期的解析内容
有些难点

  • prompt 的修改难度比较大
  • 规则逻辑可能本身就很复杂,即使给出一些示例, gpt 依然无法严格执行

我么需要借鉴现在很多主流项目的方案:
引导 gpt 对输入进行分析, 比如先让 gpt 根据输入思考下依赖什么信息, 带上依赖的信息进行最终的询问. 用程序和 gpt 直接多轮的对话来获取最终比较准确的答案.

这个是参考 MS 的 Jarvis 项目. 他说将用户的任务先让 gpt 进行任务拆分, 拆分出依赖的子任务. 然后去各自询问子任务的结果, 等依赖任务都得到结果后再按顺序执行任务, 以得到最终的结果

问题分析

当 gpt 对某个 case 的输入理解不正确的时候, 我们可以

请一步一步进行分析,并详细给出解释. 下面是你需要处理的文本:我明天要请个假,想回趟家
看到 gpt 的具体分析过程, 也就能大致判断出我们 prompt 哪里让他误解,或者他没明白,没记住. 也是我们后续可以让他推理的方向