다음을 통해 공유


Databricks AI 에이전트를 시작해 보세요

이 자습서에서는 검색 및 도구를 함께 사용하는 AI 에이전트를 빌드하는 단계를 안내합니다. 데이터 세트는 이미 청크로 분할된 Databricks 설명서의 하위 집합으로 구성됩니다. 이 자습서에서는 키워드를 기반으로 문서를 검색하는 에이전트를 빌드합니다.

간단히 하기 위해 이 자습서에서는 문서에 대한 키워드 추출 및 키워드 검색을 위해 TF-IDF 기반으로 하는 간단한 메모리 내 접근 방식을 사용합니다. 예제 노트북 자습서에 사용된 모든 코드를 포함하고 있습니다. Mosaic AI Vector Search를 사용하여 문서를 확장성 있게 인덱싱하고 검색하는 보다 현실적인 예제는 ChatAgent 예제를 참조하세요.

이 자습서에서는 생성 AI 애플리케이션을 빌드하는 데 발생하는 몇 가지 핵심 과제에 대해 설명합니다.

  • 도구 만들기 및 에이전트 실행 디버깅과 같은 일반적인 작업에 대한 개발 환경을 간소화합니다.
  • 다음과 같은 운영 과제:
    • 추적 에이전트 구성
    • 예측 가능한 방식으로 입력 및 출력 정의
    • 종속성 버전 관리
    • 버전 제어 및 배포
  • 에이전트의 품질과 안정성을 측정하고 개선합니다.

생성 AI 앱 가이드 를 탐색하여 에이전트를 빌드하는 전체 개발 프로세스에 대한 가이드를 확인하세요.

예제 노트북

이 독립 실행형 Notebook은 샘플 문서 모음을 사용하여 Mosaic AI 에이전트로 빠르게 작업할 수 있도록 설계되었습니다. 설치 또는 데이터가 필요 없이 실행할 준비가 된 것입니다.

모자이크 AI 에이전트 데모

노트북 가져오기

에이전트 및 도구 만들기

Mosaic AI 에이전트 프레임워크는 다양한 제작 프레임워크를 지원합니다. 이 예제에서는 LangGraph를 사용하여 개념을 설명하지만 LangGraph 자습서는 아닙니다.

지원되는 다른 프레임워크의 예제는 ChatAgent 예제를 참조하세요.

첫 번째 단계는 에이전트를 만드는 것입니다. LLM 클라이언트와 도구 목록을 지정해야 합니다. databricks-langchain Python 패키지에는 Databricks LLM 및 Unity 카탈로그에 등록된 도구 모두에 대한 LangChain 및 LangGraph 호환 클라이언트가 포함됩니다.

엔드포인트는 AI 게이트웨이를 사용하는 함수 호출 Foundation Model API 또는 외부 모델이어야 합니다. 지원되는 모델을 참조하세요.

from databricks_langchain import ChatDatabricks
llm = ChatDatabricks(endpoint="databricks-meta-llama-3-3-70b-instruct")

다음 코드는 모델 및 일부 도구에서 에이전트를 만드는 함수를 정의합니다. 이 에이전트 코드의 내부는 이 가이드의 범위를 벗어납니다. LangGraph 에이전트를 빌드하는 방법에 대한 자세한 내용은 LangGraph 설명서참조하세요.

from typing import Optional, Sequence, Union

from langchain_core.language_models import LanguageModelLike
from langchain_core.runnables import RunnableConfig, RunnableLambda
from langchain_core.tools import BaseTool
from langgraph.graph import END, StateGraph
from langgraph.graph.graph import CompiledGraph
from langgraph.prebuilt.tool_executor import ToolExecutor
from mlflow.langchain.chat_agent_langgraph import ChatAgentState, ChatAgentToolNode


def create_tool_calling_agent(
  model: LanguageModelLike,
  tools: Union[ToolExecutor, Sequence[BaseTool]],
  agent_prompt: Optional[str] = None,
) -> CompiledGraph:
  model = model.bind_tools(tools)

  def routing_logic(state: ChatAgentState):
    last_message = state["messages"][-1]
    if last_message.get("tool_calls"):
      return "continue"
    else:
      return "end"

  if agent_prompt:
    system_message = {"role": "system", "content": agent_prompt}
    preprocessor = RunnableLambda(
      lambda state: [system_message] + state["messages"]
    )
  else:
    preprocessor = RunnableLambda(lambda state: state["messages"])
  model_runnable = preprocessor | model

  def call_model(
    state: ChatAgentState,
    config: RunnableConfig,
  ):
    response = model_runnable.invoke(state, config)

    return {"messages": [response]}

  workflow = StateGraph(ChatAgentState)

  workflow.add_node("agent", RunnableLambda(call_model))
  workflow.add_node("tools", ChatAgentToolNode(tools))

  workflow.set_entry_point("agent")
  workflow.add_conditional_edges(
    "agent",
    routing_logic,
    {
      "continue": "tools",
      "end": END,
    },
  )
  workflow.add_edge("tools", "agent")

  return workflow.compile()

에이전트 도구 정의

도구는 에이전트를 빌드하기 위한 기본 개념입니다. 사용자 정의 코드와 LLM을 통합하는 기능을 제공합니다. 프롬프트와 도구 목록을 제공하면 도구 호출 LLM은 도구를 호출하는 인수를 생성합니다. Mosaic AI 에이전트에서 도구 및 도구 사용에 대한 자세한 내용은 AI 에이전트 도구참조하세요.

첫 번째 단계는 TF-IDF를 기반으로 키워드 추출 도구를 만드는 것입니다. 이 예제에서는 scikit-learn 및 Unity 카탈로그 도구를 사용합니다.

databricks-langchain 패키지는 Unity 카탈로그 도구를 사용하는 편리한 방법을 제공합니다. 다음 코드에서는 키워드 추출기 도구를 구현하고 등록하는 방법을 보여 줍니다.

메모

Databricks 작업 영역에는 샌드박스 실행 환경에서 Python 스크립트를 실행할 수 있는 기능을 사용하여 에이전트를 확장하는 데 사용할 수 있는 기본 제공 도구 system.ai.python_exec있습니다. 기타 유용한 기본 제공 도구로는 외부 연결AI 함수포함됩니다.

from databricks_langchain.uc_ai import (
  DatabricksFunctionClient,
  UCFunctionToolkit,
  set_uc_function_client,
)

uc_client = DatabricksFunctionClient()
set_uc_function_client(client)

# Change this to your catalog and schema
CATALOG = "main"
SCHEMA = "my_schema"


def tfidf_keywords(text: str) -> list[str]:
  """
  Extracts keywords from the provided text using TF-IDF.

  Args:
    text (string): Input text.
  Returns:
    list[str]: List of extracted keywords in ascending order of importance.
  """
  from sklearn.feature_extraction.text import TfidfVectorizer

  def keywords(text, top_n=5):
    vec = TfidfVectorizer(stop_words="english")
    tfidf = vec.fit_transform([text])  # Convert text to TF-IDF matrix
    indices = tfidf.toarray().argsort()[0, -top_n:]  # Get indices of top N words
    return [vec.get_feature_names_out()[i] for i in indices]

  return keywords(text)


# Create the function in the Unity Catalog catalog and schema specified
# When you use `.create_python_function`, the provided function’s metadata
# (docstring, parameters, return type) are used to create a tool in the specified catalog and schema.
function_info = uc_client.create_python_function(
  func=tfidf_keywords,
  catalog=CATALOG,
  schema=SCHEMA,
  replace=True,  # Set to True to overwrite if the function already exists
)

print(function_info)

위의 코드에 대한 설명은 다음과 같습니다.

  1. Databricks 작업 영역에서 Unity 카탈로그를 "레지스트리"로 사용하여 도구를 만들고 검색하는 클라이언트를 만듭니다.
  2. TF-IDF 키워드 추출을 수행하는 Python 함수를 정의합니다.
  3. Python 함수를 Unity 카탈로그 함수로 등록합니다.

이 워크플로는 몇 가지 일반적인 문제를 해결합니다. 이제 Unity 카탈로그의 다른 개체와 마찬가지로 제어할 수 있는 도구에 대한 중앙 레지스트리가 있습니다. 예를 들어 회사에 내부 수익률을 계산하는 표준 방법이 있는 경우 Unity 카탈로그에서 함수로 정의하고 FinancialAnalyst 역할을 가진 모든 사용자 또는 에이전트에 대한 액세스 권한을 부여할 수 있습니다.

LangChain 에이전트에서 이 도구를 사용할 수 있도록 하려면 선택하기 위해 LLM에 제공할 도구 컬렉션을 만드는 [UCFunctionToolkit](/generative-ai/agent-framework/create-custom-tool.md]를 사용합니다.

# Use ".*" here to specify all the tools in the schema, or
# explicitly list functions by name
# uc_tool_names = [f"{CATALOG}.{SCHEMA}.*"]
uc_tool_names = [f"{CATALOG}.{SCHEMA}.tfidf_keywords"]
uc_toolkit = UCFunctionToolkit(function_names=uc_tool_names)

다음 코드는 도구를 테스트하는 방법을 보여줍니다.

uc_toolkit.tools[0].invoke({ "text": "The quick brown fox jumped over the lazy brown dog." })

다음 코드는 키워드 추출 도구를 사용하는 에이전트를 만듭니다.

import mlflow
mlflow.langchain.autolog()

agent = create_tool_calling_agent(llm, tools=[*uc_toolkit.tools])

agent.invoke({"messages": [{"role": "user", "content":"What are the keywords for the sentence: 'the quick brown fox jumped over the lazy brown dog'?"}]})

결과 추적에서 LLM이 도구를 선택한 것을 볼 수 있습니다.

Notebook에서 도구 선택을 보여주는 MLflow 추적 출력.

에이전트를 추적하여 디버깅하십시오

MLflow 추적은 에이전트를 비롯한 생성 AI 애플리케이션을 디버깅하고 관찰하기 위한 강력한 도구입니다. 특정 코드 세그먼트를 캡슐화하고 입력, 출력 및 타이밍 데이터를 기록하는 범위를 통해 자세한 실행 정보를 캡처합니다.

LangChain과 같은 인기 있는 라이브러리의 경우 mlflow.langchain.autolog()사용하여 자동 추적을 사용하도록 설정합니다. mlflow.start_span() 사용하여 추적을 사용자 지정할 수도 있습니다. 예를 들어 사용자 지정 데이터 값 필드를 추가하거나 관찰 가능성을 위해 레이블을 지정할 수 있습니다. 해당 범위의 컨텍스트에서 실행되는 코드는 정의한 필드와 연결됩니다. 이 메모리 내 TF-IDF 예제에서는 이름과 범위 형식을 지정합니다.

추적에 대한 자세한 내용은 에이전트 관찰 가능성 및 MLflow 추적을 참조하세요.

다음 예제에서는 간단한 메모리 내 TF-IDF 인덱스로 리트리버 도구를 만듭니다. 도구 실행에 대한 자동 로깅과 추가 관찰을 위한 사용자 지정 범위 추적을 모두 보여 줍니다.

from sklearn.feature_extraction.text import TfidfVectorizer
import mlflow
from langchain_core.tools import tool


documents = parsed_docs_df
doc_vectorizer = TfidfVectorizer(stop_words="english")
tfidf_matrix = doc_vectorizer.fit_transform(documents["content"])


@tool
def find_relevant_documents(query, top_n=5):
  """gets relevant documents for the query"""
  with mlflow.start_span(name="LittleIndex", span_type="RETRIEVER") as retriever_span:
    retriever_span.set_inputs({"query": query})
    retriever_span.set_attributes({"top_n": top_n})

    query_tfidf = doc_vectorizer.transform([query])
    similarities = (tfidf_matrix @ query_tfidf.T).toarray().flatten()
    ranked_docs = sorted(enumerate(similarities), key=lambda x: x[1], reverse=True)

    result = []
    for idx, score in ranked_docs[:top_n]:
      row = documents.iloc[idx]
      content = row["content"]
      doc_entry = {
        "page_content": content,
        "metadata": {
          "doc_uri": row["doc_uri"],
          "score": score,
        },
      }
      result.append(doc_entry)

    retriever_span.set_outputs(result)
    return result

이 코드는 검색기 도구용으로 예약된 특수 범위 형식인 RETRIEVER사용합니다. 다른 모자이크 AI 에이전트 기능(예: AI Playground, 검토 UI 및 평가)은 RETRIEVER 범위 유형을 사용하여 검색 결과를 표시합니다.

리트리버 도구를 사용하려면 해당 스키마를 지정하여 다운스트림 Databricks 기능과의 호환성을 보장해야 합니다. mlflow.models.set_retriever_schema에 대한 자세한 내용은 사용자 지정 검색기 스키마 지정를 참조하세요.

import mlflow
from mlflow.models import set_retriever_schema

uc_toolkit = UCFunctionToolkit(function_names=[f"{CATALOG}.{SCHEMA}.*"])

graph = create_tool_calling_agent(llm, tools=[*uc_toolkit.tools, find_relevant_documents])

mlflow.langchain.autolog()
set_retriever_schema(
  primary_key="chunk_id",
  text_column="chunk_text",
  doc_uri="doc_uri",
  other_columns=["title"],
)

graph.invoke(input = {"messages": [("user", "How do the docs say I use llm judges on databricks?")]})

메타데이터를 보여 주는 검색 결과입니다.

에이전트 정의

다음 단계는 에이전트를 평가하고 배포를 준비하는 것입니다. 대략적으로는 다음과 같은 작업이 포함됩니다.

  1. 서명을 사용하여 에이전트에 대한 예측 가능한 API를 정의합니다.
  2. 모델 구성을 추가하여 매개 변수를 쉽게 구성할 수 있습니다.
  3. 재현 가능한 환경을 제공하고 다른 서비스에 대한 인증을 구성할 수 있도록 하는 종속성을 사용하여 모델을 기록합니다.

MLflow ChatAgent 인터페이스는 에이전트 입력 및 출력을 간단하게 정의합니다. 이를 사용하려면 에이전트를 ChatAgent하위 클래스로 정의하여 predict 함수를 사용하여 비 스트리밍 유추를 구현하고 predict_stream 함수를 사용하여 스트리밍 유추를 구현합니다.

ChatAgent 다양한 프레임워크 및 에이전트 구현을 쉽게 테스트하고 사용할 수 있도록 하는 에이전트 작성 프레임워크 선택에 구애받지 않습니다. 유일한 요구 사항은 predictpredict_stream 인터페이스를 구현하는 것입니다.

ChatAgent 사용하여 에이전트를 작성하면 다음을 비롯한 다양한 이점이 제공됩니다.

  • 스트리밍 출력 지원
  • 포괄적인 도구 호출 메시지 기록: 품질 및 대화 관리를 개선하기 위해 중간 도구 호출 메시지를 비롯한 여러 메시지를 반환합니다.
  • 다중 에이전트 시스템 지원
  • Databricks 기능 통합: AI Playground, 에이전트 평가 및 에이전트 모니터링과 즉시 사용 가능한 기본 제공 호환성.
  • 형식화된 작성 인터페이스: 형식화된 Python 클래스를 사용하여 에이전트 코드를 작성하여 IDE 및 Notebook 자동 완성을 활용합니다.

ChatAgent을 작성하는 방법에 대한 자세한 내용은 을 참조하십시오. 에이전트작성에는 ChatAgent를 사용하세요.

from mlflow.pyfunc import ChatAgent
from mlflow.types.agent import (
  ChatAgentChunk,
  ChatAgentMessage,
  ChatAgentResponse,
  ChatContext,
)
from typing import Any, Optional


class DocsAgent(ChatAgent):
  def __init__(self, agent):
    self.agent = agent
    set_retriever_schema(
      primary_key="chunk_id",
      text_column="chunk_text",
      doc_uri="doc_uri",
      other_columns=["title"],
    )

  def predict(
    self,
    messages: list[ChatAgentMessage],
    context: Optional[ChatContext] = None,
    custom_inputs: Optional[dict[str, Any]] = None,
  ) -> ChatAgentResponse:
    # ChatAgent has a built-in helper method to help convert framework-specific messages, like langchain BaseMessage to a python dictionary
    request = {"messages": self._convert_messages_to_dict(messages)}

    output = agent.invoke(request)
    # Here 'output' is already a ChatAgentResponse, but to make the ChatAgent signature explicit for this demonstration, the code returns a new instance
    return ChatAgentResponse(**output)

다음 코드는 ChatAgent사용하는 방법을 보여줍니다.

AGENT = DocsAgent(agent=agent)
AGENT.predict(
  {
    "messages": [
      {"role": "user", "content": "What is DLT in Databricks?"},
    ]
  }
)

매개 변수를 사용하여 에이전트 구성

에이전트 프레임워크를 사용하면 매개 변수를 사용하여 에이전트 실행을 제어할 수 있습니다. 즉, 기본 코드를 변경하지 않고 LLM 엔드포인트를 전환하거나 다른 도구를 시도하는 등 다양한 에이전트 구성을 빠르게 테스트할 수 있습니다.

다음 코드는 모델을 초기화할 때 에이전트 매개 변수를 설정하는 구성 사전을 만듭니다.

에이전트 매개변수화에 대한 자세한 내용은 환경 간에 배포할 에이전트 코드 매개변수화을 참조하세요.

)

from mlflow.models import ModelConfig

baseline_config = {
  "endpoint_name": "databricks-meta-llama-3-1-70b-instruct",
  "temperature": 0.01,
  "max_tokens": 1000,
  "system_prompt": """You are a helpful assistant that answers questions about Databricks. Questions unrelated to Databricks are irrelevant.


  You answer questions using a set of tools. If needed, you ask the user follow-up questions to clarify their request.
  """,
  "tool_list": ["catalog.schema.*"],
}


class DocsAgent(ChatAgent):
  def __init__(self):
    self.config = ModelConfig(development_config=baseline_config)
    self.agent = self._build_agent_from_config()


def _build_agent_from_config(self):
  temperature = config.get("temperature", 0.01)
  max_tokens = config.get("max_tokens", 1000)
  system_prompt = config.get("system_prompt", """You are a helpful assistant.
    You answer questions using a set of tools. If needed you ask the user follow-up questions to clarify their request.""")
  llm_endpoint_name = config.get("endpoint_name", "databricks-meta-llama-3-3-70b-instruct")
  tool_list = config.get("tool_list", [])

  llm = ChatDatabricks(endpoint=llm_endpoint_name, temperature=temperature, max_tokens=max_tokens)
  toolkit = UCFunctionToolkit(function_names=tool_list)
  agent = create_tool_calling_agent(llm, tools=[*toolkit.tools, find_relevant_documents], prompt=system_prompt)

  return agent

에이전트를 기록하세요

에이전트를 정의한 후 이제 로깅할 준비가 되었습니다. MLflow에서 에이전트 로깅은 에이전트의 구성(종속성 포함)을 저장하여 평가 및 배포에 사용할 수 있도록 하는 것을 의미합니다.

메모

Notebook에서 에이전트를 개발할 때 MLflow는 Notebook 환경에서 에이전트의 종속성을 유추합니다.

Notebook에서 에이전트를 기록하려면 모델을 정의하는 모든 코드를 단일 셀에 작성한 다음, %%writefile 매직 명령을 사용하여 에이전트의 정의를 파일에 저장할 수 있습니다.

%%writefile agent.py
...
<Code that defines the agent>

키워드 추출 도구를 실행하기 위해 에이전트에서 Unity 카탈로그와 같은 외부 리소스에 액세스해야 하는 경우 배포 시 리소스에 액세스할 수 있도록 에이전트에 대한 인증을 구성해야 합니다.

Databricks 리소스에 대한 인증을 간소화하려면 자동 인증 통과사용하도록 설정합니다.

from mlflow.models.resources import DatabricksFunction, DatabricksServingEndpoint


resources = [
  DatabricksServingEndpoint(endpoint_name=LLM_ENDPOINT_NAME),
  DatabricksFunction(function_name=tool.uc_function_name),
]


with mlflow.start_run():
  logged_agent_info = mlflow.pyfunc.log_model(
    artifact_path="agent",
    python_model="agent.py",
    pip_requirements=[
      "mlflow",
      "langchain",
      "langgraph",
      "databricks-langchain",
      "unitycatalog-langchain[databricks]",
      "pydantic",
    ],
    resources=resources,
  )

로깅 에이전트에 대한 자세한 내용은 코드 기반 로깅참조하세요.

에이전트를 평가하십시오

다음 단계는 에이전트를 평가하여 수행하는 방법을 확인하는 것입니다. 에이전트 평가는 어려운 문제이며 다음과 같은 많은 질문을 제기합니다.

  • 품질을 평가하는 데 적합한 메트릭은 무엇인가요? 이러한 메트릭의 출력을 신뢰하려면 어떻게 해야 하나요?
  • 나는 많은 아이디어를 평가해야합니다 - 어떻게해야합니까 ...
    • 평가를 빠르게 실행하므로 대부분의 시간이 대기하는 데 소요되지 않나요?
    • 이러한 다양한 버전의 에이전트를 품질, 비용 및 대기 시간에 대해 빠르게 비교하시겠습니까?
  • 품질 문제의 근본 원인을 신속하게 식별하려면 어떻게 해야 하나요?

데이터 과학자 또는 개발자는 실제 주제 전문가가 아닐 수 있습니다. 이 섹션의 나머지 부분에서는 적절한 출력을 정의하는 데 도움이 되는 에이전트 평가 도구에 대해 설명합니다.

평가 집합 만들기

에이전트의 품질을 정의하려면 메트릭을 사용하여 평가 집합에서 에이전트의 성능을 측정합니다. "품질"의 정의:평가 집합을 참조하세요.

에이전트 평가를 사용하면 가상 평가 집합을 만들고 평가를 실행하여 품질을 측정할 수 있습니다. 이 아이디어는 문서 집합과 같은 사실에서 시작하여 이러한 사실을 사용하여 일련의 질문을 생성하여 "뒤로 작업"하는 것입니다. 몇 가지 지침을 제공하여 생성된 질문을 조건부로 지정할 수 있습니다.

from databricks.agents.evals import generate_evals_df
import pandas as pd


databricks_docs_url = "https://raw.githubusercontent.com/databricks/genai-cookbook/refs/heads/main/quick_start_demo/chunked_databricks_docs_filtered.jsonl"
parsed_docs_df = pd.read_json(databricks_docs_url, lines=True)


agent_description = f"""
The agent is a RAG chatbot that answers questions about Databricks. Questions unrelated to Databricks are irrelevant.
"""
question_guidelines = f"""
# User personas
- A developer who is new to the Databricks platform
- An experienced, highly technical Data Scientist or Data Engineer


# Example questions
- what API lets me parallelize operations over rows of a delta table?
- Which cluster settings will give me the best performance when using Spark?


# Additional Guidelines
- Questions should be succinct, and human-like
"""


num_evals = 25
evals = generate_evals_df(
  docs=parsed_docs_df[
    :500
  ],  # Pass your docs. They should be in a Pandas or Spark DataFrame with columns `content STRING` and `doc_uri STRING`.
  num_evals=num_evals,  # How many synthetic evaluations to generate
  agent_description=agent_description,
  question_guidelines=question_guidelines,
)

생성된 평가에는 다음이 포함됩니다.

  • 앞에서 언급한 ChatAgentRequest 같은 요청 필드입니다.

    {"messages":[{"content":"What command must be run at the start of your workload to explicitly target the Workspace Model Registry if your workspace default catalog is in Unity Catalog and you use Databricks Runtime 13.3 LTS or above?","role":"user"}]}
    
  • "예상 검색된 콘텐츠" 목록입니다. 검색기 스키마는 contentdoc_uri 필드로 정의되었습니다.

    [{"content":"If your workspace’s [default catalog](https://docs.databricks.com/data-governance/unity-catalog/create-catalogs.html#view-the-current-default-catalog) is in Unity Catalog (rather than `hive_metastore`) and you are running a cluster using Databricks Runtime 13.3 LTS or above, models are automatically created in and loaded from the workspace default catalog, with no configuration required. To use the Workspace Model Registry in this case, you must explicitly target it by running `import mlflow; mlflow.set_registry_uri(\"databricks\")` at the start of your workload.","doc_uri":"https://docs.databricks.com/machine-learning/manage-model-lifecycle/workspace-model-registry.html"}]
    
  • 예상된 사실 목록입니다. 두 응답을 비교할 때 두 응답 간에 작은 차이점을 찾기 어려울 수 있습니다. 예상된 사실은 정답, 부분적으로 정답인 답변, 잘못된 답변을 구분하여 AI 심사위원의 품질과 에이전트에서 일하는 사람들의 경험을 향상시킵니다.

    ["The command must import the MLflow module.","The command must set the registry URI to \"databricks\"."]
    
  • source_id 필드는 여기 SYNTHETIC_FROM_DOC입니다. 보다 완전한 평가 집합을 빌드할 때 샘플은 다양한 원본에서 나오므로 이 필드는 이를 구분합니다.

평가 집합을 만드는 방법에 대한 자세한 내용은 평가 집합 통합을 참조하세요.

LLM 심사위원을 사용하여 에이전트 평가

생성된 많은 예제에서 에이전트의 성능을 수동으로 평가하는 것은 확장되지 않을 것입니다. 대규모로 LLM을 심사위원으로 사용하는 것이 훨씬 더 합리적인 솔루션입니다. 에이전트 평가를 사용할 때 사용할 수 있는 기본 제공 심사위원을 사용하려면 다음 코드를 사용합니다.

with mlflow.start_run(run_name="my_agent"):
  eval_results = mlflow.evaluate(
    data=evals,  # Your evaluation set
    model=model_info.model_uri,  # Logged agent from above
    model_type="databricks-agent",  # activate Mosaic AI Agent Evaluation
)

MLflow 실험 - 평가 결과입니다.

간단한 에이전트는 전체적으로 68점%을 기록했습니다. 여기서는 사용하는 구성에 따라 결과가 다를 수 있습니다. 비용 및 품질에 대해 세 개의 서로 다른 LLM을 비교하는 실험을 실행하는 것은 구성을 변경하고 다시 평가하는 것만큼 간단합니다.

다른 LLM, 시스템 프롬프트 또는 온도 설정을 사용하도록 모델 구성을 변경하는 것이 좋습니다.

이러한 심사위원은 인간 전문가가 응답을 평가하는 데 사용하는 것과 동일한 지침을 따르도록 사용자 지정할 수 있습니다. LLM 심사위원에 대한 자세한 내용은 기본 제공 AI 심사위원참조하세요.

에이전트 평가를 사용하면 사용자 지정 메트릭사용하여 특정 에이전트의 품질을 측정하는 방법을 사용자 지정할 수 있습니다. 평가를 통합 테스트와 같은 것으로 간주하고 개별 메트릭을 단위 테스트로 간주할 수 있습니다. 다음 예제에서는 부울 메트릭을 사용하여 에이전트가 지정된 요청에 대해 키워드 추출과 검색기를 모두 사용했는지 확인합니다.

from databricks.agents.evals import metric

@metric
def uses_keywords_and_retriever(request, trace):
  retriever_spans = trace.search_spans(span_type="RETRIEVER")
  keyword_tool_spans = trace.search_spans(name=f"{CATALOG}__{SCHEMA}__tfidf_keywords")
  return len(keyword_tool_spans) > 0 and len(retriever_spans) > 0


# same evaluate as above, with the addition of 'extra_metrics'
with mlflow.start_run(run_name="my_agent"):
  eval_results = mlflow.evaluate(
    data=evals,  # Your evaluation set
    model=model_info.model_uri,  # Logged agent from above
    model_type="databricks-agent",  # activate Mosaic AI Agent Evaluation,
    extra_metrics=[uses_keywords_and_retriever],
  )

에이전트는 키워드 추출을 사용하지 않습니다. 이 문제를 어떻게 해결할 수 있나요?

사용자 지정 메트릭 출력을 보여 주는 평가 결과입니다.

에이전트 배포 및 모니터링

실제 사용자로 에이전트 테스트를 시작할 준비가 되면 에이전트 프레임워크는 Mosaic AI 모델 서비스에서 에이전트를 제공하기 위한 프로덕션 준비 솔루션을 제공합니다.

Model Serving에 에이전트를 배포하면 다음과 같은 이점이 제공됩니다.

  • Model Serving는 자동 크기 조정, 로깅, 버전 제어 및 액세스 제어를 관리하므로 품질 에이전트 개발에 집중할 수 있습니다.
  • 주제 전문가는 검토 앱을 사용하여 에이전트와 상호 작용하고 모니터링 및 평가에 통합할 수 있는 피드백을 제공할 수 있습니다.
  • 라이브 트래픽에 대한 평가를 실행하여 에이전트를 모니터링할 수 있습니다. 사용자 트래픽에는 기본 진리가 포함되지 않지만 LLM 심사위원(및 사용자가 만든 사용자 지정 메트릭)은 감독되지 않은 평가를 수행합니다.

다음 코드는 서비스 엔드포인트에 에이전트를 배포합니다. 자세한 내용은 생성 AI 애플리케이션대한 에이전트 배포를 참조하세요.

from databricks import agents
import mlflow

# Connect to the Unity Catalog model registry
mlflow.set_registry_uri("databricks-uc")

# Configure UC model location
UC_MODEL_NAME = f"{CATALOG}.{SCHEMA}.getting_started_agent"
# REPLACE WITH UC CATALOG/SCHEMA THAT YOU HAVE `CREATE MODEL` permissions in

# Register to Unity Catalog
uc_registered_model_info = mlflow.register_model(
  model_uri=model_info.model_uri, name=UC_MODEL_NAME
)
# Deploy to enable the review app and create an API endpoint
deployment_info = agents.deploy(
  model_name=UC_MODEL_NAME, model_version=uc_registered_model_info.version
)