提供流式推理处理功能。
操作类型:POST
URL:https://{ip}:{port}/generate_stream
参数 |
是否必选 |
说明 |
取值要求 |
---|---|---|---|
inputs |
必选 |
推理请求内容。单模态文本模型为string类型,多模态模型为list类型。 |
|
type |
可选 |
推理请求内容类型。 |
单个请求中image_url、video_url、audio_url数量总和<=20个。 |
text |
可选 |
推理请求内容为文本。 |
非空,支持中英文。 |
image_url |
可选 |
推理请求内容为图片。 |
支持服务器本地路径的图片传入,图片类型支持jpg、png、jpeg和base64编码的jpg图片,支持URL图片传入,支持HTTP和HTTPS协议。当前支持传入的图片最大为20MB。 |
video_url |
可选 |
推理请求内容为视频。 |
支持服务器本地路径的视频传入,视频类型支持MP4、AVI、WMV,支持URL视频传入,支持HTTP和HTTPS协议。当前支持传入的视频最大512MB。 |
audio_url |
可选 |
推理请求内容为音频。 |
支持服务器本地路径的音频传入,音频类型支持MP3、WAV、FLAC,支持URL音频传入,支持HTTP和HTTPS协议。当前支持传入的音频最大20MB。 |
parameters |
可选 |
模型推理后处理相关参数。 |
- |
decoder_input_details |
可选 |
是否返回推理请求文本的token id。 |
bool类型,默认值false。 对于流式接口,该参数只能为false。 |
details |
可选 |
是否返回推理详细输出结果。根据TGI 0.9.4接口行为,“details”=true,即返回所有的details信息。 |
bool类型参数,默认值false。 |
do_sample |
可选 |
是否做sampling。 |
bool类型,不传递该参数时,将由其他后处理参数决定是否做sampling。
|
max_new_tokens |
可选 |
允许推理生成的最大token个数。实际产生的token数量同时受到配置文件maxIterTimes参数影响,推理token个数小于或等于Min(maxIterTimes, max_new_tokens)。 |
int类型,取值范围(0,2147483647],默认值20。 |
repetition_penalty |
可选 |
重复惩罚用于减少在文本生成过程中出现重复片段的概率。它对之前已经生成的文本进行惩罚,使得模型更倾向于选择新的、不重复的内容。 |
float类型,大于0.0,默认值1.0。
建议最大值取2.0,同时视模型而定。 |
return_full_text |
可选 |
是否将推理请求文本(inputs参数)添加到推理结果前面。 |
bool类型,默认值false。
|
seed |
可选 |
用于指定推理过程的随机种子,相同的seed值可以确保推理结果的可重现性,不同的seed值会提升推理结果的随机性。 |
uint_64类型,取值范围(0, 18446744073709551615],不传递该参数,系统会产生一个随机seed值。 当seed取到临近最大值时,会有WARNING,但并不会影响使用。若想去掉WARNING,可以减小seed取值。 |
temperature |
可选 |
控制生成的随机性,较高的值会产生更多样化的输出。 |
float类型,大于1e-6,默认值1.0。 取值越大,结果的随机性越大。推荐使用大于或等于0.001的值,小于0.001可能会导致文本质量不佳。 建议最大值取2.0,同时视模型而定。 |
top_k |
可选 |
控制模型生成过程中考虑的词汇范围,只从概率最高的k个候选词中选择。 |
uint32_t类型,取值范围(0, 2147483647],字段未设置时,默认值由后端模型确定,详情请参见说明。取值大于或等于vocabSize时,默认值为vocabSize。 vocabSize是从modelWeightPath路径下的config.json或者padded_vocab_size的文件中读取的vocab_size值,若不存在则vocabSize取默认值0。建议用户在config.json文件中添加vocab_size或者padded_vocab_size参数,否则可能导致推理失败。 |
top_p |
可选 |
控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。该参数也可以控制生成结果的多样性,它基于累积概率选择候选词,直到累计概率超过给定的阈值为止。 |
float类型,取值范围(1e-6, 1.0),字段未设置时,默认值使用1.0来表示不进行该项处理,但是不可主动设置为1.0。 |
truncate |
可选 |
输入文本做tokenizer之后,将token数量截断到该长度。读取截断后的n个token。若该字段值大于或等于token数量,则该字段无效。 |
uint32_t类型,取值范围(0, 2147483647],字段未设置时,默认使用0来表示不进行该项处理,但是不可主动设置为0。 |
typical_p |
可选 |
解码输出概率分布指数。 当前后处理不支持。 |
float类型,取值范围(0.0, 1.0],默认值1.0。 |
watermark |
可选 |
是否带模型水印。 当前后处理不支持。 |
bool类型,默认值false。
|
stop |
可选 |
停止推理的文本。输出结果默认不包含停止词列表文本。 |
List[string]类型或者string类型,默认值null。
PD分离场景暂不支持该参数。 |
adapter_id |
可选 |
指定推理时使用的Lora权重,即loraId。 |
string类型,默认值"None"。由字母、数字、点、中划线、下划线和正斜杠组成,字符串长度小于或等于256。 PD分离场景暂不支持该参数。 |
请求样例:
POST https://{ip}:{port}/generate_stream
请求消息体:
{ "inputs": "My name is Olivier and I", "parameters": { "decoder_input_details": false, "details": true, "do_sample": true, "max_new_tokens": 20, "repetition_penalty": 1.03, "return_full_text": false, "seed": null, "temperature": 0.5, "top_k": 10, "top_p": 0.95, "truncate": null, "typical_p": 0.5, "watermark": false, "stop": null, "adapter_id": "None" } }
"image_url"参数的取值请根据实际情况进行修改。
{ "inputs": [ {"type": "text", "text": "My name is Olivier and I"}, { "type": "image_url", "image_url": "/xxxx/test.png" } ], "parameters": { "decoder_input_details": false, "details": true, "do_sample": true, "max_new_tokens": 20, "repetition_penalty": 1.03, "return_full_text": false, "seed": null, "temperature": 0.5, "top_k": 10, "top_p": 0.95, "truncate": null, "typical_p": 0.5, "watermark": false, "stop": null, "adapter_id": "None" } }
响应样例:
data: {"token":{"id":13,"text":"\n","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":26626,"text":"Jan","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":300,"text":"et","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":3732,"text":" makes","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":395,"text":" $","logprob":null,"special":null},"generated_text":null,"details":null} …… data: {"token":{"id":395,"text":" $","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":29896,"text":"1","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":29896,"text":"1","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":29947,"text":"8","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":29889,"text":".","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":2,"text":"","logprob":null,"special":null},"generated_text":"\nJanet makes $104 a day at the farmers' market.\nThe number of eggs that Janet sells at the farmers' market each day is 16 - 3 - 4 = 7.\nShe makes $2 for each egg that she sells.\nThe total amount that she makes is $2 * 7 = $14.\nThe total amount that she makes is $14 + $104 = $118.\nThe total amount that she makes is $118.","details":{"prompt_tokens":74,"finish_reason":"eos_token","generated_tokens":116,"seed":8756727004129248931}}
data: {"token":{"id":198,"text":"\n","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":9707,"text":"\nHello","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":0,"text":"\nHello!","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":2585,"text":"\nHello! How","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":646,"text":"\nHello! How can","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":358,"text":"\nHello! How can I","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":7789,"text":"\nHello! How can I assist","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":498,"text":"\nHello! How can I assist you","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":3351,"text":"\nHello! How can I assist you today","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":30,"text":"\nHello! How can I assist you today?","logprob":null,"special":null},"generated_text":null,"details":null} data: {"token":{"id":151645,"text":"\nHello! How can I assist you today?","logprob":null,"special":null},"generated_text":"\nHello! How can I assist you today?","details":{"prompt_tokens":1,"finish_reason":"eos_token","generated_tokens":11,"seed":2296576927}}
返回值 |
类型 |
说明 |
---|---|---|
data |
object |
一次推理返回的结果。 |
token |
object |
每一次推理的token。 |
id |
int |
token id。 |
text |
string |
token对应文本。 |
logprob |
概率对数 |
当前不支持,默认返回null。 |
special |
bool |
表明该token是否是special,如果是“special”=true,该token在做连接的时候可以被忽略。当前不支持,默认返回null。 |
generated_text |
string |
推理文本返回结果,只在最后一次推理结果才返回。 |
details |
object |
推理details结果,只在最后一次推理结果返回,并且请求参数“details”=true才返回details结果。 |
prompt_tokens |
int |
用户输入的prompt文本对应的token长度。 |
finish_reason |
string |
结束原因,只在最后一次推理结果返回。
|
generated_tokens |
int |
推理结果token数量。PD场景下统计P和D推理结果的总token数量。当一个请求的推理长度上限取maxIterTimes的值时,D节点响应中generated_tokens数量为maxIterTimes+1,即增加了P推理结果的首token数量。 |
seed |
int |
返回推理请求的seed值,如果请求参数没有指定seed参数,则返回系统随机生成的seed值。 |