AI 에이전트 기록 및 등록
Important
이 기능은 공개 미리 보기 상태입니다.
Mosaic AI 에이전트 프레임워크를 사용하여 AI 에이전트를 기록합니다. 에이전트 로깅은 개발 프로세스의 기초입니다. 로깅은 에이전트 코드 및 구성의 "지정 시간"을 캡처하므로 구성의 품질을 평가할 수 있습니다.
요구 사항
로깅하기 전에 AI 에이전트를 만듭니다.
코드 기반과 serialization 기반 로깅 비교
코드 기반 MLflow 로깅 또는 serialization 기반 MLflow 로깅을 사용할 수 있습니다. Databricks는 코드 기반 로깅을 사용하는 것이 좋습니다.
코드 기반 MLflow 로깅: 체인의 코드가 Python 파일로 캡처됩니다. Python 환경은 패키지 목록으로 캡처됩니다. 체인이 배포되면 Python 환경이 복원되고 체인의 코드가 실행되어 엔드포인트가 호출될 때 호출될 수 있도록 체인을 메모리에 로드합니다.
Serialization 기반 MLflow 로깅: Python 환경의 체인 코드와 현재 상태가 디스크로 직렬화되며, 종종 라이브러리(예: pickle
또는 joblib
)를 사용합니다. 체인이 배포되면 Python 환경이 복원되고 직렬화된 개체가 메모리에 로드되므로 엔드포인트가 호출될 때 호출할 수 있습니다.
표에서는 각 메서드의 장점과 단점을 보여 줍니다.
메서드 | 장점 | 단점 |
---|---|---|
코드 기반 MLflow 로깅 | - 여러 인기 있는 GenAI 라이브러리에서 지원하지 않는 직렬화의 고유한 한계를 극복합니다. - 나중에 참조할 수 있는 원래 코드의 복사본을 저장합니다. - 직렬화할 수 있는 단일 개체로 코드를 재구성할 필요가 없습니다. |
log_model(...) 은 체인의 코드(드라이버 Notebook이라고 함)와 다른 Notebook에서 호출되어야 합니다. |
Serialization 기반 MLflow 로깅 | log_model(...) 은 모델이 정의된 동일한 Notebook에서 호출할 수 있습니다. |
- 원래 코드를 사용할 수 없습니다. - 체인에 사용되는 모든 라이브러리 및 개체는 직렬화를 지원해야 합니다. |
코드 기반 로깅의 경우 에이전트 또는 체인을 기록하는 코드는 체인 코드와 별도의 Notebook에 있어야 합니다. 이 Notebook을 드라이버 Notebook이라고 합니다. Notebook 예제는 Notebook 예제를 참조하세요.
LangChain을 사용하는 코드 기반 로깅
- 코드를 사용하여 Notebook 또는 Python 파일을 만듭니다. 이 예제에서는 Notebook 또는 파일의 이름을
chain.py
로 지정합니다. Notebook 또는 파일에는 여기에서lc_chain
으로 참조하는 LangChain 체인이 포함되어야 합니다. - Notebook 또는 파일에
mlflow.models.set_model(lc_chain)
을 포함합니다. - 드라이버 Notebook으로 사용할 새 Notebook을 만듭니다(이 예제에서는
driver.py
로 부름). - 드라이버 Notebook에서
mlflow.lang_chain.log_model(lc_model=”/path/to/chain.py”)
을 사용하여chain.py
를 실행하고 MLflow 모델에 결과를 기록합니다. - 모델을 배포합니다. 생성형 AI 응용 프로그램에 대한 에이전트 배포를 참조하세요.
에이전트 배포는 벡터 검색 인덱스 및 엔드포인트를 제공하는 모델처럼 다른 Databricks 리소스에 따라 달라질 수 있습니다. LangChain 에이전트의 경우는 다음과 같습니다.
- MLflow
log_model
은 체인에 필요한 종속성을 유추하고 이를 기록된 모델 아티팩트의MLmodel
파일에 기록합니다. Mlflow 버전 2.17.0부터 이러한 유추된 종속성을 재정의할 수 있습니다. PyFunc 또는 LangChain 에이전트에 대한 리소스 지정을 참조하세요. - 배포하는 동안
databricks.agents.deploy
는 이러한 유추된 리소스 종속성에 액세스하고 통신하는 데 필요한 M2M OAuth 토큰을 자동으로 만듭니다.
- MLflow
- 제공하는 환경이 로드되면
chain.py
가 실행됩니다. - 제공하는 요청이 들어오면
lc_chain.invoke(...)
가 호출됩니다.
import mlflow
code_path = "/Workspace/Users/first.last/chain.py"
config_path = "/Workspace/Users/first.last/config.yml"
input_example = {
"messages": [
{
"role": "user",
"content": "What is Retrieval-augmented Generation?",
}
]
}
# example using LangChain
with mlflow.start_run():
logged_chain_info = mlflow.langchain.log_model(
lc_model=code_path,
model_config=config_path, # If you specify this parameter, this is the configuration that is used for training the model. The development_config is overwritten.
artifact_path="chain", # This string is used as the path inside the MLflow model where artifacts are stored
input_example=input_example, # Must be a valid input to your chain
example_no_conversion=True, # Required
)
print(f"MLflow Run: {logged_chain_info.run_id}")
print(f"Model URI: {logged_chain_info.model_uri}")
# To verify that the model has been logged correctly, load the chain and call `invoke`:
model = mlflow.langchain.load_model(logged_chain_info.model_uri)
model.invoke(example)
PyFunc를 사용하는 코드 기반 로깅
- 코드를 사용하여 Notebook 또는 Python 파일을 만듭니다. 이 예제에서는 Notebook 또는 파일의 이름을
chain.py
로 지정합니다. Notebook 또는 파일에는 여기에서PyFuncClass
로 참조하는 PyFunc 클래스가 포함되어야 합니다. - Notebook 또는 파일에
mlflow.models.set_model(PyFuncClass)
을 포함합니다. - 드라이버 Notebook으로 사용할 새 Notebook을 만듭니다(이 예제에서는
driver.py
로 부름). - 드라이버 Notebook에서
mlflow.pyfunc.log_model(python_model=”/path/to/chain.py”, resources=”/path/to/resources.yaml”)
을 사용하여chain.py
를 실행하고 MLflow 모델에 결과를 기록합니다. 매개 변수는resources
기본 모델을 제공하는 벡터 검색 인덱스 또는 서비스 엔드포인트와 같은 모델을 제공하는 데 필요한 모든 리소스를 선언합니다. PyFunc에 대한 예제 리소스 파일은 PyFunc 또는 LangChain 에이전트에 대한 리소스 지정을 참조하세요. - 모델을 배포합니다. 생성형 AI 응용 프로그램에 대한 에이전트 배포를 참조하세요.
- 제공하는 환경이 로드되면
chain.py
가 실행됩니다. - 제공하는 요청이 들어오면
PyFuncClass.predict(...)
가 호출됩니다.
import mlflow
code_path = "/Workspace/Users/first.last/chain.py"
config_path = "/Workspace/Users/first.last/config.yml"
input_example = {
"messages": [
{
"role": "user",
"content": "What is Retrieval-augmented Generation?",
}
]
}
# example using PyFunc model
resources_path = "/Workspace/Users/first.last/resources.yml"
with mlflow.start_run():
logged_chain_info = mlflow.pyfunc.log_model(
python_model=chain_notebook_path,
artifact_path="chain",
input_example=input_example,
resources=resources_path,
example_no_conversion=True,
)
print(f"MLflow Run: {logged_chain_info.run_id}")
print(f"Model URI: {logged_chain_info.model_uri}")
# To verify that the model has been logged correctly, load the chain and call `invoke`:
model = mlflow.pyfunc.load_model(logged_chain_info.model_uri)
model.invoke(example)
PyFunc 또는 LangChain 에이전트에 대한 리소스 지정
모델을 제공하는 데 필요한 벡터 검색 인덱스 및 서비스 엔드포인트와 같은 리소스를 지정할 수 있습니다.
LangChain의 경우 최상의 방법을 사용하여 리소스가 자동으로 검색되고 모델로 기록됩니다. MLflow 버전 2.17.0부터 아래와 유사한 코드를 사용하여 이러한 자동으로 유추된 리소스를 재정의할 수 있습니다. 에이전트가 필요한 종속성으로 기록되도록 할 수 있으므로 프로덕션 사용 사례에 권장됩니다.
pyfunc
버전이 지정된 에이전트를 배포할 때 배포된 에이전트의 모든 리소스 종속성을 수동으로 추가해야 합니다. resources
매개 변수에서 지정된 모든 리소스에 액세스할 수 있는 M2M OAuth 토큰이 만들어지고 배포된 에이전트에 제공됩니다.
참고 항목
체인을 로깅할 때 수동으로 리소스를 지정하여 엔드포인트에 사용 권한이 있는 리소스를 재정의할 수 있습니다.
다음 코드는 매개 변수를 사용하여 resources
종속성을 지정합니다.
import mlflow
from mlflow.models.resources import (
DatabricksFunction,
DatabricksServingEndpoint,
DatabricksSQLWarehouse,
DatabricksVectorSearchIndex,
)
with mlflow.start_run():
logged_chain_info = mlflow.pyfunc.log_model(
python_model=chain_notebook_path,
artifact_path="chain",
input_example=input_example,
example_no_conversion=True,
resources=[
DatabricksServingEndpoint(endpoint_name="databricks-mixtral-8x7b-instruct"),
DatabricksServingEndpoint(endpoint_name="databricks-bge-large-en"),
DatabricksVectorSearchIndex(index_name="prod.agents.databricks_docs_index"),
DatabricksSQLWarehouse(warehouse_id="your_warehouse_id"),
DatabricksFunction(function_name="ml.tools.python_exec"),
]
)
resources.yaml
파일에 리소스를 지정하여 리소스를 추가할 수도 있습니다. resources
매개 변수에서 해당 파일 경로를 참조할 수 있습니다. resources.yaml
에서 지정된 모든 리소스에 액세스할 수 있는 M2M OAuth 토큰이 만들어지고 배포된 에이전트에 제공됩니다.
다음은 엔드포인트 제공 모델 및 벡터 검색 인덱스를 정의하는 예제 resources.yaml
파일입니다.
api_version: "1"
databricks:
vector_search_index:
- name: "catalog.schema.my_vs_index"
serving_endpoint:
- name: databricks-dbrx-instruct
- name: databricks-bge-large-en
Unity 카탈로그에 체인 등록
체인을 배포하기 전에 Unity 카탈로그에 체인을 등록해야 합니다. 체인을 등록하면 이 체인은 Unity 카탈로그에 모델로 패키징되며, 체인의 리소스에 대한 권한 부여에 Unity 카탈로그 권한을 사용할 수 있습니다.
import mlflow
mlflow.set_registry_uri("databricks-uc")
catalog_name = "test_catalog"
schema_name = "schema"
model_name = "chain_name"
model_name = catalog_name + "." + schema_name + "." + model_name
uc_model_info = mlflow.register_model(model_uri=logged_chain_info.model_uri, name=model_name)
다음 단계
- AI 에이전트에 추적을 추가합니다.
- AI 에이전트를 배포합니다.