为了账号安全,请及时绑定邮箱和手机立即绑定

探秘ChatGPT实现上下文连贯的会话原理

深入ChatGPT,揭示其实现上下文连贯会话的原理。从Transformer架构到实现原理,了解如何让ChatGPT在长时间对话中保持连贯性。掌握如何利用历史对话内容调用OpenAI接口,为构建更智能的对话系统奠定理论基础。

理论基础

ChatGPT 基于 Transformer 架构,而Transformer专为文本等顺序数据而设计。 Transformer 中的自注意力机制允许模型在进行预测时考虑整个输入序列(8000 tokens or more),使其能够更好地捕获上下文并在长时间对话中保持连贯性。因为Transformer的decoder在生成下一个token的时候能看到之前所有的token,而且每一个窗口都是一个单独的context。

实现原理

有些Transformer架构的理论基础之后,那要如何实现上下文连贯的会话呢,对数据是有什么要求吗?

答案是有的:把当前提问+前面的对话内容(最大4000 token限制)一起作为输入,那么输出的内容就自然包含了前面对话的意思。

默认情况下,我们每次调用OpenAI的接口和ChatGPT进行会话的时候,都会产生一个新的Session。而且两次请求的Session是不一样的。那么这就会导致我们在第二次会话时问它上一次会话的内容它会不知道。

那,如何才能在调用OpenAI的接口和ChatGPT进行会话的时候,让ChatGPT知道上一次的会话内容呢?

这需要我们在下一次发送会话请求的时候,需要将之前的会话以下面的格式一并发送给它。


Q:  xxx

A:  xxx

Q:  xxx

这个QA又分布代表什么含义呢?

  • Q:question的缩写,表示提问的内容;

  • A:answer的缩写,表示ChatGPT的回复;

接下来我们就来通过一个例子,来实操下。

实现案例

假如,我们有一组这样的会话历史:


问:讲个笑话

答:为了祝福新婚夫妇,一位老人代表全村去参加了婚礼。他举杯祝福时,满脸认真地说:“愿你们俩一辈子都像我们村的公鸡母鸡一样相敬如宾、恩爱有加!”  结果全场哄堂大笑:公鸡母鸡们虽然关系好,但是婚姻真的维持得不长久啊

然后,我们想让ChatGPT接口接着这个笑话接着讲,该如何做呢?


Q:讲个笑话\nA:为了祝福新婚夫妇,一位老人代表全村去参加了婚礼。他举杯祝福时,满脸认真地说:“愿你们俩一辈子都像我们村的公鸡母鸡一样相敬如宾、恩爱有加!”  结果全场哄堂大笑:公鸡母鸡们虽然关系好,但是婚姻真的维持得不长久啊!\nQ:继续

所以,要做的就是将历史会话和这次的会话内容比如:继续,按照实现原理中的格式拼接起来,中间的用\n来进行分割即可。

如:


curl  https://api.openai.com/v1/chat/completions  \

-H 'Content-Type: application/json' \

-H  'Authorization: Bearer apiKey'  \

-d '{

"model":  "gpt-3.5-turbo",

"messages": [{"role":  "user",  "content":  "Q:讲个笑话\nA:为了祝福新婚夫妇,一位老人代表全村去参加了婚礼。他举杯祝福时,满脸认真地说:“愿你们俩一辈子都像我们村的公鸡母鸡一样相敬如宾、恩爱有加!” 结果全场哄堂大笑:公鸡母鸡们虽然关系好,但是婚姻真的维持得不长久啊!\nQ:继续"}]

}'

实际在运行的时候需要将apiKey替换为你自己的apiKey即可。

为什么在使用https://chat.openai.com/的时候不需要携带历史对话内容呢?

这是因为https://chat.openai.com/平台在你每次创建一个新的会话的时候会对当前的会话进行保存,当你每次发出新的问题的时候,平台会带上你的历史对话信息。

参考

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消