你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何使用 Azure AI Foundry 部署 AI21 的 Jamba 系列模型

重要

本文中标记了“(预览版)”的项目目前为公共预览版。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

本文介绍如何使用 Azure AI Foundry 将 AI21 的 Jamba 系列模型部署为即用即付计费的无服务器 API。

Jamba 系列模型是 AI21 基于 Mamba 的生产级大型语言模型 (LLM),它利用 AI21 的混合 Mamba-Transformer 体系结构。 它是 AI21 混合结构化状态空间模型 (SSM) 转换器 Jamba 模型经过了指令优化的版本。 Jamba 系列模型专用于可靠的商业用途,可提供出色的质量和性能。

通过 AI21 的博客Microsoft Tech Community 博客,查看关于现已在 Azure AI 模型目录中正式发布 AI21 的 Jamba 系列模型的公告。

重要

预览版的模型在模型目录中的模型卡上标记为“预览版”

将 Jamba 系列模型部署为无服务器 API

模型目录中的某些模型可以部署为即用即付计费的无服务器 API,提供一种将它们作为 API 使用的方法,你无需将它们托管在自己的订阅上,但又能保持组织所需的企业安全性和合规性。 此部署选项不需要来自订阅的配额。

AI21-Jamba 1.5 大型模型部署为即用即付计费的无服务器 API,由 AI21 通过 Microsoft Azure 市场提供。 AI21 可能会更改或更新此模型的使用条款和定价。

若要开始将 Jamba 1.5 大型部署为无服务器 API,请浏览我们与 LangChainLiteLLMOpenAIAzure API 的集成。

先决条件

  • 具有有效付款方式的 Azure 订阅。 不能使用免费或试用 Azure 订阅。 如果没有 Azure 订阅,请先创建一个付费的 Azure 帐户

  • 一个 Azure AI Foundry 项目。 Jamba 系列模型的无服务器 API 模型部署产品/服务仅适用于在以下区域创建的项目:

    • 美国东部
    • 美国东部 2
    • 美国中北部
    • 美国中南部
    • 美国西部
    • 美国西部 3
    • 瑞典中部

    有关支持无服务器 API 终结点部署的每个模型可用的区域列表,请参阅无服务器 API 终结点中模型的区域可用性

  • Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure AI Foundry 门户中的操作的访问权限。 要执行本文中的步骤,必须为用户帐户分配 Azure 订阅的所有者参与者角色。 或者,可以为帐户分配具有以下权限的自定义角色:

    • 在 Azure 订阅上 - 为 Azure AI Foundry 项目订阅 Azure 市场产品/服务(每个项目针对每个产品/服务订阅一次):

      • Microsoft.MarketplaceOrdering/agreements/offers/plans/read
      • Microsoft.MarketplaceOrdering/agreements/offers/plans/sign/action
      • Microsoft.MarketplaceOrdering/offerTypes/publishers/offers/plans/agreements/read
      • Microsoft.Marketplace/offerTypes/publishers/offers/plans/agreements/read
      • Microsoft.SaaS/register/action
    • 在资源组上,创建和使用 SaaS 资源的权限:

      • Microsoft.SaaS/resources/read
      • Microsoft.SaaS/resources/write
    • 在 Azure AI Foundry 项目上 - 部署终结点(Azure AI 开发人员角色已包含这些权限):

      • Microsoft.MachineLearningServices/workspaces/marketplaceModelSubscriptions/*
      • Microsoft.MachineLearningServices/workspaces/serverlessEndpoints/*

    有关权限详细信息,请参阅 Azure AI Foundry 门户中基于角色的访问控制

创建新部署

这些步骤演示了 AI21 Jamba 1.5 LargeAI21 Jamba 1.5 Mini 模型的部署。 若要创建部署:

  1. 登录到 Azure AI Foundry
  2. 如果你尚未进入项目,请先选择它。
  3. 从左侧导航窗格中选择“模型目录”。
  1. 搜索并选择 AI21 模型(例如 AI21 Jamba 1.5 LargeAI21 Jamba 1.5 MiniAI21 Jamba Instruct)以打开其详细信息页。

  2. 选择“部署”以打开模型的无服务器 API 部署窗口。

  3. 也可从 Azure AI Foundry 门户中的“模型 + 终结点”页开始启动部署

    1. 在项目的左侧导航窗格中,选择“我的资产”>“模型 + 终结点”。
    2. 选择“+ 部署模型”>“部署基本模型”。
    3. 搜索并选择 AI21 模型(例如 AI21 Jamba 1.5 LargeAI21 Jamba 1.5 MiniAI21 Jamba Instruct)以打开模型的详细信息页。
    4. 选择“确认”打开模型的无服务器 API 部署窗口。
  4. 当前项目指定用于该部署。 若要成功部署 AI21-Jamba 系列模型,项目必须位于“先决条件”部分中列出的区域之一。

  5. 在部署向导中,选择“Azure 市场条款”的链接,了解有关使用条款的详细信息。

  6. 选择“定价和条款”选项卡,了解所选模型的定价。

  7. 选择“订阅和部署”按钮。 如果这是第一次在项目中部署该模型,则必须为特定产品/服务订阅项目。 此步骤要求帐户具有先决条件中列出的 Azure 订阅权限和资源组权限。 每个项目都自己的订阅,以访问特定 Azure 市场中的模型产品/服务,可用于控制和监视支出。 目前,项目中每个模型只能有一个部署。

  8. 订阅特定 Azure 市场产品/服务的项目后,同一项目中同一产品/服务的后续部署不需要再次订阅。 如果此方案适用于你,则可选择“继续部署”选项。

  9. 为部署命名。 此名称将成为部署 API URL 的一部分。 此 URL 必须在每个 Azure 区域中唯一。

  10. 选择“部署”。 部署准备就绪后,你将被重定向到“部署”页面。

  11. 返回到“部署”页,选择部署,然后记下终结点的目标 URI 和密钥。 有关使用 API 的详细信息,请参阅参考部分。

  12. 始终可通过从左侧导航窗格导航到项目的“管理中心”,查找终结点的详细信息、URL 和访问密钥。 然后,选择“模型 + 终结点”。

要了解部署为随令牌即用即付的无服务器 API 的 AI21-Jamba 系列模型的计费,请参阅部署为无服务器 API 的 Jamba Instruct 的成本和配额注意事项

将 Jamba 系列模型用作无服务器 API

可以按照以下方式使用 Jamba 系列模型:

  1. 在项目的左侧导航窗格中,选择“我的资产”>“模型 + 终结点”。

  2. 查找并选择你创建的 部署。

  3. 复制目标 URI 和密钥的值

  4. 发出 API 请求。

有关使用 API 的详细信息,请参阅参考部分。

作为无服务器 API 部署的 Jamba 系列模型的参考

Jamba 系列模型接受这两个 API:

Azure AI 模型推理 API

可以在聊天补全参考一文和可以从终结点本身获取 OpenAPI 规范中找到 Azure AI 模型推理 API 架构。

单轮和多轮聊天请求和响应格式相同,不同之处在于问答(单轮)只涉及请求中的单个用户消息,而多轮聊天要求在每个请求中发送整个聊天消息历史记录。

在多轮聊天中,消息线程具有以下属性:

  • 包括来自用户和模型的所有消息,按从最早到最新的顺序排列。
  • 消息在 userassistant 角色消息之间交替
  • (可选)消息线程以系统消息开头提供上下文。

以下 p 代码是包含初始系统消息的聊天请求中第四次调用的消息堆栈示例。

[
    {"role": "system", "message": "Some contextual information here"},
    {"role": "user", "message": "User message 1"},
    {"role": "assistant", "message": "System response 1"},
    {"role": "user", "message": "User message 2"},
    {"role": "assistant"; "message": "System response 2"},
    {"role": "user", "message": "User message 3"},
    {"role": "assistant", "message": "System response 3"},
    {"role": "user", "message": "User message 4"}
]

AI21 的 Azure 客户端

使用方法 POST 将请求发送到 /v1/chat/completions 路由:

请求

POST /v1/chat/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json

请求架构

有效负载是一个 JSON 格式的字符串,其中包含以下参数:

密钥 类型 必需/默认 允许的值 说明
model string Y 必须为 jamba-1.5-largejamba-1.5-minijamba-instruct
messages list[object] Y 对象列表,每条消息一个,按从最早到最新的顺序排列。 最早的消息可以是角色 system。 之后的所有消息都必须在用户和助手角色之间交替。 请参阅下面的消息对象定义。
max_tokens integer N
4096
0 - 4096 每个生成的响应消息允许的最大令牌数。 通常,限制输出长度的最佳方法是在系统提示中提供长度限制(例如“将答案限制为三句话”)
temperature float N
1
0.0 - 2.0 每个答案中要提供多少变化。 将此值设置为 0 可保证每次都对同一问题做出相同的回答。 设置更高的值可以鼓励更多的变化。 修改对令牌进行采样的分布。 建议更改此它或 top_p,但不要同时更改两者。
top_p float N
1
0 <<=1.0 将每个步骤中的后续令牌池限制为可能的令牌的前 N 个百分位数,其中 1.0 表示所有可能令牌的池,0.01 表示仅最可能的后续令牌的池。
stop stringlist[string] N
"" 字符串或字符串列表,其中包含 API 应在该处停止生成输出的单词。 允许使用“\n”作为换行符。 返回的文本不包含停止序列。
n integer N
1
1 - 16 要为每个提示生成的响应数。 使用 Azure AI Foundry 的 Playground,在处理多响应 Playground 时 n=1
stream boolean N
False
TrueFalse 是否启用流式处理。 如果为 true,则一次返回一个令牌。 如果设置为 true,则 n 必须为 1,这是自动设置的。
tools array[tool] N "" 模型列表可能会调用 tools 列表。 目前,仅支持函数作为工具。 使用它可以提供函数列表,模型可能为其生成 JSON 输入。 最多支持 128 个函数。
response_format object N
null
"" 设置为 { "type": "json_object" } 可启用 JSON 模式,这可以保证模型生成的消息是有效的 JSON。
documents array[document] N "" 如果用户在提示中明确表示,则模型可以根据以下相关 documents 作出响应。 实质上是提示的扩展,能够添加元数据。 每个文档都是一部字典。

messages 对象具有以下字段:

  • role:[字符串,必需] 消息的作者或用途。 以下值之一:
    • user:用户提供的输入。 此处给出的任何说明令如果与 system 提示中给出的说明冲突,则其优先于 system 提示说明。
    • assistant:模型生成的响应。
    • system:初始说明,提供有关所生成消息的语气和声音的一般指导。 初始系统消息是可选的,但建议提供有关聊天语气的指导。 例如,“你是一个乐于助人的聊天机器人,具有地球科学方面的经验和迷人的法语口音。”
  • content:[字符串,必需] 消息的内容。

tool 对象具有以下字段:

  • type(必填;字符串)- 工具的类型。 目前仅支持“function”。
  • function(必填;对象)- 函数详细信息。
    • name(必填;字符串)- 要调用的函数的名称。
    • description(可选;字符串)- 函数的作用说明。
    • parameters(可选;对象)- 函数接受的参数,描述为 JSON 架构对象。

document 对象具有以下字段:

  • id(可选;字符串)- 唯一标识符。 将在引文中进行链接。 最多 128 个字符。
  • content(必填;字符串)- 文档的内容
  • metadata(可选;元数据的数组)
    • key(必填;字符串)- 元数据类型,如“author”、“date”、“url”等。应该是模型能够理解的内容。
    • value(必填;字符串)- 元数据的值

请求示例

单轮示例 Jamba 1.5 大型和 Jamba 1.5 微型

{
   "model":"jamba-1.5-large",  <jamba-1.5-large|jamba-1.5-mini>
   "messages":[
      {
         "role":"user",
         "content":"I need help with your product. Can you please assist?"
      }
   ],
   "temperature":1,
   "top_p":1,
   "n":1,
   "stop":"\n",
   "stream":false
}

具有文档的单轮示例 Jamba 1.5 大型和 Jamba 1.5 微型

{
   "model":"jamba-1.5-large",  <jamba-1.5-large|jamba-1.5-mini>
   "messages":[
      {
         "role":"system",
         "content":'''<documents>
          # Documents

          You can use the following documents for reference:

          ## Document ID: 0
          Text: Harry Potter is a series of seven fantasy novels written by British author J. K. Rowling.

          ## Document ID: 1
          Text: The Great Gatsby is a novel by American writer F. Scott Fitzgerald.
          </documents>'''},

       {
           "role":"user",
           "content":"Who wrote Harry Potter?"
       }
   ],
   "temperature":0.4,
   "top_p":1,
   "n":1,
   "stop":"\n",
   "stream":false
}

聊天示例(包含第三个用户响应的第四个请求)

{
  "model": "jamba-instruct",
  "messages": [
     {"role": "system",
      "content": "You are a helpful genie just released from a bottle. You start the conversation with 'Thank you for freeing me! I grant you one wish.'"},
     {"role":"user",
      "content":"I want a new car"},
     {"role":"assistant",
      "content":"🚗 Great choice, I can definitely help you with that! Before I grant your wish, can you tell me what kind of car you're looking for?"},
     {"role":"user",
      "content":"A corvette"},
     {"role":"assistant",
      "content":"Great choice! What color and year?"},
     {"role":"user",
      "content":"1963 black split window Corvette"}
  ],
  "n":3
}

响应架构

响应略微取决于结果是否流式处理。

在非流式处理结果中,所有响应均在单个响应中一起提供,其中还包括 usage 属性

在流式处理的结果中

  • 每个响应都在 choices 字段中包含一个令牌。
  • choices 对象结构有所不同。
  • 只有最后一个响应包括 usage 对象。
  • 整个响应都包装在 data 对象中。
  • 最终响应对象为 data: [DONE]

响应有效负载是具有以下字段的字典。

密钥 类型 描述
id string 请求的唯一标识符。
model string 所使用的模型的名称。
choices list[object] 模型生成的响应文本。 对于非流式处理响应,它是包含 n 个项的列表。 对于流式处理响应,它是包含单个令牌的单个对象。 请参阅下面的对象说明。
usage object 完成请求的使用情况统计信息。 有关详细信息,请参阅以下内容。

choices 响应对象包含模型生成的响应。 该 对象具有以下字段:

密钥 类型 描述
index integer 消息列表中从零开始的消息索引。 可能与列表中的位置不对应。 对于流式处理的消息,这始终为零。
messagedelta object 生成的消息(或流式处理响应中的令牌)。 与请求中所述的对象类型相同,但有两处更改:
- 在非流式处理响应中,此对象称为 message
- 在流式处理响应中,它称为 delta,并包含 messagerole,但不会同时包含两者。
finish_reason string 模型停止生成令牌的原因:
- stop:模型到达了自然停止点或提供的停止序列。
- length:已达到最大令牌数。
- content_filter:生成的响应违反了负责任的 AI 策略。
- null:仅限流式处理。 在流式处理响应中,除最后一个响应之外的所有响应都将为 null

message 响应对象包含模型生成的响应。 该 对象具有以下字段:

密钥 类型 描述
role string 此消息作者的角色。
content string or null 消息的内容。
tool_calls array or null 该工具会调用模型生成的工具。

tool_calls 响应对象包含模型生成的响应。 该 对象具有以下字段:

密钥 类型 描述
id string 工具调用的 ID。
type string 工具的类型。 目前仅支持 function
function object 模型调用的函数。

function 响应对象包含模型生成的响应。 该 对象具有以下字段:

密钥 类型 描述
name string 要调用的函数名称。
arguments string 用于调用函数的参数,由模型以 JSON 格式生成。

usage 响应对象包含以下字段。

密钥 类型
prompt_tokens integer 提示中的标记数。 请注意,提示令牌计数包括系统添加的额外令牌,以根据模型的要求将提示列表格式化为单个字符串。 额外令牌数通常与线程中的消息数成正比,并且应该相对较小。
completion_tokens integer 完成时生成的令牌数。
total_tokens integer 令牌总数。

非流式处理响应示例

{
  "id":"cmpl-524c73beb8714d878e18c3b5abd09f2a",
  "choices":[
    {
      "index":0,
      "message":{
        "role":"assistant",
        "content":"The human nose can detect over 1 trillion different scents, making it one of the most sensitive smell organs in the animal kingdom."
      },
      "finishReason":"stop"
    }
  ],
  "created": 1717487036,
  "usage":{
    "promptTokens":116,
    "completionTokens":30,
    "totalTokens":146
  }
}

流式处理响应示例

data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"role": "assistant"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": ""}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " The"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " first e"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "mpe"}, "created": 1717487336, "finish_reason": null}]}
... 115 responses omitted for sanity ...
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "me"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "."}, "created": 1717487336,"finish_reason": "stop"}], "usage": {"prompt_tokens": 107, "completion_tokens": 121, "total_tokens": 228}}
data: [DONE]

成本和配额

部署为无服务器 API 的 Jamba 系列模型的成本和配额注意事项

部署为无服务器 API 的 Jamba 系列模型由 AI21 通过 Azure 市场提供,并与 Azure AI Foundry 集成以供使用。 部署或微调模型时,可以看到 Azure 市场定价。

每当工作区从 Azure 市场订阅给定产品/服务时,都会创建一个新资源来跟踪与其消耗相关的成本。 同一资源用于跟踪与推理和微调相关的成本。但是,可以使用多个计量器来独立跟踪每个方案。

有关如何跟踪成本的详细信息,请参阅监视通过 Azure 市场提供的模型的成本

配额是按部署管理的。 每个部署的速率限制为每分钟 200,000 个令牌和每分钟 1,000 个 API 请求。 但是,我们目前的限制为每个项目每个模型一个部署。 如果当前速率限制不能满足你的方案,请联系 Microsoft Azure 支持部门。

内容筛选

部署为无服务器 API 的模型将受 Azure AI 内容安全保护。 启用 Azure AI 内容安全后,提示和补全会经过一系列分类模型,旨在检测和防止输出有害内容。 内容筛选(预览版)系统会在输入提示和输出补全中检测特定类别的潜在有害内容并对其采取措施。 详细了解 Azure AI 内容安全