LLM 개발을 위한 Azure Databricks의 LangChain

Important

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

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

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

  • PySpark DataFrame 로더를 사용하여 PySpark DataFrame에서 데이터를 원활하게 로드합니다.
  • Spark DataFrame 에이전트 또는 Databricks SQL 에이전트를 사용하여 자연어를 사용하여 데이터를 대화형으로 쿼리합니다.
  • LangChain에서 Azure Databricks 서비스 모델을 LLM(대규모 언어 모델)으로 래핑합니다.

LangChain이란?

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

LangChain은 LangChain 고객이 Azure Databricks 환경에서 직접 MLflow의 강력한 도구 및 실험 추적 기능을 활용할 수 있도록 하는 실험적 MLflow 버전으로 제공됩니다. LangChain Flavor MLflow 설명서를 참조하세요.

요구 사항

  • Databricks Runtime 13.3 ML 이상.
  • Databricks는 최신 버전의 LangChain을 설치하여 최신 업데이트가 있는지 확인하는 pip를 권장합니다.
    • %pip install --upgrade langchain

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로 기록되는 검색 기반 챗봇을 만드는 예를 보여 줍니다. 그러면 모델을 유추 mlflow.pyfunc.load_model()를 위한 일반 Python 함수로 해석할 수 있습니다.

Langchain Notebook의 PySpark DataFrame 로더 및 MLFlow

전자 필기장 가져오기

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 에이전트를 만들고 사용하여 데이터에 대한 인사이트를 얻는 방법을 보여 줍니다.

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

전자 필기장 가져오기

Databricks SQL 에이전트

Databricks SQL 에이전트는 LangChain에서 제공하는 표준 SQL Database 에이전트의 변형이며 Spark DataFrame 에이전트의 보다 강력한 변형으로 간주됩니다.

Databricks SQL 에이전트를 사용하면 모든 Azure Databricks 사용자가 Unity 카탈로그에서 지정된 스키마와 상호 작용하고 데이터에 대한 인사이트를 생성할 수 있습니다.

Important

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

다음 예제에서는 데이터베이스 인스턴스가 명령 내에 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

db = SQLDatabase.from_databricks(catalog="samples", schema="nyctaxi")
llm = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=.7)
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?")

참고 항목

무료 구독이 속도 제한에 도달하면 OpenAI 모델에 유료 구독이 필요합니다.

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

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

전자 필기장 가져오기

Azure Databricks 서비스 모델을 LLM으로 래핑

Azure Databricks에서 만든 LLM이 있는 경우 OpenAI, HuggingFace 또는 다른 LLM 공급자 대신 LangChain 내에서 직접 사용할 수 있습니다.

이 통합은 다음 두 가지 엔드포인트 유형을 지원합니다.

엔드포인트를 제공하는 모델 래핑

Azure Databricks 엔드포인트를 LangChain에서 LLM으로 래핑할 수 있습니다. LangChain에서 엔드포인트를 LLM으로 제공하는 모델을 래핑하려면 다음이 필요합니다.

  • 엔드포인트를 제공하는 Azure Databricks 모델에 배포된 등록된 LLM입니다.
  • 엔드포인트에 대한 CAN QUERY 권한입니다.

종종 모델은 다음과 같은 temperature 중요한 매개 변수를 요구하거나 max_tokens권장합니다. 다음 예제에서는 배포된 모델을 사용하여 falcon-7b-instruct해당 매개 변수를 입력하는 방법을 보여줍니다. 추가 세부 정보는 서비스 엔드포인트 LangChain 설명서 래핑에서 찾을 수 있습니다.

from langchain.llms import Databricks

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

클러스터 드라이버 프록시 애플리케이션 래핑

LangChain에서 클러스터 드라이버 프록시 애플리케이션을 LLM으로 래핑하려면 다음이 필요합니다.

  • "단일 사용자" 또는 "격리 공유 없음" 모드에서 Azure Databricks 대화형 클러스터에 로드된 LLM입니다.
  • JSON 입력/출력과 함께 HTTP POST를 사용하여 "/"에서 모델을 제공하기 위해 드라이버 노드에서 실행되는 로컬 HTTP 서버입니다.
  • 앱은 [3000, 8000] 사이의 포트 번호를 사용하고 드라이버 IP 주소 또는 단순히 0.0.0.0 localhost 만 수신 대기합니다.
  • 클러스터에 대한 CAN ATTACH TO 권한입니다.

예제는 클러스터 드라이버 프록시 앱 래핑에 대한 LangChain 설명서를 참조하세요.