Lindorm AI引擎支持使用模型推理RESTful API接口调用状态为READY
的模型,以执行推理、生成等任务。
前提条件
已创建或导入模型,且模型状态为READY
。如何查看模型状态,请参见查看模型详细信息。
API接口
POST v1/ai/models/${MODEL_NAME}/infer
请求参数说明
请求参数 | 类型 | 说明 |
input | 无固定类型 | 模型推理输入,不同模型可以有不同的输入格式,具体请参见模型推理输入(input)。 |
params | JSON | 模型推理参数,不同模型可以有不同的推理参数,具体请参见模型推理参数(params)。 |
模型推理输入(input)
不同task的输入格式不同,具体如下:
FEATURE_EXTRACTION(Text Embedding) :输入格式为字符串或字符串数组。
FEATURE_EXTRACTION(Multimodal Embedding):支持以下两种输入格式。
JSON对象数组
每个JSON对象都必须包含如下参数:
参数名
类型
说明
image
字符串
模型推理输入图片的Base64编码或OSS URI字符串。
text
字符串
模型推理输入文本字符串。
JSON对象
参数名
类型
说明
images
字符串数组
模型推理输入图片的Base64编码或OSS URI字符串。
texts
字符串数组
模型推理输入文本字符串。
纯图片或者纯文本推理的场景可以使用该输入格式发送请求。
QUESTION_ANSWERING:输入格式为字符串。
SEMANTIC_SIMILARITY:输入格式为JSON对象,包含以下参数:
参数名
类型
说明
query
字符串
需要比较相似度(Rerank)的查询。
chunks
字符串数组
需要比较相似度的文档切片(Chunk)列表。
模型推理参数(params)
FEATURE_EXTRACTION
参数名 | 类型 | 说明 |
normalize | BOOLEAN | 是否对向量进行归一化,默认为 |
batchSize | INT | 推理时的batch大小,降低该值可以减少推理显存消耗,默认值为 |
QUESTION_ANSWERING
参数名 | 类型 | 说明 |
max_length | INT | 指定生成文本的最大长度。 |
num_beams | INT | 设置束搜索(Beam Search)的分支数量。num_beams值越大,生成的文本质量越高,同时计算成本也会更高。 |
do_sample | BOOLEAN | 是否使用采样生成文本。 |
top_p | FLOAT | 指定核采样(Nucleus Sampling)的概率阈值,只从累积概率达到top_p的词汇中选择下一个词。 |
temperature | FLOAT | 指定采样的温度值,较高的温度值会使生成的文本更加随机和多样化,较低的温度值会使生成的文本更加确定和集中。 |
SEMANTIC_SIMILARITY
参数名 | 类型 | 说明 |
topK | INT | Rerank时返回最相似的数据条数。取值范围为[1, 10000],默认值为输入的sentences数组长度。 |
batchSize | INT | 推理时的batch大小,降低该值可以减少推理显存消耗,默认值为 |
应答参数说明
不同task的模型可以有不同的应答参数(data
字段内部的参数),具体如下:
FEATURE_EXTRACTION
目前无参数,直接是向量。
QUESTION_ANSWERING
参数名 | 类型 | 说明 |
data.output | 字符串 | 与outputs参数二选一。创建模型时指定stream_mode为 |
data.outputs | 字符串数组 | 与output参数二选一。创建模型时指定stream_mode为 |
SEMANTIC_SIMILARITY
参数名 | 类型 | 说明 |
data | JSON数组 | Rerank的结果数组。 |
data.chunk | 字符串 | Rerank重排序后的文档切片(Chunk)。 |
data.score | 浮点型 | Chunk对应的相似度。 |
data.index | 整型 | Chunk在原始输入中的索引值。 |
应答编码格式
您可以通过在HTTP请求中加入Content-Encoding请求头来实现应答压缩。默认情况下,所有应答不进行数据压缩。目前仅支持gzip压缩。
请求使用gzip编码压缩:
POST <URI> HTTP/1.1
Content-Encoding: gzip
Content-Length: 88
"request contents here"
应答:
HTTP/11 200 OK
Content-encoding: gzip
Date: Tue, 24 Sep 2024 09:01:12 GMT
Content-type: application/json
Content-length: 39342
"response contents here"
示例
示例一:特征提取
文本特征提取
字符串单条请求:
POST v1/ai/models/bge_m3_model/infer HTTP/1.1 Content-Type: application/json { "input": "我爱天安门" }
应答:
HTTP/1.1 200 OK Date: Tue, 28 Nov 2023 03:18:55 GMT Content-type: application/json Content-length: 419 { "code": 0, "msg": "SUCCESS", "data": [0.027204733341932297,0.004229982383549213, ...], "success": true, "request_id":"..." }
字符串批量请求:
POST v1/ai/models/bge_m3_model/infer HTTP/1.1 Content-Type: application/json { "input": ["我爱天安门", "test text"] }
应答:
HTTP/1.1 200 OK Date: Tue, 28 Nov 2023 03:18:55 GMT Content-type: application/json Content-length: 419 { "code": 0, "msg": "SUCCESS", "data": [[0.027204733341932297,0.004229982383549213, ...], [-0.05367295444011688,0.022600287571549416, ...]], "success": true }
示例二:QA问答
请求:
POST v1/ai/models/qa_model/infer HTTP/1.1
Content-Type: application/json
{
"input": "写一篇200字左右的作文"
}
应答:
HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:18:55 GMT
Transfer-encoding: chunked
Content-type: application/json
{"code":0,"msg":"SUCCESS","success":true,"data":{"outputs":["","人生就像","一场旅程,充满了","未知和挑战。","在这旅程中,","我们会遇到各种人和","事情,有些让我们","感到兴奋和好奇",",有些则让我们","感到沮丧和失望","。但无论我们","遇到怎样的情况,","都要保持积极乐观的态度",",相信自己,相信","未来,继续前行。","\n\n人生旅程","中,我们会遇到","各种人和事情,","有些人让我们感到兴奋","和好奇,有些人","则让我们感到沮丧","和失望。但","无论我们遇到怎样","的情况,都要保持","积极乐观的态度,相信自己",",相信未来,","继续前行。","\n\n有时候,我们可能会","感到迷茫和不知所措",",这时候我们需要给自己","一些时间和空间,思考","自己想要的,以及如何实现","自己的目标。同时,","我们也需要与他人交流",",听取他们的意见","和想法,从","中获得启发和帮助","。\n\n在人生的","旅程中,我们需要","不断地学习和成长,","才能更好地应对未来的挑战","。无论我们面临","怎样的困难和挑战,","都要保持积极乐观的态度",",相信自己,相信","未来,继续前行。","\n\n人生旅程","中,我们需要不断地","学习和成长,才能更好地","应对未来的挑战。","无论我们面临怎样的","困难和挑战,都要","保持积极乐观的态度,"]}}%
示例三:语义相似度
请求:
POST v1/ai/models/bge_rerank_model/infer HTTP/1.1
Content-Type: application/json
{
"input": {"query": "一只狗", "chunks": ["一个滑滑梯", "一只黄色小狗"]}
}
应答:
HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 03:18:55 GMT
Content-type: application/json
Content-length: 419
{
"code" : 0,
"msg" : "SUCCESS",
"data" : [ {
"chunk" : "一直黄色小狗",
"score" : "0.6785464882850647",
"index" : 1
}, {
"chunk" : "一个滑滑梯",
"score" : "0.5992767214775085",
"index" : 0
}],
"success" : true
}