模型推理

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

是否对向量进行归一化,默认为true

batchSize

INT

推理时的batch大小,降低该值可以减少推理显存消耗,默认值为32

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大小,降低该值可以减少推理显存消耗,默认值为32

应答参数说明

不同task的模型可以有不同的应答参数(data字段内部的参数),具体如下:

FEATURE_EXTRACTION

目前无参数,直接是向量。

QUESTION_ANSWERING

参数名

类型

说明

data.output

字符串

outputs参数二选一。创建模型时指定stream_modeoff时,该参数表示LLM模型的回答。

data.outputs

字符串数组

output参数二选一。创建模型时指定stream_modeon时,该参数表示LLM模型的流式输出回答,会在outputs数组中以多个字符串元素出现。

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
}