参考#

OpenAI API#

您可以下载完整的 API 规范

警告

每个模型都有最大令牌长度。 模型 部分列出了受支持模型的最大令牌长度。 请参阅 参考truncate 字段,了解如何处理超过最大令牌长度的序列。

警告

NV-Embed-QA 和 E5 模型在 passagequery 模式下运行,因此需要 input_type 参数。 passage 在索引期间生成嵌入时使用。 query 在查询期间生成嵌入时使用。 使用正确的 input_type 非常重要。 否则会导致检索准确率大幅下降。

由于 OpenAI API 不接受 input_type 作为参数,因此可以像 NV-Embed-QA-query 一样在 model 参数中添加 -query-passage 后缀,并且完全不使用 input_type 字段以符合 OpenAI API 标准。

例如,以下两个请求是相同的。

使用 input_type 参数

curl -X "POST" \
  "http://${HOSTNAME}:${SERVICE_PORT}/v1/embeddings" \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "input": ["What is the population of Pittsburgh?"],
    "model": "nvidia/nv-embedqa-e5-v5",
    "input_type": "query"
}'

不使用 input_type 参数,而是在模型名称中使用 -query (或 -passage)

curl -X "POST" \
  "http://${HOSTNAME}:${SERVICE_PORT}/v1/embeddings" \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "input": ["What is the population of Pittsburgh?"],
    "model": "nvidia/nv-embedqa-e5-v5-query"
}'

请注意,GTE 和 GTR 模型不接受 input_type 参数,因为 -query-passage 输入类型都以相同的方式处理。

动态嵌入大小#

为了降低返回的嵌入的存储成本,一些模型通过 Matryoshka Representation Learning 支持动态嵌入大小。 为了生成文本的低维嵌入表示,您可以使用可选的 dimensions API 参数。 请参阅 支持矩阵 获取完整支持的模型列表。

动态批处理#

动态批处理是一项功能,允许 NIM 容器中底层的 Triton 进程将一个或多个请求分组到一个批次中,这可以在某些情况下提高吞吐量,例如在服务许多小负载请求时。 此功能默认启用,可以通过设置 NIM_TRITON_DYNAMIC_BATCHING_MAX_QUEUE_DELAY_MICROSECONDS 环境变量进行调整。 默认值为 100us(微秒)。

有关动态批处理的更多信息,请参阅 Triton 用户指南

API 示例#

使用本节中的示例帮助您开始使用 API。

完整的 API 规范可以在 Open AI 规范 中找到

列出模型#

cURL 请求

使用以下命令列出可用的模型。

curl "http://${HOSTNAME}:${SERVICE_PORT}/v1/models" \
-H 'Accept: application/json'

响应

{
  "object": "list",
  "data": [
    {
      "id": "nvidia/nv-embedqa-e5-v5",
      "created": 0,
      "object": "model",
      "owned_by": "organization-owner"
    }
  ]
}

生成嵌入#

cURL 请求

curl -X "POST" \
  "http://${HOSTNAME}:${SERVICE_PORT}/v1/embeddings" \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "input": ["Hello world"],
    "model": "nvidia/nv-embedqa-e5-v5",
    "input_type": "query"
}'

响应

{
  "object": "list",
  "data": [
    {
      "index": 0,
      "embedding": [
        0.0010356903076171875, -0.017669677734375,
        // ...
        -0.0178985595703125
      ],
      "object": "embedding"
    }
  ],
  "model": "nvidia/nv-embedqa-e5-v5",
  "usage": {
    "prompt_tokens": 0,
    "total_tokens": 0
  }
}

对于不需要 input_type 参数的模型,例如 GTE 或 GTR,请使用以下示例 API 调用。 cURL 请求

curl -X "POST" \
  "http://${HOSTNAME}:${SERVICE_PORT}/v1/embeddings" \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "input": ["Hello world"],
    "model": "nvidia/nv-embedqa-e5-v5",
}'

响应

{
  "object": "list",
  "data": [
    {
      "index": 0,
      "embedding": [
        0.0010356903076171875, -0.017669677734375,
        // ...
        -0.0178985595703125
      ],
      "object": "embedding"
    }
  ],
  "model": "nvidia/nv-embedqa-e5-v5",
  "usage": {
    "prompt_tokens": 0,
    "total_tokens": 0
  }
}

健康检查#

cURL 请求

使用以下命令查询健康端点。

curl "http://${HOSTNAME}:${SERVICE_PORT}/v1/health/ready" \
-H 'Accept: application/json'
curl "http://${HOSTNAME}:${SERVICE_PORT}/v1/health/live" \
-H 'Accept: application/json'

响应

{
  "object": "health-response",
  "message": "Service is ready."
}
{
  "object": "health-response",
  "message": "Service is live."
}

参考#