具体逻辑
开发者按标准化manifest file写specific,包括api endpoints, examples和自然语言的description。
当用户激活plugin进入对话,manifest的信息会给chatgpt,然后根据用户问题 调用 api
这恰好是 之前的一篇论文toolformer 做的事情,即训练语言模型学会使用api。
作者Timo哲学般地在我们的语言中看到了流动的api。
我们的语言,是有结构的,如果把我们的一句话分成前后半句,后半句的发生一般来说是靠前半句触发,像极了api工作方式,前半句是输入,后半句是输出。
语言是流淌的时序sequence,每一个字的出现都与这个字出现之前的时序关联,比如 “我爱xx”,中的xx与‘我爱’相关。
这种接话茬般的language modeling也是gpt预训练的重要方法,让gpt系统模型拥有了超强接话茬能力,进而获得语言能力。
作者Timo看到并把流动的语言api拿出,又再次explicitly嵌入在语言之中,相当于把语料apply了一个function,例如:
Joe Biden was born in Scranton.
变为:
Joe Biden was born in [QA("Where was Joe Biden born?")] Scranton
[QA("Where was Joe Biden born?")] 就是一个api。
为了造出大量的并有较高质量带有这种api的预料,作者先是通过prompting语言模型造出如上条造出大量example。
由于这些example是不够可靠的,有很多无用的api,作者再次运用language modeling,通过判断产生的api example是否可以准确预测未来时序的token(api是否执行成功),来进行过滤。
最终过滤好的质量较高的api被作者设计的special token<API></API>显性地放到语料中, 例子如下:
Joe Biden was born in <API>[QA("Where was Joe Biden born?")] ->Scranton </API>
用此语料,作者再一次运用language modeling,fintune了GPT-J。经过这种语料的fintune,模型学会了when,which,how to call api:
when: 自然语言input:joe biden was born in
which/how API call: [QA("Where was JoeBiden born?")]
QA是api的类名,"Where was JoeBiden born?"是参数
我们再次回到openai plugin的场景,此时你也许明白了,根据用户的自然语言,模型为什么可以知道调用哪个API,以及传递什么样的参数了。