2023年3月1日,openai官方发布了新的chatGPT的api接口。老接口的模型是text-davinci-003,新接口的模型是gpt-3.5-turbo。新接口的相应速度比原来快了很多,并且支持上下文。下面我来详解一下这个上下文是怎么做的。
下面这个代码是官方给出的调取api的示例。需要用户下载openai,并且保证版本是0.27。
openai.api_key = “这里放入你的API Key,注意要保留双引号”
completion = openai.ChatCompletion.create( model=“gpt-3.5-turbo”, messages=[{“role”: “user”, “content”: “知乎是什么?”}] )
print(completion)
按上面代码的写法,只能回答单个问题,并且无法形成上下文,原因在于messages这个参数只有一个字典。要想形成上下文,就必须按上下文对话的顺序把对话封装成字典,而且这个字典中,key为role时,对应的取值必须是system、user和assistant!
另外,字典中每一个role的取值,对应的功能都不太一样,其中system用于在会话开始之初给定chatGPT一个指示或声明,使得后续的回答更具有个性化和专业化。user是用于给用户提问的或者说是用来给用户输入prompt的。assistant是用于输入chatGPT的回答内容。
至于content这key,就是用于输入基于role的文本。如果role是user,content就是prompt,如果role是assitant,content就是chatGPT回答的内容。
详解完毕,下面上一个我自己写的一个python代码,可以实现多轮对话,仅供参考:
讯享网class Chat:
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">conversation_list</span><span class="o">=</span><span class="p">[])</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span> <span class="c1"># 初始化对话列表,可以加入一个key为system的字典,有助于形成更加个性化的回答</span> <span class="c1"># self.conversation_list = [{'role':'system','content':'你是一个非常友善的助手'}]</span> <span class="bp">self</span><span class="o">.</span><span class="n">conversation_list</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># 打印对话</span> <span class="k">def</span> <span class="nf">show_conversation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">msg_list</span><span class="p">):</span> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="n">msg_list</span><span class="p">:</span> <span class="k">if</span> <span class="n">msg</span><span class="p">[</span><span class="s1">'role'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'user'</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="n">f</span><span class="s2">"</span><span class="se">\U0001f47b</span><span class="s2">: </span><span class="si">{msg['content']}</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="n">f</span><span class="s2">"</span><span class="se">\U0001f47D</span><span class="s2">: </span><span class="si">{msg['content']}</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="c1"># 提示chatgpt</span> <span class="k">def</span> <span class="nf">ask</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">prompt</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">conversation_list</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"role"</span><span class="p">:</span><span class="s2">"user"</span><span class="p">,</span><span class="s2">"content"</span><span class="p">:</span><span class="n">prompt</span><span class="p">})</span> <span class="n">response</span> <span class="o">=</span> <span class="n">openai</span><span class="o">.</span><span class="n">ChatCompletion</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">model</span><span class="o">=</span><span class="s2">"gpt-3.5-turbo"</span><span class="p">,</span><span class="n">messages</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">conversation_list</span><span class="p">)</span> <span class="n">answer</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">choices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">message</span><span class="p">[</span><span class="s1">'content'</span><span class="p">]</span> <span class="c1"># 下面这一步是把chatGPT的回答也添加到对话列表中,这样下一次问问题的时候就能形成上下文了</span> <span class="bp">self</span><span class="o">.</span><span class="n">conversation_list</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"role"</span><span class="p">:</span><span class="s2">"assistant"</span><span class="p">,</span><span class="s2">"content"</span><span class="p">:</span><span class="n">answer</span><span class="p">})</span> <span class="bp">self</span><span class="o">.</span><span class="n">show_conversation</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conversation_list</span><span class="p">)</span></code></pre></div><p data-pid="jaMqzbyA">下面来看看成果</p><figure data-size="normal"><img src="https://pica.zhimg.com/v2-133f405a3b353eb4ecbe0274a144bc6a_r.jpg" data-size="normal" data-rawwidth="1792" data-rawheight="338" data-original-token="v2-a8bdaeba323a4acc556f6262f2caa20f" class="origin_image zh-lightbox-thumb" width="1792" data-original="https://pica.zhimg.com/v2-133f405a3b353eb4ecbe0274a144bc6a_r.jpg"/><figcaption>第一次问答</figcaption></figure><figure data-size="normal"><img src="https://pic4.zhimg.com/v2-34ce22f7e1da33435d6edced_r.jpg" data-size="normal" data-rawwidth="1791" data-rawheight="680" data-original-token="v2-8c9c5bd2a6984a42e025de12c443a490" class="origin_image zh-lightbox-thumb" width="1791" data-original="https://pic4.zhimg.com/v2-34ce22f7e1da33435d6edced_r.jpg"/><figcaption>第二次问答</figcaption></figure><p data-pid="qUKkQIIr">可以在第二次问答的图片中看到,chatGPT明显捕捉到了第一次对话的关键词“火锅”。</p><p></p><p></p>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/211011.html