chatGpt

781 阅读19分钟

大模型介绍文档

下述模型都是部署在机房

模型参数量是否支持多轮模型说明
chatglm130b130B目前单轮,后续会支持多轮采购的chatglm模型,私有化部署
chatglm6B单轮基于开源模型部署
bloom176b-base-meituan176B单轮平台NLP中心基座模型(4月7日交付),基于Bloom176B模型采用中文语料进行预训练。
bloom7b1-summary7.1B单轮基于Bloomz7B模型,采用业务场景数据进行SFT,适合工单摘要场景
bloom7b1-chatbot7.1B多轮基于Bloomz7B模型,采用非业务场景数据进行SFT,适合闲聊场景
bloom7b1-recommender7.1B多轮基于Bloomz7B模型,采用业务场景数据进行SFT,适合话术推荐场景

4.1.4 请求参数说明

请求字段与OpenAI官方文档保持一致

字段类型是否必须说明
modelString必须要使用的模型的 ID。目前只支持​gpt-3.5-turbo
messagesList```
{ "role": "角色,取值包括user、assistant、system", "content": "输入的内容" }
| temperature       | Double                                                                                       | 可选 默认为 1     | 使用什么采样 temperature,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。我们通常建议改变这个或 top_p 但不是两者都改变​​。                                                                                                                                                                                                |
| top_p             | Double                                                                                       | 可选 默认为 1     | 一种替代 temperature 采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。我们通常建议更改此值或 temperature,但不要同时更改两者。                                                                                                                                                                                  |
| n                 | Integer                                                                                      | 可选 默认为 1     | 为每个输入消息生成多少个聊天完成选项。                                                                                                                                                                                                                                                                                     |
| stream            | Boolean                                                                                      | 可选 默认为 false | 如果设置,将发送部分消息增量,就像在 ChatGPT 中一样。令牌将在可用时作为纯数据服务器发送事件发送,流由数据终止:[DONE] 消息。                                                                                                                                                                                                                                 |
| stop              | List<String>                                                                                | 可选 默认为 null  | API 将停止生成更多令牌的最多 4 个序列。                                                                                                                                                                                                                                                                                 |
| max_tokens        | Integer                                                                                      | 可选 默认为 1024  | 聊天完成时生成的最大令牌数。输入标记和生成标记的总长度受模型上下文长度的限制。⚠️注意:max_tokens会用于限流统计,请根据实际请求设置合理的max_tokens,设置较大的max_tokens但实际消耗的较低可能会导致AppId被提前限流。                                                                                                                                                                            |
| presence_penalty  | Double                                                                                       | 可选 默认为 0     | -2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。                                                                                                                                                                                                                                             |
| frequency_penalty | Double                                                                                       | 可选 默认为 0     | -2.0 和 2.0 之间的数字。正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。                                                                                                                                                                                                                                            |
| logit_bias        | Map<String, Integer>                                                                        | 可选 默认为 null  | 修改指定标记出现在完成中的可能性。接受一个 json 对象,该对象将标记(由标记器中的标记 ID 指定)映射到从 -100 到 100 的关联偏差值。从数学上讲,偏差会在采样之前添加到模型生成的 logits 中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关令牌的禁止或独占选择。                                                                                                                    |

### 4.1.5 返回参数说明

| 字段      | 类型            | 是否必须 | 说明                                                                   |
| ------- | ------------- | ---- | -------------------------------------------------------------------- |
| choices | List<Choice> | 必须   | 模型生成结果,默认为1个,具体数量由请求参数的n取值决定。流式和段式的choice略有不同。流式仅包含当前包的内容            |
| content | String        | 可选   | 流式请求才会返回的字段,内容为流式响应中间结果拼接。                                           |
| id      | String        | 必须   | 本次请求的id                                                              |
| created | Long          | 必须   | 请求时间戳                                                                |
| model   | String        | 必须   | 本次生成实际使用的模型                                                          |
| object  | String        | 必须   | 本次请求返回使用的对象                                                          |
| usage   | Usage         | 必须   | 本次生成统计的token详情,completion_tokens为生成内容的token数,prompt_tokens为输入的token数 |

-   段式响应(Content-Type: application/json)

{ "choices": [ { "finish_reason": "stop", "index": 0, "message": { "content": "1. 爱因斯坦 (Albert Einstein)\n2. 达尔文(Charles Darwin)", "role": "assistant" } } ], "created": 1683172413, "id": "chatcmpl-7CKK5VVVjApleUUxQOJuyACqHdFVx", "model": "gpt-35-turbo", "object": "chat.completion", "usage": { "completion_tokens": 24, "prompt_tokens": 19, "total_tokens": 43 } }


-   流式响应(Content-Type: text/event-stream)

流式响应在OpenAI原始返回的基础上加入了中间结果"content"和token统计"usage"参数。流的尾包数据固定为:[DONE]

data: { "choices": [ { "delta": { "content": " 。" }, "finish_reason": "stop", "index": 0 } ], "content": "牛顿、爱因斯坦。", "created": 1683172426, "id": "chatcmpl-7CKKILDBeuB9ch0murXSVI4ghYAr5", "model": "gpt-35-turbo", "object": "chat.completion.chunk", "usage": { "completion_tokens": 6, "prompt_tokens": 18, "total_tokens": 24 } }

data: [DONE]


### 4.1.6 异常处理

在请求失败时,返回的HTTP状态码将不是200。调用方可以根据返回的body信息以及HTTP状态码判断本次失败的原因。下面是状态码与错误信息的对照表,参考OpenAI的[Api-Errors](https://platform.openai.com/docs/guides/error-codes/api-errors)

| HTTP 状态码 | 错误信息                  | 解决方案                                       |
| -------- | --------------------- | ------------------------------------------ |
| 200      | OK                    | 请求成功。                                      |
| 400      | Bad Request           | 请求体存在问题,例如不是json,缺少必须的字段等,检查请求格式。          |
| 401      | Unauthorized          | 鉴权失败,检查AppId是否正确。                          |
| 403      | Forbidden             | 请求被禁止,检查AppId是否被封禁、是否还有额度。                 |
| 408      | Request Timeout       | 供应商服务请求超时,建议重试。                            |
| 429      | Too Many Requests     | 请求次数较多,本次请求被限流。检查请求TPM和RPM是否过高,是否需要申请更高额度。 |
| 500      | Internal Server Error | 服务内部异常,可根据响应body判断原因。如有疑问可记录TraceId联系我们排查  |

## 4.2 prompt模板发起调用(推荐使用)

### 4.2.1 接口介绍

由Friday平台封装而来,业务方可以在Prompt kit([prompt kit使用指南](https://km.sankuai.com/collabpage/1619918445))中配置Prompt模板来发起调用。

接口名为com.sankuai.gpt.PromptKitService.Iface.apply

### 4.2.2 请求参数说明

| 名称                   | 类型                      | 描述                                 | 是否必须                 | 备注                                                                                                                       |
| -------------------- | ----------------------- | ---------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| appId                | string                  | 业务方标识                              | 是                    |                                                                                                                          |
| usePromptId          | boolean                 | 是否使用已经保存的prompt进行调用                | 是                    | 一般场景都是true,除了少量的调试场景                                                                                                     |
| promptId             | String                  | 平台上已经保存的prompt模板id                 | usePromptId为true时必填  | 平台保存的PromptId![image.jpeg]() |
| prompt               | string                  | usePromptId为false时,可手动指定prompt模板内容 | usePromptId为false时必填 |                                                                                                                          |
| customFieldValueList | List<CustomFieldValue> | Prompt模板的填充内容                      | 是                    |                                                                                                                          |
| config               | PromptApplyConfig       | 用于配置temperature参数                  | 否                    | maven版本 0.1.22起提供                                                                                                        |

**CustomFieldValue**

| 名称    | 类型     | 描述 | 是否必须 | 备注 |
| ----- | ------ | -- | ---- | -- |
| name  | string |    | 是    |    |
| value | string |    | 是    |    |

### 4.2.3 返回参数说明

| 名称          | 类型                     | 描述   | 是否必须 | 备注                   |
| ----------- | ---------------------- | ---- | ---- | -------------------- |
| status      | ResCode                | 状态码  | 是    | 见ResCode部分(HTTP为int) |
| message     | string                 | 返回信息 | 否    |                      |
| data        | PromptApplyWebResponse | 响应数据 | 否    |                      |
| extendinfos | map<string, string>   | 扩展信息 | 否    |                      |

**PromptApplyWebResponse**
    ### 4.2.4 调用方式

CustomFieldValue value = new CustomFieldValue(); value.setName("参数1"); // 页面上的参数名 value.setValue("参数值1"); List list = ImmutableList.of(value);

String promptId = "页面获取的prompt id"; PromptApplyResponse paResp = promptKitService.apply("自己的appId", true, promptId, null, list) paResp.getStatus(); paResp.getMessage();

curl -X POST aigc.sankuai.com/v1/prompt/a…
-H 'Content-Type: application/json'
-d '{ "appId": "xxxx", "usePromptId": true, "promptId": "1", "customFieldValueList": [ { "name": "目标语言", "value": "英语" }, { "name": "待翻译内容", "value": "你好,我是小美智能助理" } ] }'

{ "status": 0, "message": "成功", "data": { "finalPrompt": "请将以下内容翻译成 英语:\n你好,我是小美智能助理", "result": "Hello, I am Xiao Mei, an intelligent assistant." } }


对于有流式请求的应用类型建议使用HTTP接口。

## 4.3 Tiktoken计算

### 4.3.1 接口介绍

接口地址:<https://aigc.sankuai.com/v1/openai/tiktoken>

本接口仅提供HTTP调用,基于OpenAI tiktoken算法封装而成,方便业务方来估算实际的token消耗数;这个接口是内部实现,无需计费。

如果对于发送前长度没有校验需求,建议使用接口返回的Usage参数。

### 4.3.2 请求参数说明

| 名称     | 类型     | 描述                                                                     | 是否必须 | 备注 |
| ------ | ------ | ---------------------------------------------------------------------- | ---- | -- |
| model  | String | 模型类型                                                                   | 是    |    |
| prompt | String | 输入的文本,对于embedding、completion接口就是入参;对于chat类型,需要转化为实际的ChatML类型的输入才能计算准确。 | 是    |    |

### 4.3.3 返回参数说明

| 名称   | 类型                                                                                                  | 描述                         | 是否必须 | 备注 |
| ---- | --------------------------------------------------------------------------------------------------- | -------------------------- | ---- | -- |
| code | int                                                                                                 | 返回状态码                      | 是    |    |
| msg  | String                                                                                              | 如果有明确错误,message中会给予错误信息和提示 | 否    |    |
| data | Object```
{ 	  "model": "请求中的model""prompt": "请求中的prompt",     "token_len": "计算的token数" }
``` | 计算结果                       | 否    |    |

## 4.3.4 调用样例

http aigc.sankuai.com/v1/openai/t… model=gpt-3.5-turbo prompt="123" -v POST /v1/openai/tiktoken HTTP/1.1 Accept: application/json, /;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 43 Content-Type: application/json Host: aigc.sankuai.com User-Agent: HTTPie/3.2.1

{ "model": "gpt-3.5-turbo", "prompt": "123" }

HTTP/1.1 200 OK Connection: keep-alive Content-Encoding: gzip Content-Type: application/json Date: Mon, 15 May 2023 06:03:02 GMT M-TraceId: 8376036423648065277 Server: openresty Transfer-Encoding: chunked Vary: Accept-Encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers

{ "code": 0, "data": { "model": "gpt-3.5-turbo", "prompt": "123", "token_len": 1 }, "msg": "success" }


## 4.4 embedding 模型

接口地址:<https://aigc.sankuai.com/v1/openai/native/embeddings>

把输入的内容转换为向量。

与OpenAI embedding接口行为略有区别,但是可以使用支持OpenAI的SDK发起调用,需要注意的是“不支持batch embedding”。

### 4.4.1 鉴权方式

在Header中添加参数Authorization,值为​Bearer 申请的AppId,例如“Bearer 123456”

### 4.4.2 请求参数说明

| 名称    | 类型     | 描述                                                 | 是否必须 | 备注                                                                    |
| ----- | ------ | -------------------------------------------------- | ---- | --------------------------------------------------------------------- |
| model | String | 模型类型                                               | 否    | 目前只支持text-embedding-ada-002                                           |
| input | String | 需要处理的内容,可以是string或者list<Tokens>。最大输入长度为8192个token | 是    | 单次请求只支持string或者likst<Token>,上游供应商不支持batch请求,可能使用LangChain的业务方会遇到异常报错 |

### 4.4.2 返回参数说明

通过HTTP Status判定状态,请参考4.4.4 异常处理

### 4.4.3 返回参数说明

| 名称         | 类型                   | 描述                                                                                                                              | 是否必须 | 备注 |
| ---------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ---- | -- |
| **object** | String               | 无需关注                                                                                                                            | 是    |    |
| **data**   | List<EmbeddingData> |                                                                                                                                 | 是    |    |
| **model**  | String               | 使用的模型                                                                                                                           | 是    |    |
| **usage**  | Object               | 本次请求消耗的token数```
"usage": {         "completion_tokens": 0,         "prompt_tokens": 114,         "total_tokens": 114     }
``` | 是    |    |

**EmbeddingData**

| 名称        | 类型           | 描述          | 是否必须 | 备注             |
| --------- | ------------ | ----------- | ---- | -------------- |
| object    | String       |             | 是    |                |
| embedding | list<float> | embedding结果 | 是    | list size为1536 |
| index     | int          | 多输入请求的index | 是    |                |

**返回对象举例**

{ "data": [ { "embedding": [ -0.030594232,

        ],
        "index": 0,
        "object": "embedding"
    }
],
"model": "ada",
"object": "list",
"usage": {
    "completion_tokens": 0,
    "prompt_tokens": 114,
    "total_tokens": 114
}

}


### 4.4.4 异常处理

在请求失败时,返回的HTTP状态码将不是200。调用方可以根据返回的body信息以及HTTP状态码判断本次失败的原因。下面是状态码与错误信息的对照表,参考OpenAI的[Api-Errors](https://platform.openai.com/docs/guides/error-codes/api-errors)

| HTTP 状态码 | 错误信息                  | 解决方案                                       |
| -------- | --------------------- | ------------------------------------------ |
| 200      | OK                    | 请求成功。                                      |
| 400      | Bad Request           | 请求体存在问题,例如不是json,缺少必须的字段等,检查请求格式。          |
| 401      | Unauthorized          | 鉴权失败,检查AppId是否正确。                          |
| 403      | Forbidden             | 请求被禁止,检查AppId是否被封禁、是否还有额度。                 |
| 408      | Request Timeout       | 供应商服务请求超时,建议重试。                            |
| 429      | Too Many Requests     | 请求次数较多,本次请求被限流。检查请求TPM和RPM是否过高,是否需要申请更高额度。 |
| 500      | Internal Server Error | 服务内部异常,可根据响应body判断原因。如有疑问可记录TraceId联系我们排查  |

### 4.4.5 调用范例

echo '{"input": "星巴克(国贸店) 是美国一家跨国连锁咖啡店,也是全球最大的连锁咖啡店,成立于1971年,发源地与总部位于美国华盛顿州西雅图。除咖啡之外,亦有茶饮等饮料,以及三明治、糕点等点心类食品。"}' | http aigc.sankuai.com/v1/openai/n… Authorization:{appID} -v POST /v1/openai/native/embeddings HTTP/1.1 Accept: application/json, /;q=0.5 Accept-Encoding: gzip, deflate Authorization: {appId} Connection: keep-alive Content-Length: 277 Content-Type: application/json Host: aigc.sankuai.com User-Agent: HTTPie/3.2.1

{ "input": "星巴克(国贸店) 是美国一家跨国连锁咖啡店,也是全球最大的连锁咖啡店,成立于1971年,发源地与总部位于美国华盛顿州西雅图。除咖啡之外,亦有茶饮等饮料,以及三明治、糕点等点心类食品。" }

HTTP/1.1 200 OK Connection: keep-alive Content-Encoding: gzip Content-Type: application/json Date: Mon, 15 May 2023 02:53:10 GMT M-TraceId: -4947387172302931800 Server: openresty Transfer-Encoding: chunked Vary: Accept-Encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers

{ "data": [ {

        ],
        "index": 0,
        "object": "embedding"
    }
],
"model": "ada",
"object": "list",
"usage": {
    "completion_tokens": 0,
    "prompt_tokens": 114,
    "total_tokens": 114
}

}

import openai openai.api_key = "申请的AppId" openai.api_base = "aigc.com/v1/openai/n…"

result = openai.Embedding.create( model="text-embedding-ada-002", input= "this is a test prompt for embedding" ) print(result)


# 五、历史接口归档

以下接口支持继续使用,但不再维护升级。建议使用[接口列表](https://km.sankuai.com/collabpage/1580139661#b-62d402a3302e433fb910f135050ac69f)中的接口。

历史接口归档

4.3 chatCompletion(ChatGPT接口,不再维护)

本接口不再维护,建议新接入业务方使用[Native Chat](https://km.sankuai.com/collabpage/1580139661#b-af0bb136fdad4cb49434b0c0caa973dc)接口。

4.3.1 接口介绍

本接口基于 OpenAI 提供的 "chat/completions" 进行封装。适用模型包括:​gpt-3.5-turbo(默认)。可以用于聊天场景。提供一个对话列表,接口将会返回机器人的回复。

POST请求 aigc.com/v1/chat/com… { "appId": "your appid", "messages": [ { "role": "user", "content": "谁是最伟大的科学家" } ] }

返回 { "status": 0, "message": "成功", "data": { "result": "作为一名AI语言模型,我不能评价人类科学家的伟大程度。伟大是一个主观的概念,每个人对伟大的定义可能不同。对于不同领域的人们来说,他们会有不同的看法和认为某些科学家是最伟大的。", "resultRole": "assistant", "choices": [ { "message": { "content": "作为一名AI语言模型,我不能评价人类科学家的伟大程度。伟大是一个主观的概念,每个人对伟大的定义可能不同。对于不同领域的人们来说,他们会有不同的看法和认为某些科学家是最伟大的。", "role": "assistant" }, "index": 0, "finishReason": "stop" } ] } }


4.3.2 请求参数说明

| 名称       | 类型                    | 描述                                                                | 是否必须      | 备注                                                                                           |
| -------- | --------------------- | ----------------------------------------------------------------- | --------- | -------------------------------------------------------------------------------------------- |
| appId    | string                | 业务方标识                                                             ||                                                                                              |
| messages | list<Message>        | 消息,见Message部分                                                     || ChatGPT支持的最大token数为4096(统计对话文本中的字符数)。约为3100个中文字符或3500个英文单词。注:这个是模型的输入和输出,如果输入过长模型会不返回或者返回截断。 |
| config   | ChatCompletionsConfig | 可调参数,默认填null,平台本身已进行调优,用于需要调优的用户,具体介绍见ChatCompletionsConfig参数介绍部分 | 否,默认填null | 一般情况下不需要填,不填会使用默认调优参数                                                                        |

**Message**

| 名称      | 类型     | 描述                       | 是否必须 | 备注                               |
| ------- | ------ | ------------------------ | ---- | -------------------------------- |
| role    | string | 角色,user=用户,assistant=机器人 || 可选“system”角色,参考systemInstruction |
| content | string | 角色说的文本                   ||                                  |

**ChatCompletionsConfig**

| 名称                | 类型                    | 描述                                                                                                                                                                              | 是否必须 | 备注                                                             |
| ----------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------- |
| systemInstruction | string                | system角色的提示词                                                                                                                                                                    || 平台已对systemInstruction进行调优,默认无需填写。用户需要可自行设置,将覆盖默认设置并拼接在文本消息的最前面 |
| model             | string                | 调用模型                                                                                                                                                                            || 具体可选择模型,目前仅支持gpt-3.5-turbo及gpt-3.5-turbo-0301                  |
| temperature       | double                | What sampling temperature to use, 取值为 0 and 2. 这个值越高会使生成结果更随机,比如0.8,而更低的值会让结果规定,比如0.2。与topP使用类似,但是不要一块使用。                                                                       ||                                                                |
| topP              | double                | 与temperature替换使用,原意为nucleus sampling,模型考虑具有top_p概率质量的标记的结果。0.1表示只考虑组成前10%概率质量的标记。与temperature使用类似,但是不要一块使用。                                                                     ||                                                                |
| n                 | int                   | 对于输入的内容生成多少个结果                                                                                                                                                                  ||                                                                |
| stop              | list<string>         | 最多有4个序列,API将停止生成更多Token                                                                                                                                                         |      |                                                                |
| maxTokens         | int                   | 最大模型生成的结果长度(以token计),不填写则为模型最大长度(在这个接口为4096个token)                                                                                                                              |      |                                                                |
| presencePenalty   | double                | 取值范围-2.0 ~2.0正值惩罚新标记的出现次数,以此来增强模型谈论新话题的能力。                                                                                                                                     ||                                                                |
| frequencyPenalty  | double                | 取值范围-2.0 ~2.0 正值根据文本中新标记的现有频率对其进行惩罚,从而降低模型重复相同行的几率。                                                                                                                            ||                                                                |
| logitBias         | map<string, integer> | 修改生成结果中指定Token出现的可能性。接受map<stirng, integer>,将标记(由标记器中的标记ID指定)映射到-100100的相关偏差值。在采样之前,模型生成的logits将被添加该偏差值。具体效果会因不同模型而异,但-11之间的值应该会减少或增加选择的可能性;像-100100这样的值应该会导致该相关标记的禁用或独占选择。 ||                                                                |

4.3.3 返回参数说明

| 名称          | 类型                   | 描述   | 是否必须 | 备注                   |
| ----------- | -------------------- | ---- | ---- | -------------------- |
| status      | ResCode              | 状态码  || 见ResCode部分(HTTP为int|
| message     | string               | 返回信息 ||                      |
| data        | ChatCompletionsData  | 响应数据 ||                      |
| extendinfos | map<string, string> | 扩展信息 ||                      |

**ResCode**

| 名称                         | 类型   | 描述                         | 备注                           |
| -------------------------- | ---- | -------------------------- | ---------------------------- |
| OK                         | enum | 返回的结果文本,top1结果             |                              |
| BAD_REQUEST                | enum | 请求参数非法                     |                              |
| NULL_RESPONSE              | enum | 模型返回空                      | 对应open ai返回为空                |
| MODEL_SERVICE_ERROR        | enum | 模型服务异常                     | 对应open ai模型返回为异常             |
| INSUFFICIENT_QUOTA         | enum | 账号可能欠费,请检查                 |                              |
| RATE_LIMIT                 | enum | 限流                         |                              |
| TOO_MANY_REQUEST           | enum | 模型服务调用过多                   | 对应open ai返回为too many request |
| OTHER_ERROR                | enum | 其他错误,详情见message字段          |                              |
| REQUEST_CONTENT_AUDIT_FAIL | enum | 请求内容安全校验失败,如输入内容涉黄涉暴涉政     | 编码450                        |
| MODEL_RSPONSE_AUDIT_FAIL   | enum | 模型生成内容安全校验失败,如模型生成内容涉黄涉暴涉政 | 编码451                        |

**ChatCompletionsData**

| 名称         | 类型                           | 描述                                                                                             | 是否必须 | 备注                                                                                   |
| ---------- | ---------------------------- | ---------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ |
| result     | string                       | 返回的结果文本,top1结果                                                                                 || 多轮对话,请在下一轮中传入                                                                        |
| resultRole | string                       | 机器人的角色标识,一般是"assistant"                                                                        |      | 多轮对话,请在下一轮中传入                                                                        |
| choices    | List<ChatCompletionsChoice> | 可选择的其他结果,用于用户调优结果                                                                              ||                                                                                      |
| usage      | Map<String, int>            | 本次模型调用花费的tokenUsage对象"usage": {"completion_tokens": 26,"prompt_tokens": 19,"total_tokens": 45} || total_tokens 本次总消费的token数prompt_tokes 请求内容消费的token数completion_tokens 模型生成内容消费的token数 |

**ChatCompletionsChoice**

| 名称      | 类型                       | 描述      | 是否必须 | 备注 |
| ------- | ------------------------ | ------- | ---- | -- |
| message | ChatCompletionsChoiceMsg | 具体结果列表  ||    |
| index   | int                      | 结果index ||    |

4.3.4 调用方式

@Autowired private GptService.Iface gptService;

public ChatCompletionsResponse chatCompletions() { return gptService.chatCompletions(appId, messages, null); }

curl -X POST aigc.sankuai.com/v1/chat/com…
-H 'Content-Type: application/json'
-d '{"appId":"your appId","messages":[{"role": "user", "content": "谁是最伟大的科学家"}]}'


4.4 ChatStream(ChatGPT流式生成接口)

4.4.1 接口介绍

接口地址:<https://aigc.com/v1/chat/stream>

本接口仅提供HTTP调用,基于 OpenAI 提供的 chat-completions 进行封装。采用​text/event-stream流式返回。

POST请求 aigc.com/v1/chat/str… { "appId": "your appid", "messages": [ { "role": "user", "content": "谁是最伟大的科学家" } ] }

返回样例 data:{ "choices": [ { "delta": { "content": null }, "finish_reason": "stop", "index": 0 } ], "content": "1. 牛顿牛顿是著名的英国科学家和数学家,他在17世纪的科学中占据了重要的地位。据说,当他在家乡的一个果园里仰望苹果树时,他突然发现一个苹果落下来了,并开始思考物体运动的原理。这种想法导致了他的三大法则,解释物体如何移动和反应力的概念,对今天的物理学工作产生了重大影响。\n\n2. 达尔文达尔文是19世纪英国的一位自然学家,他被认为是演化理论的创始人。他的著作“物种起源”描述了动物物种进化和人的远古进化。他在全世界进行了长时间较劲的艰苦航行和科学探索,发现了大量生物分类的证据。他的理论在当时引起了争议,但现在成为了生物学中最基本的概念之一。\n\n3. 爱因斯坦爱因斯坦可以说是20世纪最杰出的科学家之一,与牛顿一样,他的科学理论也产生了深远的影响。他的相对论理论展示了时空的相对性、质能的等价等重要概念。他的公式让科学家们更好地理解宇宙中的能量和物质的本质。他的科学思想也运用于当今的科学领域,如原子弹、核科学、引力波的研究以及天体物理学。", "created": 1680512664, "id": "chatcmpl-71AOuGrSJOrgNcDrLssb8qPdDgPzh", "lastOne": false, "model": "gpt-35-turbo", "object": "chat.completion.chunk" } (尾包) data:{ "choices": null, "content": "[DONE]", "created": 0, "id": null, "lastOne": true, "model": null, "object": null }


4.4.2 请求参数说明

| 名称       | 类型                    | 描述                                                                                                                                                                                                       | 是否必须      | 备注                                                          |
| -------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ----------------------------------------------------------- |
| appId    | String                | 业务方标识                                                                                                                                                                                                    | 是         |                                                             |
| messages | List<Message>        | 消息内容(包括上下文),格式参考接口  | 是         | ChatGPT支持的最大token数为4096(统计对话文本中的字符数)。约为2048个中文字符或3500个英文单词。 |
| config   | ChatCompletionsConfig | 模型相关配置,默认可不传。格式参考接口 | 否,默认填null | 无需传递stream=true                                             |

4.4.3 返回参数说明

返回格式为​Content-Type: text/event-stream。每一个流式消息为一个string,以data: 开头,后接一个json数据。具体格式如下:

| 名称      | 类型            | 描述                   | 是否必须 | 备注                                |
| ------- | ------------- | -------------------- | ---- | --------------------------------- |
| content | String        | 流式消息内容,包含之前所有包生成的部分  | 是    | 非尾包为流式生成的内容。如果是尾包,content=[DONE] |
| lastOne | Boolean       | 是否为尾包                | 是    | 尾包=true,其余为false                  |
| id      | String        | 生成id                 | 否    | 同一次流式请求的id相同                      |
| model   | String        | 本次生成使用的模型            | 否    |                                   |
| object  | String        | OpenAI数据结构           | 否    | 默认是chat.completion.chunk          |
| created | Long          | 创建生成时的时间戳            | 否    |                                   |
| choices | List<Choice> | 流式消息的包,OpenAI返回的原始结构 | 否    | content为每一个包的第一个Choice拼接而来        |

**Choice**

| 名称           | 类型                   | 描述               | 是否必须 | 备注                      |
| ------------ | -------------------- | ---------------- | ---- | ----------------------- |
| delta        | Map<String, String> | 生成数据,一般只有content | 是    | delta内的content只有当前包的内容。 |
| finishReason | String               | 结束标识             | 是    | 默认为空字符串,结束生成时为"stop"    |
| index        | Int                  | choice的序号        | 是    | 从0开始                    |

4.4.4 调用方式

echo '{"messages":[{"role":"user","content":"谁是最伟大的科学家"}], "appId": "申请的appId"}' | http POST -S -v


# 六、FAQ

-   为什么同样的内容发给ChatGPT和调用本接口得到的结果不一样?

模型返回的结果不是固定的,同样的内容发给ChatGPT两次也不会得到相同的结果。

-   返回内容截断

模型受限于输入/输出Token限制,对于截断的情况暂无比较好的技术能力探测,建议各位开发者在产品应用层面增加“继续生成”的功能。

-   模型返回的内容是什么格式

目前模型返回内容是Markdown格式,基础的文字生成任务无需关心,但是代码生成任务需要