我正在参加「启航计划」

大家好,欢迎来到 Crossin的编程教室 !

我在之前的文章里介绍过,怎么利用 OpenAI 敞开的 API,将 ChatGPT 接入自己开发的程序:

怎么在程序中接入ChatGPT

不过接入后还有个问题:

ChatGPT 尽管很能“聊”,但它并了解你的产品啊。就好比你把郭德纲喊来做你的客服,他也并不会比一个经过培训的客服人员做得更好。

而且 ChatGPT 还有个缺点,即便是它不知道的问题,也不会老老实实供认自己不知道,而是不苟言笑的胡说八道。比方关于这个不存在的“Crossin跨国集团有限公司”,它也会煞有介事地进行介绍。

如何调教一个定制化的ChatGPT私人助理,接入自家知识库

所以,为了能将 ChatGPT 变成一个老实本分的客服,我进行了一番摸索。

1. 微调模型

因为在 OpenAI 开发者后台的用量记录里看到一个“Fine-tune training”(微调练习)的栏目,所以我榜首反响就想到,这个接口是不是便是用来练习自己的私有模型。

如何调教一个定制化的ChatGPT私人助理,接入自家知识库

大致了解了一下,发现也的确如此,而且官方还给出了具体文档和一个完整的微调代码典范:

platform.openai.com/docs/guides…

模仿案例拿自己的一些语料做了个测验,等了大约1个半小时(主要是排队),得到了微调后的模型。

然而成果不能说是差强人意,是完全胡说八道……

如何调教一个定制化的ChatGPT私人助理,接入自家知识库

这比之前的 text-davinci-003 还要差上一大截啊。

又经过一番查找,了解到本来微调是在基础的 davinci 模型之上进行。换句话说,text-davinci-003 已经是经过大量数据微调后的一个模型。

所以假如要想得到一个满足的定制化模型,相同也需求大量的语料来进行练习,而且还享受不到 ChatGPT 的高质量回答。

那这不是调了个寂寞?

如何调教一个定制化的ChatGPT私人助理,接入自家知识库

2. 提示工程

此路不通,那就另辟蹊径。

ChatGPT 的 API 里支持传递对话列表,那假如我把希望 ChatGPT 了解的布景常识放在历史对话里,它不就知道了嘛?

试了下,作用契合预期。

如何调教一个定制化的ChatGPT私人助理,接入自家知识库

而且,我还能够进一步“PUA”它,让它别给我整那些有的没的,不知道便是不知道。

如何调教一个定制化的ChatGPT私人助理,接入自家知识库

看来这办法可行。

了解了一下,本来这种办法有个专门的名词,叫做提示工程(Prompt Engineering),便是经过改进提示,让 AI 能发生更加契合预期的成果。

不过,又有了新问题……

假如布景常识库比较大,比方一个公司各种产品的具体介绍,每次都把这么多内容放到 API 恳求里,也还是挺耗钱的。

3. 嵌入

经过进一步调研,发现官方引荐了一种叫做“嵌入”(Embeddings)的办法来完成此类需求。而且也供给了相应的典范:

github.com/openai/open…

简略来说便是:

  1. 经过一个 Embedding 接口,把你供给的每一条语料都别离转换成一组高维向量(1500+),并记录下来;

  2. 收到一个问题后,也经过相同接口将此问题转换成一组高维向量;

  3. 从前面记录的向量库中寻觅与当时这组向量最接近的几条语料,即与问题相关度最高的布景常识;

  4. 用之前我们讲的提示工程办法,把这几条布景放入问题中,向 ChatGPT 接口恳求回答。

这个办法的优点是,即便你有很多布景常识,每次恳求时也只需求带上几条,花费很少的token。

而 Embedding 接口本身的费用则十分便宜,几乎能够说是免费。

如何调教一个定制化的ChatGPT私人助理,接入自家知识库

开始测验下来,发现关于最相关语料的判别还是比较精确的。

如何调教一个定制化的ChatGPT私人助理,接入自家知识库

后续我还会用更多数据做进一步测验。

以上便是我关于怎么调教一个定制化的ChatGPT私人助理,接入自家常识库的开始测验。

假如你也有这方面的经历和疑问,欢迎留言讨论。