GPT对话
<p>[TOC]</p>
<h5>简要描述</h5>
<ul>
<li>GPT对话接口</li>
</ul>
<h5>请求URL</h5>
<ul>
<li><code>https://api.hellogptworld.com/v1/chat/completions</code></li>
</ul>
<h5>请求方式</h5>
<ul>
<li>POST </li>
</ul>
<h5>请求头信息</h5>
<ul>
<li>Content-Type: application/json</li>
<li>Authorization: Bearer 密钥信息 (你的密钥,在 [api对接](<a href="https://vip.hellogptworld.com/api">https://vip.hellogptworld.com/api</a> "api对接") 中查看)</li>
</ul>
<h5>请求参数说明</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">model</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>支持的模型:gpt-3.5-turbo、gpt-3.5-turbo-0301、gpt-3.5-turbo-16k、gpt-3.5-turbo-1106、gpt-3.5-turbo-0125(截止当前最新模型,默认支持16k上下文)、gpt-4、gpt-4-0613、gpt-4-1106-preview、gpt-4-turbo-preview、gpt-4-0125-preview、gpt-4-turbo-2024-04-09、gpt-4o、gpt-4o-2024-05-13、gpt-4o-2024-08-06(截止当前最新的模型,支持结构化输出的最新快照)、gpt-4o-mini、gpt-4o-mini-2024-07-18(截至当前最新模型,GPT-4o mini 在 API 中支持文本和视觉,未来还将支持文本、图像、视频和音频的输入和输出。该模型具有 128K 个 token 的上下文窗口,每个请求最多支持 16K 个输出 token,并且拥有截至 2023 年 10 月的知识)、chatgpt-4o-latest(ChatGPT官方网页中的动态模型不断更新至当前版本的 GPT-4o模型)</td>
</tr>
<tr>
<td style="text-align: left;">messages</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">array</td>
<td>对话信息</td>
</tr>
<tr>
<td style="text-align: left;">user</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">string</td>
<td>当前请求用户标识,业务方自行生成,最大64个字符,可以帮助OpenAI监控和检测滥用行为</td>
</tr>
<tr>
<td style="text-align: left;">stream</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">bool</td>
<td>是否流式输出。默认为非流式</td>
</tr>
<tr>
<td style="text-align: left;">temperature</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">double</td>
<td>思维发散程度,建议0.2,较高的值(如0.8)将使输出更加随机,而较低的值(如0.2)将使输出更加集中和确定。默认为0.2</td>
</tr>
<tr>
<td style="text-align: left;">max_tokens</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">int</td>
<td>聊天完成时生成的最大令牌数。默认为2048,最大支持4096</td>
</tr>
<tr>
<td style="text-align: left;">presence_penalty</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">double</td>
<td>-2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。 默认为0</td>
</tr>
<tr>
<td style="text-align: left;">frequency_penalty</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">double</td>
<td>-2.0 和 2.0 之间的数字。正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。默认为0</td>
</tr>
<tr>
<td style="text-align: left;">top_p</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">double</td>
<td>一种替代温度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。默认为1.0</td>
</tr>
<tr>
<td style="text-align: left;">n</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">int</td>
<td>为每个输入消息生成多少个聊天完成选项。默认为1</td>
</tr>
<tr>
<td style="text-align: left;">logit_bias</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">array</td>
<td>修改指定标记出现在完成中的可能性,默认为空,暂时不用</td>
</tr>
</tbody>
</table>
<p>messages字段说明</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">role</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>角色名称,用户传:user, 机器人传:assistant</td>
</tr>
<tr>
<td style="text-align: left;">content</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>对话内容</td>
</tr>
<tr>
<td style="text-align: left;">name</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">string</td>
<td>别名</td>
</tr>
</tbody>
</table>
<h5>请求示例</h5>
<p>注意:
1、messages数组的第0位是最先提问的上下文信息,依次类推,最大的就是最近提的问题
2、平台对传入的上下文信息没有做限制,越多的上下文信息消耗的积分越多,建议传1000字以内,由业务方自己控制
文本模型</p>
<pre><code>{
&quot;model&quot;: &quot;gpt-4o-mini&quot;,
&quot;temperature&quot;: 0.2,
&quot;top_p&quot;: 1,
&quot;n&quot;: 1,
&quot;presence_penalty&quot;: 0,
&quot;frequency_penalty&quot;: 0,
&quot;stream&quot;: true,
&quot;user&quot;:&quot;d7e68cb9-f494-4d78-89ce-735eeab4b107&quot;,
&quot;messages&quot;:[
{
&quot;role&quot;:&quot;user&quot;,
&quot;content&quot;:&quot;你是谁&quot;
},
{
&quot;role&quot;:&quot;assistant&quot;,
&quot;content&quot;:&quot;我是一个AI语言模型,由OpenAI开发。&quot;
},
{
&quot;role&quot;:&quot;user&quot;,
&quot;content&quot;:&quot;1+1=?&quot;
}
]
}</code></pre>
<p>视觉模型</p>
<pre><code>{
&quot;model&quot;: &quot;gpt-4o-mini&quot;,
&quot;max_tokens&quot;: 800,
&quot;temperature&quot;: 0.2,
&quot;top_p&quot;: 1,
&quot;n&quot;: 1,
&quot;presence_penalty&quot;: 0,
&quot;frequency_penalty&quot;: 0,
&quot;user&quot;: &quot;d7e68cb9-f494-4d78-89ce-735eeab4b107&quot;,
&quot;messages&quot;: [
{
&quot;role&quot;: &quot;user&quot;,
&quot;content&quot;: [
{
&quot;type&quot;: &quot;text&quot;,
&quot;text&quot;: &quot;图片描述了什么&quot;
},
{
&quot;type&quot;: &quot;image_url&quot;,
&quot;image_url&quot;: {
&quot;url&quot;: &quot;data:image/jpeg;base64,{base64}&quot;
}
}
]
}
],
&quot;stream&quot;: true
}</code></pre>
<h5>非流式正确返回示例</h5>
<pre><code>{
&quot;id&quot;:&quot;chatcmpl-7MCqEj6w5C4fUuLcTrsDH2e6ExYkv&quot;,
&quot;object&quot;:&quot;chat.completion&quot;,
&quot;created&quot;:1685526934,
&quot;model&quot;:&quot;gpt-3.5-turbo-0125&quot;,
&quot;usage&quot;:{
&quot;prompt_tokens&quot;:41,
&quot;completion_tokens&quot;:6,
&quot;total_tokens&quot;:47
},
&quot;choices&quot;:[
{
&quot;message&quot;:{
&quot;role&quot;:&quot;assistant&quot;,
&quot;content&quot;:&quot;1+1=2。&quot;
},
&quot;finish_reason&quot;:&quot;stop&quot;,
&quot;index&quot;:0
}
],
&quot;system_fingerprint&quot;: &quot;fp_eeff13170a&quot;
}</code></pre>
<h5>流式正确返回示例</h5>
<p>注意:data: [DONE]为流式返回结束</p>
<pre><code>data: {&quot;id&quot;:&quot;chatcmpl-7MCqtZcvn8rKPLlY55821IkGgfkXT&quot;,&quot;object&quot;:&quot;chat.completion.chunk&quot;,&quot;created&quot;:1685526975,&quot;model&quot;:&quot;gpt-4o-mini&quot;,&quot;system_fingerprint&quot;:&quot;fp_eeff13170a&quot;,&quot;choices&quot;:[{&quot;delta&quot;:{&quot;role&quot;:&quot;assistant&quot;},&quot;index&quot;:0,&quot;finish_reason&quot;:null}]}
data: {&quot;id&quot;:&quot;chatcmpl-7MCqtZcvn8rKPLlY55821IkGgfkXT&quot;,&quot;object&quot;:&quot;chat.completion.chunk&quot;,&quot;created&quot;:1685526975,&quot;model&quot;:&quot;gpt-4o-mini&quot;,&quot;system_fingerprint&quot;:&quot;fp_eeff13170a&quot;,&quot;choices&quot;:[{&quot;delta&quot;:{&quot;content&quot;:&quot;1&quot;},&quot;index&quot;:0,&quot;finish_reason&quot;:null}]}
data: {&quot;id&quot;:&quot;chatcmpl-7MCqtZcvn8rKPLlY55821IkGgfkXT&quot;,&quot;object&quot;:&quot;chat.completion.chunk&quot;,&quot;created&quot;:1685526975,&quot;model&quot;:&quot;gpt-4o-mini&quot;,&quot;system_fingerprint&quot;:&quot;fp_eeff13170a&quot;,&quot;choices&quot;:[{&quot;delta&quot;:{&quot;content&quot;:&quot;+&quot;},&quot;index&quot;:0,&quot;finish_reason&quot;:null}]}
data: {&quot;id&quot;:&quot;chatcmpl-7MCqtZcvn8rKPLlY55821IkGgfkXT&quot;,&quot;object&quot;:&quot;chat.completion.chunk&quot;,&quot;created&quot;:1685526975,&quot;model&quot;:&quot;gpt-4o-mini&quot;,&quot;system_fingerprint&quot;:&quot;fp_eeff13170a&quot;,&quot;choices&quot;:[{&quot;delta&quot;:{&quot;content&quot;:&quot;1&quot;},&quot;index&quot;:0,&quot;finish_reason&quot;:null}]}
data: {&quot;id&quot;:&quot;chatcmpl-7MCqtZcvn8rKPLlY55821IkGgfkXT&quot;,&quot;object&quot;:&quot;chat.completion.chunk&quot;,&quot;created&quot;:1685526975,&quot;model&quot;:&quot;gpt-4o-mini&quot;,&quot;system_fingerprint&quot;:&quot;fp_eeff13170a&quot;,&quot;choices&quot;:[{&quot;delta&quot;:{&quot;content&quot;:&quot;=&quot;},&quot;index&quot;:0,&quot;finish_reason&quot;:null}]}
data: {&quot;id&quot;:&quot;chatcmpl-7MCqtZcvn8rKPLlY55821IkGgfkXT&quot;,&quot;object&quot;:&quot;chat.completion.chunk&quot;,&quot;created&quot;:1685526975,&quot;model&quot;:&quot;gpt-4o-mini&quot;,&quot;system_fingerprint&quot;:&quot;fp_eeff13170a&quot;,&quot;choices&quot;:[{&quot;delta&quot;:{&quot;content&quot;:&quot;2&quot;},&quot;index&quot;:0,&quot;finish_reason&quot;:null}]}
data: {&quot;id&quot;:&quot;chatcmpl-7MCqtZcvn8rKPLlY55821IkGgfkXT&quot;,&quot;object&quot;:&quot;chat.completion.chunk&quot;,&quot;created&quot;:1685526975,&quot;model&quot;:&quot;gpt-4o-mini&quot;,&quot;system_fingerprint&quot;:&quot;fp_eeff13170a&quot;,&quot;choices&quot;:[{&quot;delta&quot;:{&quot;content&quot;:&quot;。&quot;},&quot;index&quot;:0,&quot;finish_reason&quot;:null}]}
data: {&quot;id&quot;:&quot;chatcmpl-7MCqtZcvn8rKPLlY55821IkGgfkXT&quot;,&quot;object&quot;:&quot;chat.completion.chunk&quot;,&quot;created&quot;:1685526975,&quot;model&quot;:&quot;gpt-4o-mini&quot;,&quot;system_fingerprint&quot;:&quot;fp_eeff13170a&quot;,&quot;choices&quot;:[{&quot;delta&quot;:{},&quot;index&quot;:0,&quot;finish_reason&quot;:&quot;stop&quot;}]}
data: [DONE]
</code></pre>
<h5>异常返回示例</h5>
<pre><code>
// 密钥没传
{
&quot;error&quot;: {
&quot;message&quot;: &quot;You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth (i.e. Authorization: Bearer YOUR_KEY), or as the password field (with blank username) if you're accessing the API from your browser and are prompted for a username and password. You can obtain an API key from https://vip.gptchatclub.com/api.&quot;,
&quot;type&quot;: &quot;talk_api_error&quot;,
&quot;param&quot;: null,
&quot;code&quot;: &quot;invalid_api_key&quot;
}
}
// 密钥传的不对
{
&quot;error&quot;: {
&quot;message&quot;: &quot;Incorrect API key provided: sk-1afsp*****************************************k5R2. You can find your API key at https://vip.gptchatclub.com/api.&quot;,
&quot;type&quot;: &quot;invalid_request_error&quot;,
&quot;param&quot;: null,
&quot;code&quot;: &quot;invalid_api_key&quot;
}
}
// 模型不对
{
&quot;error&quot;: {
&quot;message&quot;: &quot;Unsupported model.&quot;,
&quot;type&quot;: &quot;talk_api_error&quot;,
&quot;param&quot;: null,
&quot;code&quot;: &quot;invalid_model&quot;
}
}
// 余额不足
{
&quot;error&quot;: {
&quot;message&quot;: &quot;User quota is not enough.&quot;,
&quot;type&quot;: &quot;talk_api_error&quot;,
&quot;param&quot;: null,
&quot;code&quot;: &quot;insufficient_user_quota&quot;
}
}
// 对话信息没传或者传null
{
&quot;error&quot;: {
&quot;message&quot;: &quot;Unsupported messages.&quot;,
&quot;type&quot;: &quot;talk_api_error&quot;,
&quot;param&quot;: null,
&quot;code&quot;: &quot;invalid_messages&quot;
}
}
// 服务内部错误
{
&quot;error&quot;: {
&quot;message&quot;: &quot;Internal server error.&quot;,
&quot;type&quot;: &quot;talk_api_error&quot;,
&quot;param&quot;: null,
&quot;code&quot;: &quot;internal_error&quot;
}
}</code></pre>
<h5>返回参数说明</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">id</td>
<td style="text-align: left;">string</td>
<td>业务方自行生成的id</td>
</tr>
<tr>
<td style="text-align: left;">object</td>
<td style="text-align: left;">string</td>
<td>类名</td>
</tr>
<tr>
<td style="text-align: left;">created</td>
<td style="text-align: left;">long</td>
<td>请求时间</td>
</tr>
<tr>
<td style="text-align: left;">model</td>
<td style="text-align: left;">string</td>
<td>模型</td>
</tr>
<tr>
<td style="text-align: left;">usage</td>
<td style="text-align: left;">object</td>
<td>官方本次对话统计的token信息,只有非流式才会返回</td>
</tr>
<tr>
<td style="text-align: left;">choices</td>
<td style="text-align: left;">array</td>
<td>机器人回复信息</td>
</tr>
<tr>
<td style="text-align: left;">system_fingerprint</td>
<td style="text-align: left;">string</td>
<td>系统指纹信息</td>
</tr>
</tbody>
</table>
<p>usage字段说明</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">prompt_tokens</td>
<td style="text-align: left;">int</td>
<td>用户输入问题的token数量</td>
</tr>
<tr>
<td style="text-align: left;">completion_tokens</td>
<td style="text-align: left;">int</td>
<td>机器人回复的token数量</td>
</tr>
<tr>
<td style="text-align: left;">total_tokens</td>
<td style="text-align: left;">int</td>
<td>总token数量</td>
</tr>
</tbody>
</table>
<p>choices字段说明</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">index</td>
<td style="text-align: left;">int</td>
<td>索引</td>
</tr>
<tr>
<td style="text-align: left;">delta</td>
<td style="text-align: left;">object</td>
<td>回复内容</td>
</tr>
</tbody>
</table>
<p>delta字段说明</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">content</td>
<td style="text-align: left;">string</td>
<td>具体内容</td>
</tr>
</tbody>
</table>
<h5>备注</h5>
<ul>
<li>暂无</li>
</ul>