大模型介绍文档
下述模型都是部署在机房。
| 模型 | 参数量 | 是否支持多轮 | 模型说明 | |
|---|---|---|---|---|
| chatglm130b | 130B | 目前单轮,后续会支持多轮 | 采购的chatglm模型,私有化部署 | |
| chatglm | 6B | 单轮 | 基于开源模型部署 | |
| bloom176b-base-meituan | 176B | 单轮 | 平台NLP中心基座模型(4月7日交付),基于Bloom176B模型采用中文语料进行预训练。 | |
| bloom7b1-summary | 7.1B | 单轮 | 基于Bloomz7B模型,采用业务场景数据进行SFT,适合工单摘要场景 | |
| bloom7b1-chatbot | 7.1B | 多轮 | 基于Bloomz7B模型,采用非业务场景数据进行SFT,适合闲聊场景 | |
| bloom7b1-recommender | 7.1B | 多轮 | 基于Bloomz7B模型,采用业务场景数据进行SFT,适合话术推荐场景 |
4.1.4 请求参数说明
请求字段与OpenAI官方文档保持一致
| 字段 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| model | String | 必须 | 要使用的模型的 ID。目前只支持gpt-3.5-turbo |
| messages | List``` | ||
| { "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指定)映射到-100到100的相关偏差值。在采样之前,模型生成的logits将被添加该偏差值。具体效果会因不同模型而异,但-1到1之间的值应该会减少或增加选择的可能性;像-100或100这样的值应该会导致该相关标记的禁用或独占选择。 | 否 | |
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格式,基础的文字生成任务无需关心,但是代码生成任务需要