本文說明如何使用來自 Agent Framework Python API的 deploy()
函式,將 AI 代理程式 部署至馬賽克 AI 模型服務。
在馬賽克 AI 模型服務上部署代理程式可提供下列優點:
- 模型服務會管理自動調整、記錄、版本控制和訪問控制,讓您專注於開發品質代理程式。
- 主題專家可以使用檢閱應用程式與已部署的代理程序互動,並提供意見反應,以納入您的監視和評估。
- 您可以在即時流量資料上進行評估以監控代理。 雖然使用者流量不會包含真實資料,但 LLM 判斷工具(以及您建立的自定義計量)會執行不受監督的評估。
需求
使用
deploy()
的databricks.agents
API 部署代理程式時,需使用 MLflow 2.13.1 或更新版本。向 Unity 目錄註冊 AI 代理程式。 請參閱 將代理程式註冊至 Unity 目錄。
從 Databricks Notebook 外部部署代理程式需要
databricks-agents
SDK 0.12.0 版或更新版本。端點建立者(部署代理程式的用戶)必須擁有
CREATE VOLUME
所選 Unity 目錄架構的許可權,才能在部署時儲存推斷數據表。 這可確保可以在架構中建立相關的評量和記錄數據表。 請參閱 啟用和停用推斷數據表。databricks-agents
安裝 SDK。%pip install databricks-agents dbutils.library.restartPython()
使用 deploy()
部署代理程式
使用 deploy() 將代理程式部署至服務端點的模型。
from databricks import agents
deployment = agents.deploy(uc_model_name, uc_model_info.version)
# Retrieve the query endpoint URL for making API requests
deployment.query_endpoint
函 deploy()
式預設會執行下列動作:
deploy() 行動 |
說明 |
---|---|
建立提供端點的CPU模型 | 透過模型服務端點來提供代理程式,讓您的代理程式可供使用者存取。 |
提供短暫服務主體的憑證 | Databricks 會自動提供短期認證,讓您以最低必要許可權存取 記錄模型時所定義的 Databricks 管理資源。 Databricks 會先檢查端點擁有者是否具有必要許可權,再發出認證,以防止許可權提升和未經授權的存取。 請參閱相依資源的驗證。 如果您的代理程式相依於非 Databricks 管理的資源,您可以將具有秘密的環境變數傳遞至 deploy() 。 請參閱設定模型服務端點對資源的存取權。 |
啟用檢閱應用程式 | 可讓利害關係人與代理互動並提供回饋。 請參閱 使用審查應用程式對生成式 AI 應用程式 (MLflow 2) 進行人工檢閱。 |
啟用推斷數據表 | 藉由記錄要求輸入和回應來監視和偵錯代理程式。
|
記錄 REST API 要求並檢閱應用程式意見反應 | 將 API 要求和意見反應記錄至推斷數據表。
|
啟用 Gen AI 的 Lakehouse 監視 (beta) | 需要在 Lakehouse Monitoring for Gen AI Beta 中註冊。 部署的代理追蹤會自動啟用基本監控。 |
使用 MLflow 3 啟用即時追蹤和監視 (beta) | 需要在 Lakehouse Monitoring for Gen AI Beta 中註冊,並使用 MLflow 3.0 或更新版本。 除了記錄從已部署的代理程式到推斷數據表以進行長期儲存之外,Databricks 也會將所部署代理程式的追蹤記錄到 MLflow 實驗,以取得即時可見度。 這樣可減少監視和偵錯延遲。
|
注意
部署最多需要 15 分鐘的時間才能完成。 原始 JSON 酬載需要 10 - 30 分鐘才能到達,而格式化的日誌大約每小時從原始酬載處理一次。
自訂部署
若要自訂部署,您可以將其他自變數傳遞至 deploy()
。 例如,您可以透過傳遞 scale_to_zero_enabled=True
,為閒置端點啟用零化調整功能。 這可降低成本,但會增加提供初始查詢的時間。
如需更多參數,請參閱 Databricks Agents Python API。
取回和刪除代理程式部署
擷取或管理現有的代理程式部署:
from databricks.agents import list_deployments, get_deployments, delete_deployment
# Print all current deployments
deployments = list_deployments()
print(deployments)
# Get the deployment for a specific agent model name and version
agent_model_name = "" # Set to your Unity Catalog model name
agent_model_version = 1 # Set to your agent model version
deployment = get_deployments(model_name=agent_model_name, model_version=agent_model_version)
# Delete an agent deployment
delete_deployment(model_name=agent_model_name, model_version=agent_model_version)
相依資源的驗證
AI 代理程式通常需要向其他資源進行驗證,才能完成工作。 例如,代理程式可能需要存取向量搜尋索引來查詢非結構化數據。
當您在模型服務端點後方提供服務時,您的代理程式可以使用下列其中一種方法向相依資源進行驗證:
- 自動身份驗證通過:在登錄期間聲明您的代理程式所需的 Databricks 資源依賴性。 當您的代理程式部署以安全地存取資源時,Databricks 可以自動布建、輪替及管理短期認證。 Databricks 建議盡可能使用自動驗證傳遞。
- 代表使用者驗證:允許使用代理端使用者憑證來存取 Databricks REST API 和資源
- 手動驗證:在代理程式部署期間手動指定長期認證。 針對不支援自動驗證傳遞或外部 API 存取的 Databricks 資源,使用手動驗證。
自動驗證通過
Model Serving 支援 Databricks 環境中代理使用最常見資源的自動認證傳遞。
若要啟用自動驗證傳遞,您必須在代理程式登入期間 指定依賴項。
然後,當您在端點後方提供代理程式時,Databricks 會執行下列步驟:
許可權驗證: Databricks 會確認端點創建者可以存取在代理記錄期間指定的所有依賴項。
服務主體的建立和授權:會為代理模型版本建立一個服務主體,並自動授予對代理資源的讀取許可權。
注意
系統產生的服務主體不會出現在 API 或 UI 清單中。 如果代理程式模型版本已從端點移除,服務主體也會一併刪除。
認證布建和輪替:會將短期認證(M2M OAuth 令牌)注入端點,以允許服務主體的代理代碼存取 Databricks 資源。 Databricks 也會輪替憑證,確保代理程式能夠持續且安全地存取相依資源。
此驗證行為類似於 Databricks 儀錶板的「以擁有者身分執行」行為,使用最低權限存取相依資源的服務主體憑證來存取下游資源,例如 Unity Catalog 表格。
下表列出支援自動驗證傳遞的 Databricks 資源,以及部署代理程式時端點建立者必須具備的許可權。
注意
Unity Catalog 資源在父架構上需要 USE SCHEMA
,在父目錄上需要 USE CATALOG
。
資源類型 | 權限 |
---|---|
SQL 資料倉儲 | 使用端點 |
模型服務端點 | 可進行查詢 |
Unity 目錄功能 | 執行指令 |
精靈空間 | 能跑 |
向量搜尋索引 | 可以使用 |
Unity 目錄數據表 | SELECT |
代理使用者驗證
代理人員身分驗證允許代理程式開發人員使用代理程式終端使用者的憑證來存取敏感的 Databricks 資源。 若要啟用代表使用者存取資源,有兩個步驟:
- 在代理程式代碼中,請確保用戶端能存取具有啟用代表使用者的驗證的 databricks 資源。 如需詳細資訊,請參閱 使用代理使用者驗證部署代理程式 。
- 在代理程式登入時,指定終端使用者所需的 REST API 範圍(例如
vectorsearch.vector-search-endpoints
)。 當您的代理程式後續部署時,它可以代表使用者存取 Databricks 資源,但只能使用指定的範圍。 如需 API 範圍的詳細資訊,請參閱 代表用戶驗證。
手動驗證
您也可以使用 秘密型環境變數來手動提供認證,。 在下列情況中,手動驗證很有幫助:
- 相依資源不支援自動驗證傳遞。
- 代理程式正在存取外部資源或 API。
- 代理程式需要使用代理程式部署器以外的認證。
例如,若要在代理程式中使用 Databricks SDK 來存取其他相依資源,您可以設定 Databricks 用戶端統一驗證 中所述的環境變數,。
監視已部署的代理程式
將代理程式部署至 Databricks 模型服務之後,您可以使用 AI 閘道推斷數據表來監視已部署的代理程式。 推斷數據表包含來自檢閱應用程式的要求、回應、代理程序追蹤和代理程式意見反應的詳細記錄。 這項資訊可讓您偵錯問題、監視效能,以及建立用於離線評估的黃金數據集。
這很重要
如果您在呼叫 agents.deploy()
時,已在開發環境中安裝 MLflow 3,您的端點會即時將 MLflow 追蹤 記錄到呼叫 agents.deploy()
時啟動的 MLflow 實驗。 您可以在部署之前呼叫 mlflow.set_experiment()
來變更作用中的實驗。
如需詳細資訊 ,請參閱 MLflow 檔 。
請參閱 使用追蹤來偵錯與觀察您的應用程式。
獲取已部署的應用程式
下列示範如何取得已部署的代理程式。
from databricks.agents import list_deployments, get_deployments
# Get the deployment for specific model_fqn and version
deployment = get_deployments(model_name=model_fqn, model_version=model_version.version)
deployments = list_deployments()
# Print all the current deployments
deployments
請參閱 Databricks Agents Python API。
提供已部署代理程式的意見反應(實驗性)
當您使用 agents.deploy()
部署代理程式時,代理程式架構也會在相同的端點內建立並部署「意見反應」模型版本,您可以查詢以在代理程式應用程式上提供意見反應。 意見反應項目會在與您的代理程式服務端點相關聯的 推斷表中顯示為 的請求行。
請注意,此行為是 實驗性的:D atabricks 可能會提供一流的API,以在未來提供已部署代理程式的意見反應,未來功能可能需要移轉至此 API。
此 API 的限制包括:
- 意見反應 API 缺少輸入驗證 - 即使傳遞無效的輸入,它一律會成功回應。
- 意見反應 API 需要傳入由 Databricks 生成的代理程式端點要求的
request_id
,以便您提供意見反應。 若要取得databricks_request_id
,請在您向代理程式服務端點的原始請求中包含{"databricks_options": {"return_trace": True}}
。 代理端點回應接著會包含與請求相關聯的databricks_request_id
,以便您在提供代理回應的意見時,可以將此要求 ID 傳回給意見 API。 - 使用推斷數據表收集意見反應。 請參閱 推斷資料表限制。
下列範例要求會針對名為 「your-agent-endpoint-name」 的代理程式端點提供意見反應,並假設 DATABRICKS_TOKEN
環境變數設定為 Databricks REST API 令牌。
curl \
-u token:$DATABRICKS_TOKEN \
-X POST \
-H "Content-Type: application/json" \
-d '
{
"dataframe_records": [
{
"source": {
"id": "user@company.com",
"type": "human"
},
"request_id": "573d4a61-4adb-41bd-96db-0ec8cebc3744",
"text_assessments": [
{
"ratings": {
"answer_correct": {
"value": "positive"
},
"accurate": {
"value": "positive"
}
},
"free_text_comment": "The answer used the provided context to talk about Lakeflow Declarative Pipelines"
}
],
"retrieval_assessments": [
{
"ratings": {
"groundedness": {
"value": "positive"
}
}
}
]
}
]
}' \
https://<workspace-host>.databricks.com/serving-endpoints/<your-agent-endpoint-name>/served-models/feedback/invocations
您可以在 text_assessments.ratings
和 retrieval_assessments.ratings
欄位中傳遞其他或不同的索引鍵/值組,以提供不同類型的意見反應。 在範例中,回饋載荷指出代理對於ID 573d4a61-4adb-41bd-96db-0ec8cebc3744
的要求回應是正確且準確,並且基於擷取器工具所獲取的上下文。