다음을 통해 공유


LLM 개발을 위한 Azure Databricks의 LangChain

Important

이러한 기능은 실험적 기능이며 API 정의가 변경될 수 있습니다.

이 문서에서는 Azure Databricks에서 LLM(대규모 언어 모델)의 개발 및 배포를 용이하게 하는 LangChain 통합에 대해 설명합니다.

이러한 LangChain 통합을 사용하면 다음을 수행할 수 있습니다.

  • LangChain 애플리케이션에서 Databricks 제공 모델을 LLM 또는 embeddings로 사용합니다.

  • Mosaic AI Vector Search를 벡터 스토리지 및 검색에 통합합니다.

  • MLflow 실험에서 LangChain 모델 및 성능을 관리하고 추적합니다.

  • MLflow 추적을 사용하여 LangChain 애플리케이션의 개발 및 프로덕션 단계를 추적합니다.

  • PySpark DataFrame 로더를 사용하여 PySpark DataFrame에서 데이터를 원활하게 로드합니다.

  • Spark DataFrame 에이전트 또는 Databricks SQL 에이전트를 사용하여 자연어를 사용하여 데이터를 대화형으로 쿼리합니다.

LangChain이란?

LangChain은 대규모 언어 모델(LLM)을 활용하는 애플리케이션을 만드는 데 도움이 되도록 설계된 소프트웨어 프레임워크입니다. LangChain의 강점은 다양한 통합 및 기능에 있습니다. 여기에는 API 래퍼, 웹 스크래핑 하위 시스템, 코드 분석 도구, 문서 요약 도구 등이 포함됩니다. 또한 OpenAI, Anthropic, HuggingFace 등의 대규모 언어 모델과 다양한 데이터 원본 및 형식을 지원합니다.

LangChain 개발을 위한 MLflow 활용

LangChain은 MLflow 버전으로 사용할 수 있으며, 이를 통해 사용자는 Databricks 내에서 직접 개발 및 프로덕션 환경 모두에서 실험 추적 및 관찰을 위한 MLflow의 강력한 도구를 활용할 수 있습니다. LangChain과 함께 MLflow를 사용하는 방법에 대한 자세한 내용 및 지침은 MLflow LangChain 버전 설명서를 참조하세요.

Databricks의 MLflow는 오픈 소스 버전과 구별되는 추가 기능을 제공하여 다음 기능을 사용하여 개발 환경을 향상합니다.

  • 완전 관리형 MLflow 추적 서버: Databricks 작업 영역 내에서 즉시 사용할 수 있으므로 설정 지연 없이 실험 추적을 시작할 수 있습니다.

  • Databricks Notebooks와의 원활한 통합: 실험은 자동으로 Notebook에 연결되어 추적 프로세스를 간소화합니다.

  • Databricks에서 MLflow추적 : 추론 통합을 통해 프로덕션 수준의 모니터링을 제공하며, 개발부터 프로덕션까지 엔드투엔드의 관측 가능성을 보장합니다.

  • Unity 를 사용한 모델 수명 주기 관리: 작업 영역 전반에서 액세스, 감사, 계보 및 모델 검색을 중앙 집중식으로 제어합니다.

  • Mosaic AI 에이전트통합 평가: LangChain 애플리케이션의 품질, 비용 및 대기 시간을 평가합니다.

이러한 기능을 활용하여 LangChain 기반 프로젝트의 개발, 모니터링 및 관리를 optimize Databricks를 MLflow 기반 AI 이니셔티브에 가장 적합한 선택으로 만들 수 있습니다.

요구 사항

  • Databricks Runtime 13.3 ML 이상.
  • LangChain Databricks 통합 패키지 및 Databricks SQL 커넥터를 설치합니다. Databricks는 최신 버전의 LangChain을 설치하여 최신 업데이트가 있는지 확인할 것도 권장합니다.
    • %pip install --upgrade databricks-langchain langchain-community langchain databricks-sql-connector

Databricks 제공 모델을 LLM 또는 포함으로 사용

Databricks Model Serving를 이용하여 서비스되는 LLM이나 임베딩이 있는 경우 OpenAI, HuggingFace 또는 다른 LLM 공급자 대신 LangChain 내에서 직접 사용할 수 있습니다.

모델에 서비스하는 엔드포인트를 LangChain에서 LLM 또는 임베딩으로 이용하기 위해서는 다음이 필요합니다.

  • 엔드포인트에 서비스하는 Azure Databricks 모델에 배포된 등록된 LLM 또는 임베딩 모델.
    • 대안으로, 작업 영역에 배포되어 즉시 사용 가능한 오픈 소스 모델의 큐레이팅된 을 활용하여 list을 통해 제공되는 모델을 사용할 수 있습니다.
  • 엔드포인트에 대한 CAN QUERY 권한입니다.

채팅 모델

다음 예제에서는 Foundation Models API를 사용하여 LangChain에서 Meta의 Llama 3.1 70B 지시 모델을 LLM 구성 요소로 사용하는 방법을 보여 줍니다.


from databricks_langchain import ChatDatabricks

chat_model = ChatDatabricks(
    endpoint="databricks-meta-llama-3-1-70b-instruct"
    temperature=0.1,
    max_tokens=250,
)
chat_model.invoke("How to use Databricks?")

엔드포인트를 서비스 엔드포인트에 배포된 사용자 지정 모델로 바꿀 수 있습니다. 스트리밍, 비동기 호출 및 함수 호출과 같은 추가 예제는 LangChain 설명서에서 찾을 수 있습니다.

포함(Embeddings)

다음 예제에서는 Foundation Models API를 사용하여 databricks-bge-large-en 임베딩 모델을 LangChain의 포함 구성 요소로 사용하는 방법을 보여 줍니다.


from databricks_langchain import DatabricksEmbeddings

embeddings = DatabricksEmbeddings(endpoint="databricks-bge-large-en")

자세한 내용은 LangChain 설명서에서 확인할 수 있습니다.

LLMs

Warning

완성 모델은 레거시 기능으로 간주됩니다. 대부분의 최신 모델은 채팅 완료 인터페이스를 활용하며 대신 ChatModel 구성 요소와 함께 사용해야 합니다.

다음 예제에서는 LangChain에서 완성 모델 API를 LLM 구성 요소로 사용하는 방법을 보여 줍니다.

from langchain_community.llms import Databricks

llm = Databricks(endpoint_name="falcon-7b-instruct", model_kwargs={"temperature": 0.1, "max_tokens": 100})
llm("How are you?")

Mosaic AI 벡터 검색을 벡터 저장소로 사용

Mosaic AI Vector Search는 Databricks의 서버리스 유사성 검색 엔진으로, 메타데이터를 포함한 데이터의 벡터 표현을 벡터 데이터베이스에 저장할 수 있습니다. Unity tables에서 관리하는 Delta Catalog을 기반으로 한 자동 업데이트 벡터 검색 인덱스를 생성할 수 있으며, 간단한 API를 통해 쿼리하여 가장 유사한 벡터를 검색할 수 있습니다.

LangChain에서 이 기능을 사용하려면 DatabricksVectorSearch 인스턴스를 만듭니다.

from databricks_langchain import DatabricksVectorSearch

vector_store = DatabricksVectorSearch(index_name="<YOUR_VECTOR_SEARCH_INDEX_NAME>")
retriever = vector_store.as_retriever(search_kwargs={"k": 5})
retriever.invoke("What is Databricks?")

자세한 내용은 DatabricksVectorSearch 설명서를 참조하세요.

Unity Catalog 함수를 도구로 사용

참고 항목

Unity Catalog 함수 통합은 langchain-community 패키지에 있습니다. 기능에 액세스하려면 %pip install langchain-community을 사용하여 설치해야 합니다. 이 통합은 향후 릴리스에서 databricks-langchain 패키지로 마이그레이션됩니다.

Unity Catalog의 SQL 또는 Python 함수를 LangChain 에이전트의 도구로 노출시킬 수 있습니다. Unity Catalog 함수를 만들고 LangChain에서 사용하는 방법에 대한 전체 지침은 Databricks UC 도구 키트 설명서참조하세요.

PySpark DataFrame 로더를 사용하여 데이터 로드

LangChain의 PySpark DataFrame 로더는 단일 메서드를 사용하여 PySpark DataFrame에서 데이터 로드를 간소화합니다.

from langchain.document_loaders import PySparkDataFrameLoader

loader = PySparkDataFrameLoader(spark, wikipedia_dataframe, page_content_column="text")
documents = loader.load()

다음 Notebook에서는 PySpark DataFrame 로더가 MLflow로 기록되는 검색 기반 챗봇을 만드는 예제 where를 보여줍니다. 그런 다음 모델을 일반 Python 함수로 해석하여 mlflow.pyfunc.load_model()로 추론할 수 있습니다.

Langchain Notebook의 PySpark DataFrame 로더 및 MLflow

Get 노트북

Spark DataFrame 에이전트

LangChain의 Spark DataFrame 에이전트는 질문 답변에 최적화된 Spark DataFrame과의 상호 작용을 허용합니다. LangChain의 Spark DataFrame 에이전트 설명서에서는 데이터 프레임에서 Spark DataFrame 에이전트를 만들고 사용하는 방법에 대한 자세한 예제를 제공합니다.

from langchain.agents import create_spark_dataframe_agent

df = spark.read.csv("/databricks-datasets/COVID/coronavirusdataset/Region.csv", header=True, inferSchema=True)
display(df)

agent = create_spark_dataframe_agent(llm=OpenAI(temperature=0), df=df, verbose=True)
...

다음 Notebook에서는 데이터의 현황을 더 잘 파악할 수 있도록 Spark DataFrame Agent 에이전트를 만들고 사용하는 방법을 보여 줍니다.

LangChain을 사용하여 Spark DataFrame Notebook과 상호 작용

Get 노트북

Databricks SQL 에이전트

generate.

Important

Databricks SQL 에이전트는 tables쿼리할 수 있으며 tables만들지 않습니다.

다음 예에서는 SQLDatabase.from_databricks(catalog="...", schema="...") 명령어로 데이터베이스 인스턴스를 생성하고, SQLDatabaseToolkit(db=db, llm=llm)create_sql_agent(llm=llm, toolkit=toolkit, **kwargs) 명령어로 에이전트와 필요한 도구를 각각 생성하였습니다.

from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.sql_database import SQLDatabase
from langchain import OpenAI
from databricks_langchain import ChatDatabricks

# Note: Databricks SQL connections eventually time out. We set pool_pre_ping: True to
# try to ensure connection health is checked before a SQL query is made
db = SQLDatabase.from_databricks(catalog="samples", schema="nyctaxi", engine_args={"pool_pre_ping": True})
llm = ChatDatabricks(
    endpoint="databricks-meta-llama-3-1-70b-instruct",
    temperature=0.1,
    max_tokens=250,
)

toolkit = SQLDatabaseToolkit(db=db, llm=llm)
agent = create_sql_agent(llm=llm, toolkit=toolkit, verbose=True)

agent.run("What is the longest trip distance and how long did it take?")

다음 Notebook에서는 데이터베이스의 데이터를 더 잘 이해할 수 있도록 Databricks SQL 에이전트를 만들고 사용하는 방법을 보여 줍니다.

LangChain을 사용하여 SQL Database Notebook과 상호 작용

Get 노트북