如何使用 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 的形式加以取用,而不需在您的訂用帳戶上裝載這些模型,同時保有企業安全性與合規性組織需求。 此部署選項不需要您的訂用帳戶提供配額。
部署為採用隨用隨付計費方式之無伺服器 API 的 AI21-Jamba 1.5 Large 模型是由 AI21 透過 Microsoft Azure Marketplace 所提供。 AI21 可能會變更或更新此模型的使用規定和價格。
若要開始使用部署為無伺服器 API 的 Jamba 1.5 Large,請探索我們與 LangChain、LiteLLM、OpenAI 和 Azure API 的整合。
必要條件
具有有效付款方式的 Azure 訂用帳戶。 免費版或試用版 Azure 訂用帳戶將無法運作。 如果您沒有 Azure 訂用帳戶,請建立付費 Azure 帳戶以開始。
Azure AI Foundry 專案。 適用於 Jamba 系列模型的無伺服器 API 模型部署供應專案僅適用於在特定區域中建立的專案。 如需這些區域的清單,請參閱 無伺服器 API 端點中模型的區域可用性。
Azure 角色型訪問控制 (Azure RBAC) 可用來授與 Azure AI Foundry 入口網站中作業的存取權。 若要執行本文中的步驟,您的使用者帳戶必須獲指派 Azure 訂用帳戶的擁有者或參與者角色。 或者,可以為您的帳戶指派具有下列權限的自訂角色:
在 Azure 訂用帳戶上,將 Azure AI Foundry 專案訂閱至 Azure Marketplace 供應專案,每個供應專案各一次:
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 Large
或 AI21 Jamba 1.5 Mini
模型的部署。 若要建立部署:
- 登入 Azure AI Foundry。
- 如果您尚未在專案中,請選取它。
- 從左側瀏覽窗格中選取 [模型目錄 ]。
搜尋並選取類似 或 的
AI21 Jamba 1.5 Large
AI21 模型,以AI21 Jamba 1.5 Mini
開啟其 [詳細數據] 頁面。選取「部署」針對模型開啟無伺服器 API 部署視窗。
或者,您可以從 Azure AI Foundry 入口網站中的 [模型 + 端點] 頁面開始起始部署。
- 從專案的左側瀏覽窗格中,選取 [我的資產>模型 + 端點]。
- 選取 [+ 部署模型>部署基底模型]。
- 搜尋並選取類似 或
AI21 Jamba 1.5 Mini
的AI21 Jamba 1.5 Large
AI21 模型,以開啟模型的詳細數據頁面。 - 選取「確認」,針對模型開啟無伺服器 API 部署視窗。
您目前的項目已針對部署指定。 若要成功部署 AI21-Jamba 系列模型,您的專案必須位於必要條件一節中列出的其中一個區域。
在部署精靈上,選取 Azure Marketplace 條款的連結,以深入了解使用規定。
選取「價格及使用規定」索引標籤,以了解所選模型的價格。
選取「訂閱並部署」按鈕。 如果這是您第一次在專案中部署模型,您必須為專案訂閱特定供應項目 (例如 Mistral-large)。 此步驟會要求您的帳戶具有必要條件中所列的 Azure 訂用帳戶權限和資源群組權限。 每個專案都有自己模型特定 Azure Marketplace 供應項目的訂用帳戶,可讓您控制及監視支出。 目前,針對專案內的每個模型只能有一個部署。
當您為專案訂閱特定 Azure Marketplace 供應項目之後,就不需要再次訂閱相同工作區中的相同供應項目的後續部署。 如果您適用此情況,則會有「繼續部署」選項供您選取。
為部署指定名稱。 此名稱會成為部署 API URL 的一部分。 此 URL 在每個 Azure 區域中都必須是唯一的。
選取部署。 待部署準備就緒後,系統會將您重新導向至 [部署] 頁面。
返回 [部署] 頁面,選取部署,並記下端點 的目標 URI 和秘密 密鑰。 如需如何使用 API 的詳細資訊,請參閱參考一節。
-
您一律可以從左側瀏覽窗格瀏覽至專案的 管理中心 ,以尋找端點的詳細數據、URL 和存取密鑰。 然後,選取 [模型 + 端點]。
若要瞭解如何使用隨用隨付令牌型計費部署為無伺服器 API 的 AI21-Jamba 系列模型計費,請參閱 部署為無伺服器 API 的 Jamba 模型的成本和配額考慮。
使用 Jamba 系列模型作為無伺服器 API
您可以如下所示,使用 Jamba 系列模型:
從專案的左側瀏覽窗格中,選取 [我的資產>模型 + 端點]。
尋找並選取您所建立的 部署。
複製 [ 目標 URI] 和 [ 金鑰 ] 值。
提出 API 要求。
如需使用 API 的詳細資訊,請參閱參考一節。
作為部署為無伺服器 API 的 Jamba 系列模型的參考
Jamba 系列模型接受這兩個 API:
- 路由
/chat/completions
上用於進行多回合聊天或單回合問題解答的 Azure AI 模型推斷 API。 Jamba 系列模型已針對聊天完成進行過微調,因此可支援此 API。 - AI21 的 Azure 用戶端 (英文)。 如需所呼叫 REST 端點的詳細資訊,請造訪 AI21 的 REST 文件 (英文)。
Azure AI 模型推斷 API
可以在 聊天完成的參考 (部分機器翻譯) 文章中找到 Azure AI 模型推斷 API 結構描述,並且可以從端點本身取得 OpenAPI 規格 (部分機器翻譯)。
單回合和多回合聊天具有相同的要求和回應格式,不同之處在於問題解答 (單回合) 只涉及要求中的單一使用者訊息,而多回合聊天則要求您在每個要求中傳送整個聊天訊息歷程記錄。
在多回合聊天中,訊息對話具有下列屬性:
- 包含來自使用者和模型的所有訊息,從最舊到最新排序。
- 訊息會在
user
與assistant
角色的訊息之間交替 - (選擇性) 訊息對話會從系統訊息開始以提供內容。
下列虛擬程式碼是聊天要求中第四個呼叫的訊息堆疊範例,其中包含初始的系統訊息。
[
{"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-large 或 jamba-1.5-mini |
|
messages |
list[object] |
Y | 物件清單,每個訊息一個,從最舊到最新排序。 最舊的訊息可以是角色 system 。 之後的所有訊息則必須在使用者和助理角色之間交替。 請參閱下面的訊息物件定義。 |
|
max_tokens |
integer |
N4096 |
0 – 4096 | 所產生的每個回應訊息允許的語彙基元數目上限。 一般來說,想要限制輸出長度,最佳的方式是在系統提示中提供長度限制 (例如,「將您的答案限制為三個句子」) |
temperature |
float |
N1 |
0.0 – 2.0 | 要在每個答案中提供多少變化。 將此值設定為 0 可保證相同的問題每次都會有相同的回應。 設定較高的值會促進更多變化。 請修改要從中進行語彙基元取樣的分佈。 建議改變此項目或 top_p ,但不建議同時改變。 |
top_p |
float |
N1 |
0 <值<=1.0 | 將每個步驟中下一個語彙基元的集區限制為可能語彙基元的前 N 個百分位數,其中 1.0 表示所有可能語彙基元的集區,0.01 則表示只有下一個最可能語彙基元的集區。 |
stop |
string 或 list[string] |
N |
"" | 字串或字串清單,其中包含 API 應該停止產生輸出的字組。 允許以「\n」作為新行字元。 傳回的文字不會包含停止序列。 |
n |
integer |
N1 |
1 – 16 | 要為每個提示產生多少個回應。 透過 Azure AI Foundry 的遊樂場, n=1 當我們處理多重響應遊樂場時。 |
stream |
boolean |
N False |
True 或 False |
是否要啟用串流。 如果為 true,則會一次傳回一個語彙基元的結果。 如果設定為 true,則 n 必須是 1,這會由系統自動設定。 |
tools |
array[tool] |
否 | "" | 模型可能會呼叫的 tools 清單。 目前僅支援函式作為工具。 使用此參數可提供產生 JSON 輸入的函式清單。 最多支援 128 個函式。 |
response_format |
object |
Nnull |
"" | 設定為 { "type": "json_object" } 會啟用 JSON 模式,保證模型產生的訊息為有效的 JSON。 |
documents |
array[document] |
否 | "" | 如果使用者在提示中明確表示,則模型可以作為回應基礎的相關 documents 清單。 基本上,會作為提示的延伸,並能夠新增中繼資料。 每個文件都是字典。 |
messages
物件具有下列欄位:
-
role
:[字串,必要] 訊息的作者或用途。 下列其中一個值:-
user
:使用者提供的輸入。 此處提供的任何指示若與system
提示中提供的指示發生衝突,則此處提供的指示會優先於system
提示的指示。 -
assistant
:模型所產生的回應。 -
system
:用來指導所產生的訊息一般該有何種語氣和音調的初始指示。 初始系統訊息為選擇性訊息,但建議使用以指導聊天語氣。 例如,「您是一個很有用的聊天機器人,具有地球科學背景和迷人的法語口音」。
-
-
content
:[字串,必要] 訊息的內容。
tool
物件具有下列欄位:
-
type
(必要;str) - 工具的類型。 目前僅支援「函式」。 -
function
(必要;物件) - 函式詳細資料。-
name
(必要;str) - 要呼叫的函式名稱。 -
description
(選用;str) - 函式所執行作業的描述。 -
parameters
(選用;物件) - 函式接受的參數,描述為 JSON 結構描述物件。
-
document
物件具有下列欄位:
-
id
(選用;str) - 唯一識別碼。 將會連結到引文。 最多為 128 個字元。 -
content
(必要;str) - 文件的內容 -
metadata
(選用;中繼資料陣列)-
key
(必要;str) - 元數據的類型,例如 'author'、'date'、'url'等等。應該是模型所了解的事項。 -
value
(必要;str) - 中繼資料的值
-
要求範例
單回合範例 Jamba 1.5 Large 和 Jamba 1.5 Mini
{
"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 Large 和 Jamba 1.5 Mini (包含文件)
{
"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-1.5-large",
"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 |
訊息清單內訊息的零基索引。 可能不會對應至清單中的位置。 若為串流訊息,這一律為零。 |
message 或 delta |
object |
產生的訊息 (或串流回應中的語彙基元)。 和要求所述相同的物件類型,具有兩個變更: - 在非串流回應中,此物件稱為 message 。 - 在串流回應中,其稱為 delta ,且包含 message 或 role ,但永遠不會同時包含兩者。 |
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 |
工具呼叫的識別碼。 |
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 系列模型的成本和配額考量
Jamba 系列模型會部署為無伺服器 API,並由 AI21 透過 Azure Marketplace 提供,並與 Azure AI Foundry 整合以供使用。 您可以在部署或微調模型時找到 Azure Marketplace 價格。
每當工作區向 Azure Marketplace 訂閱指定的模型供應項目時,都會建立新的資源,以便追蹤與其使用量相關聯的成本。 會使用相同的資源來追蹤與推斷和微調相關聯的成本;不過,可以使用多個計量獨立追蹤每個情節。
如需如何追蹤成本的詳細資訊,請參閱監視透過 Azure Marketplace 提供的模型成本 (部分機器翻譯)。
配額會根據每個部署管理。 每個部署的速率限制為每分鐘 200,000 個權杖,每分鐘 1,000 個 API 要求。 不過,我們目前限制每個專案的每個模型為一個部署。 如果目前的速率限制無法滿足您的情節,請連絡 Microsoft Azure 支援。
內容篩選
部署為無伺服器 API 的模型會受到 Azure AI 內容安全所保護。 啟用 Azure AI 內容安全後,提示和完成都會通過旨在偵測及防止有害內容輸出的一組分類模型。 內容篩選 (預覽) 系統會偵測並針對輸入提示和輸出完成中潛在有害內容的特定類別採取動作。 深入了解 Azure AI 內容安全 (部分機器翻譯)。