建立 AI 代理程式
重要
這項功能處於公開預覽狀態。
本文說明如何使用馬賽克 AI 代理程式架構建立工具呼叫 AI 代理程式 。
瞭解如何提供代理程式工具,並開始與他們聊天,以測試代理程式並建立代理程式的原型。 完成代理程式的原型設計之後,請匯出 Python 程式代碼,以定義代理程式來反覆運算並部署您的 AI 代理程式。
需求
- 瞭解 AI 代理和工具的概念,如在 「什麼是複合 AI 系統和 AI 代理?」 中所述。
- Databricks 建議在開發代理程式時安裝最新版本的 MLflow Python 用戶端。
建立 AI 代理程式工具
第一個步驟是建立工具,以提供給您的代理程式。 代理程式會使用工具來執行語言產生以外的動作,例如擷取結構化或非結構化數據、執行程式碼或與遠端服務交談(例如傳送電子郵件或 Slack 訊息)。
針對本指南,您可以使用內建的 Unity Catalog 函式,system.ai.python_exec
,讓您的代理程式能夠執行任意 Python 程式代碼。
若要深入瞭解如何建立自己的代理程式工具,請參閱 建立 AI 代理程式工具。
AI 遊樂場中的原型工具呼叫代理程式
現在您已擁有工具,請使用 AI 遊樂場,將工具提供給代理程式,並與其互動以驗證和測試行為。 AI 遊樂場提供沙箱以建立工具呼叫代理程式的原型。
注意
Unity Catalog和 無伺服器計算、馬賽克 AI 代理程式框架,以及 按令牌支付的基礎模型 或 外部模型 必須在目前的工作區中可用,才能在 AI 試驗場中建立代理程式原型。
建立工具呼叫端點的原型。
從 Playground,select 模型帶有已啟用 工具的 標籤。
Select [工具],並在下拉式清單中指定 Unity Catalog 函式名稱:
聊天以測試 LLM、工具和系統提示的目前組合,並嘗試各種變化。
匯出與部署 AI 遊樂場代理程式
在 AI 遊樂場中建立 AI 代理程式的原型和精簡之後,您可以將它匯出至 Python 筆記本,以進行進一步的開發,或將其直接部署為模型服務端點
單擊 [導出],將其導出為 generate Python 筆記本,協助您開發和部署 AI 代理程式。
匯出代理程式程式碼之後,您會看到儲存至工作區的三個檔案:
-
agent
筆記本:包含使用 LangChain 定義代理程式的 Python 程式碼。 -
driver
筆記本:包含 Python 程式碼,可使用 Mosaic AI 代理程式架構來記錄、追蹤、註冊及部署 AI 代理程式。 -
config.yml
:包含代理程式的組態資訊,包括工具定義。
-
開啟
agent
筆記本以查看定義您代理程式的 LangChain 程式代碼,使用此筆記本以程式設計方式測試並反覆調整代理程式,例如定義更多工具或調整 代理程式的 parameters。注意
匯出的程式碼可能會有不同於 AI 遊樂場工作階段的行為。 Databricks 建議您執行匯出的筆記本,以進一步逐一查看和偵錯、評估代理程式品質,然後部署代理程式以與他人共用。
一旦您滿意代理程式的輸出,可以執行
driver
筆記本來記錄代理程式,並將代理程式部署至模型服務端點。
在程式碼中定義代理程式
除了從 AI 遊樂場產生代理程式代碼之外,您也可以使用 LangChain 或 Python 程式代碼等架構自行在程式碼中定義代理程式。 若要使用代理程式架構部署代理程式,其輸入必須符合其中支援的輸入和輸出格式之一。
使用 parameters 來設定代理程式
在 Agent Framework 中,您可以使用 parameters 來控制代理程式的執行方式。 這可讓您透過變更代理程式的不同特性來快速迭代,而無需更改程式碼。
Parameters 是您在 Python 字典或 .yaml
檔案中定義的索引鍵/值組。
若要設定程式代碼,請建立一個 ModelConfig
,即為鍵值 parameters的 set。
ModelConfig
是 Python 字典或 .yaml
檔案。 例如,您可以在開發期間使用字典,然後將其轉換成生產部署及 CI/CD 的 .yaml
檔案。 如需 ModelConfig
的詳細資訊,請參閱 MLflow 文件。
範例 ModelConfig
如下所示。
llm_parameters:
max_tokens: 500
temperature: 0.01
model_serving_endpoint: databricks-dbrx-instruct
vector_search_index: ml.docs.databricks_docs_index
prompt_template: 'You are a hello world bot. Respond with a reply to the user''s
question that indicates your prompt template came from a YAML file. Your response
must use the word "YAML" somewhere. User''s question: {question}'
prompt_template_input_vars:
- question
若要從程式碼呼叫組態,請使用下列其中一項:
# Example for loading from a .yml file
config_file = "configs/hello_world_config.yml"
model_config = mlflow.models.ModelConfig(development_config=config_file)
# Example of using a dictionary
config_dict = {
"prompt_template": "You are a hello world bot. Respond with a reply to the user's question that is fun and interesting to the user. User's question: {question}",
"prompt_template_input_vars": ["question"],
"model_serving_endpoint": "databricks-dbrx-instruct",
"llm_parameters": {"temperature": 0.01, "max_tokens": 500},
}
model_config = mlflow.models.ModelConfig(development_config=config_dict)
# Use model_config.get() to retrieve a parameter value
value = model_config.get('sample_param')
Set 擷取器 schema
AI 代理程式通常會使用擷取器,這是使用向量搜尋索引尋找並傳回相關文件的代理程式工具類型。 如需擷取器的詳細資訊,請參閱 非結構化擷取 AI 代理程式工具。
若要確保擷取程式正確追蹤,請在程式代碼中定義代理程式時呼叫 mlflow.models.set_retriever_schema 。 使用 set_retriever_schema
,將傳回 table 中的 column 名稱對應至 MLflow 的預期欄位,例如 primary_key
、text_column
和 doc_uri
。
# Define the retriever's schema by providing your column names
# These strings should be read from a config dictionary
mlflow.models.set_retriever_schema(
name="vector_search",
primary_key="chunk_id",
text_column="text_column",
doc_uri="doc_uri"
# other_columns=["column1", "column2"],
)
注意
評估擷取程式效能時,doc_uri
column 特別重要。
doc_uri
是擷取器所傳回檔的主要 identifier,可讓您將它們與地面真相評估集進行比較。 請參閱 評估集
您也可以在擷取器的 schema 中指定其他 columns,方法是提供 column 名稱清單,其中包括 other_columns
欄位的 list。
如果您有多個擷取器,您可以使用每個擷取器的唯一名稱來定義多個架構,schema。
支援的輸入和輸出格式
Agent Framework 會使用 MLflow 模型簽章來定義代理程式的輸入和輸出架構。 摩賽克 AI 代理架構的特色需要至少 set 個輸入/輸出欄位,才能與檢閱應用程式和 AI 遊樂場等特色互動。 如需詳細資訊,請參閱 定義代理程式的輸入和輸出 schema。
範例筆記本
這些筆記本會建立簡單的「Hello, world」鏈,說明如何在 Databricks 建立鏈應用程式。 第一個範例建立簡單的鏈。 第二個範例筆記本說明如何使用 parameters,將開發期間的程式代碼變更降到最低。