如何通过Python调用chatGPT的api,并形成上下文详解

如何通过Python调用chatGPT的api,并形成上下文详解2023 年 3 月 1 日 openai 官方发布了新的 chatGPT 的 api 接口 老接口的模型是 text davinci 003 新接口的模型是 gpt 3 5 turbo 新接口的相应速度比原来快了很多 并且支持上下文 下面我来详解一下这个上下文是怎么做的 下面这个代码是官方给出的调取 api 的示例 需要用户下载 openai 并且保证版本是 0 27 import openai openai

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



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时,对应的取值必须是systemuser和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">-&gt;</span> <span class="kc">None</span><span class="p">:</span> <span class="c1"># 初始化对话列表,可以加入一个key为system的字典,有助于形成更加个性化的回答</span> <span class="c1"># self.conversation_list = [{&#39;role&#39;:&#39;system&#39;,&#39;content&#39;:&#39;你是一个非常友善的助手&#39;}]</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">&#39;role&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;user&#39;</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="n">f</span><span class="s2">&#34;</span><span class="se">\U0001f47b</span><span class="s2">: </span><span class="si">{msg[&#39;content&#39;]}</span><span class="se">\n</span><span class="s2">&#34;</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">&#34;</span><span class="se">\U0001f47D</span><span class="s2">: </span><span class="si">{msg[&#39;content&#39;]}</span><span class="se">\n</span><span class="s2">&#34;</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">&#34;role&#34;</span><span class="p">:</span><span class="s2">&#34;user&#34;</span><span class="p">,</span><span class="s2">&#34;content&#34;</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">&#34;gpt-3.5-turbo&#34;</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">&#39;content&#39;</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">&#34;role&#34;</span><span class="p">:</span><span class="s2">&#34;assistant&#34;</span><span class="p">,</span><span class="s2">&#34;content&#34;</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> 
小讯
上一篇 2026-03-10 11:04
下一篇 2026-03-10 11:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/211011.html