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

如何使用 Azure 机器学习工作室部署 AI21 的 Jamba 系列模型

重要

此功能目前处于公开预览状态。 此预览版在提供时没有附带服务级别协议,我们不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。

有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

本文介绍如何使用 Azure 机器学习工作室将 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 机器学习工作区和一个计算实例。 如果没有,请使用快速入门:创建工作区资源一文中的步骤创建它们。 Jamba 系列模型的无服务器 API 模型部署产品/服务仅适用于在以下区域中创建的工作区:

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

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

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

    • 在 Azure 订阅中,将工作区订阅到 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 机器学习数据科学家角色已包含这些权限):

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

    有关权限的详细信息,请参阅管理对 Azure 机器学习工作区的访问权限

创建新部署

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

  1. 转到 Azure 机器学习工作室

  2. 选择要在其中部署模型的工作区。 若要使用无服务器 API 模型部署产品/服务,工作区必须属于先决条件中列出的受支持的区域之一。

  3. 模型目录中搜索并选择 AI21 模型,例如 AI21 Jamba 1.5 LargeAI21 Jamba 1.5 MiniAI21 Jamba Instruct

    或者,可以通过转到工作区并选择“终结点”>“无服务器终结点”>“创建”来启动部署。

  4. 在模型目录中模型的概述页面上,选择“部署”,然后选择“带有 Azure AI 内容安全的无服务器 API”。

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

  6. 还可以选择“市场产品/服务详细信息”选项卡,了解所选模型的定价。

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

  8. 注册特定 Azure 市场产品/服务的工作区后,同一工作区中同一产品/服务的后续部署不需要再次订阅。 因此,无需具有后续部署的订阅级权限。 如果此方案适合你,请选择“继续部署”。

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

  10. 选择“部署”。 等待部署完成,然后将重定向到无服务器终结点页。

  11. 选择终结点以打开其详细信息页。

  12. 选择“测试”选项卡,开始与模型交互。

  13. 还可以记下“目标”URL 和“密钥”来调用部署并生成完成。

  14. 始终可以通过导航到“工作区”>“终结点”>“无服务器终结点”来查找终结点的详细信息、URL 和访问密钥。

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

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

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

  1. 在工作区中,选择“终结点”>“无服务器终结点”。
  2. 查找并选择你创建的 部署。
  3. 复制“目标”URL 和“密钥”令牌值。
  4. 使用路由 /chat/completions 上的 Azure AI 模型推理 API/v1/chat/completionsAI21 的 Azure 客户端发出 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-instructAI21 Jamba 1.5 LargeAI21 Jamba 1.5 Mini
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 Studio 的 Playground,在处理多响应 Playground 时 n=1
stream boolean N
False
TrueFalse 是否启用流式处理。 如果为 true,则一次返回一个令牌。 如果设置为 true,则 n 必须为 1,这是自动设置的。

messages 对象具有以下字段:

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

请求示例

单轮示例

{
    "model": "jamba-instruct",
    "messages": [
    {
      "role":"user",
      "content":"Who was the first emperor of rome?"}
  ],
    "temperature": 0.8,
    "max_tokens": 512
}

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

{
  "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 个项的列表。 对于流式处理响应,它是包含单个令牌的单个对象。 请参阅下面的对象说明。
created integer 创建完成时间的 Unix 时间戳(以秒为单位)。
object string 始终为 chat.completion 的对象类型。
usage object 完成请求的使用情况统计信息。 有关详细信息,请参阅以下内容。

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

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

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 Studio 集成以供使用。 部署或微调模型时,可以看到 Azure 市场定价。

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

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

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

内容筛选

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