Udostępnij przez


LangChain na platformie Azure Databricks do rozwoju LLM

Ważne

Są to funkcje eksperymentalne, a definicje interfejsu API mogą ulec zmianie.

W tym artykule opisano integracje langchain, które ułatwiają opracowywanie i wdrażanie dużych modeli językowych (LLMs) w usłudze Azure Databricks.

Dzięki tym integracyjnym aplikacjom LangChain można wykonywać następujące czynności:

  • Użyj modeli serwowanych przez Databricks jako LLM-y lub osadzenia w aplikacji LangChain.
  • Zintegruj Mosaic AI Vector Search w celu przechowywania i pobierania wektorów.
  • Zarządzanie i śledzenie modeli LangChain i ich wydajności w eksperymentach MLflow.
  • Śledź fazy rozwoju i produkcji swojej aplikacji LangChain za pomocą MLflow Tracing.
  • Bezproblemowe ładowanie danych z ramki danych PySpark za pomocą modułu ładującego PySpark DataFrame.
  • Interakcyjne wykonywanie zapytań o dane przy użyciu języka naturalnego za pomocą agenta ramki danych platformy Spark lub agenta SQL usługi Databricks.

Co to jest LangChain?

LangChain to struktura oprogramowania przeznaczona do tworzenia aplikacji korzystających z dużych modeli językowych (LLMs). Siła LangChaina leży w szerokiej gamie integracji i możliwości. Obejmuje to opakowania interfejsów API, podsystemy do przetwarzania danych z sieci, narzędzia do analizy kodu, narzędzia do streszczania dokumentów i nie tylko. Obsługuje również duże modele językowe od firm takich jak OpenAI, Anthropic, HuggingFace itp., działające od razu po wyjęciu z pudełka, wraz z różnymi źródłami danych i typami.

Korzystanie z platformy MLflow na potrzeby opracowywania aplikacji LangChain

LangChain jest dostępny jako wariant MLflow, który umożliwia użytkownikom wykorzystanie niezawodnych narzędzi MLflow do śledzenia eksperymentów i monitorowania zarówno w środowiskach deweloperskich, jak i produkcyjnych bezpośrednio w Databricks. Aby uzyskać więcej szczegółowych informacji i wskazówek dotyczących korzystania z biblioteki MLflow z LangChain, zobacz dokumentację wariantu MLflow LangChain.

Platforma MLflow w usłudze Databricks oferuje dodatkowe funkcje, które odróżniają ją od wersji typu open source, wzbogacając doświadczenie programistyczne dzięki następującym możliwościom:

  • W pełni zarządzany serwer śledzenia MLflow: natychmiast dostępny w obszarze roboczym usługi Databricks, co umożliwia rozpoczęcie śledzenia eksperymentów bez opóźnień konfiguracji.
  • Bezproblemowa integracja z notatnikami Databricks: eksperymenty są automatycznie połączone z notatnikami, usprawniając proces śledzenia.
  • Śledzenie MLflowna platformie Databricks: zapewnia monitorowanie na poziomie produkcyjnym z integracją tabeli wnioskowania, zapewniając kompleksowy podgląd od etapu rozwoju do środowiska produkcyjnego.
  • zarządzanie cyklem życia modelu za pomocąUnity Catalog: scentralizowana kontrola nad dostępem, inspekcją, pochodzeniem i wyszukiwaniem modeli we wszystkich obszarach roboczych.
  • Zintegrowanaocena agenta sztucznej inteligencji Mosaic: ocena jakości, kosztów i opóźnień aplikacji LangChain.

Korzystając z tych funkcji, można zoptymalizować programowanie, monitorowanie i zarządzanie projektami opartymi na języku LangChain, dzięki czemu usługa Databricks jest dobrym wyborem dla inicjatyw sztucznej inteligencji opartych na platformie MLflow.

Wymagania

  • Databricks Runtime 13.3 ML lub nowszy.
  • Zainstaluj pakiet integracji usługi LangChain Databricks i łącznik SQL usługi Databricks. Usługa Databricks zaleca również zainstalowanie najnowszej wersji biblioteki LangChain w celu zapewnienia najnowszych aktualizacji.
    • %pip install --upgrade databricks-langchain langchain-community langchain databricks-sql-connector

Używanie serwowanych modeli Databricks jako LLM lub osadzenia

Jeśli masz model LLM lub osadzania obsługiwany przy użyciu usługi Databricks Model Serving, możesz użyć go bezpośrednio w usłudze LangChain zamiast openAI, HuggingFace lub innego dostawcy LLM.

Aby użyć modelu obsługującego punkt końcowy jako model LLM lub osadzania w usłudze LangChain, potrzebne są następujące elementy:

  • Zarejestrowany model LLM lub osadzania wdrożony w modelu usługi Azure Databricks obsługujący punkt końcowy.
    • Alternatywnie można użyć modeli udostępnianych przez interfejsy API modelu Foundation Model, wyselekcjonowaną listę modeli open source wdrożonych w obszarze roboczym i gotowych do natychmiastowego użycia.
  • UPRAWNIENIE CAN QUERY do punktu końcowego.

Modele rozmów

W poniższym przykładzie pokazano, jak używać instruktażowego modelu Llama 3.1 70B od Meta jako komponentu LLM w LangChain, używając API Modeli Bazowych.


from databricks_langchain import ChatDatabricks

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

Punkt końcowy można zamienić na model niestandardowy wdrożony w punkcie końcowym obsługującym. Dodatkowe przykłady, takie jak przesyłanie strumieniowe, wywołanie asynchroniczne i wywoływanie funkcji, można znaleźć w dokumentacji LangChain.

Osadzanie

W poniższym przykładzie pokazano, jak używać databricks-bge-large-en modelu osadzania jako komponentu osadzeń w LangChain przy użyciu interfejsu API Modeli Bazowych.


from databricks_langchain import DatabricksEmbeddings

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

Dodatkowe informacje można znaleźć w dokumentacji LangChain

LLMs

Ostrzeżenie

Modele uzupełniania są uważane za funkcję przestarzałą. Większość nowoczesnych modeli korzysta z interfejsu uzupełniania czatu i zamiast tego powinna być używana ze składnikiem ChatModel.

W poniższym przykładzie pokazano, jak używać interfejsu API modelu uzupełniania jako składnika LLM w usłudze LangChain.

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?")

Użyj wyszukiwania wektorowego Mosaic AI jako magazynu wektorów.

Mosaic AI Vector Search to bezserwerowa wyszukiwarka podobieństwa w usłudze Databricks, umożliwiająca przechowywanie wektorowych reprezentacji danych, w tym metadanych, w indeksie wektorowym. Możesz utworzyć automatycznie aktualizujące się indeksy wyszukiwania wektorowego z tabel Delta zarządzanych przez Unity Catalog i odpytywać je za pomocą prostego interfejsu API, aby pobrać najbardziej podobne wektory.

Aby użyć tej funkcji w LangChain, utwórz instancję 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?")

Aby uzyskać więcej informacji, zapoznaj się z dokumentacją usługi DatabricksVectorSearch.

Użyj funkcji katalogu Unity jako narzędzi

Uwaga

Integracja funkcji Katalogu Unity jest w pakiecie langchain-community. Należy zainstalować go przy użyciu programu %pip install langchain-community , aby uzyskać dostęp do jego funkcji. Ta integracja zostanie zmigrowana do databricks-langchain pakietu w nadchodzącej wersji.

Funkcje SQL lub Python można uwidocznić w katalogu Unity jako narzędzia dla agenta LangChain. Aby uzyskać pełne wskazówki dotyczące tworzenia funkcji Unity Catalog i używania ich w LangChain, zobacz dokumentację zestawu narzędzi Databricks UC Toolkit.

Ładowanie danych za pomocą modułu ładującego ramki danych PySpark

Moduł ładujący ramki danych PySpark w elemencie LangChain upraszcza ładowanie danych z ramki danych PySpark przy użyciu jednej metody.

from langchain.document_loaders import PySparkDataFrameLoader

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

Poniższy notatnik przedstawia przykład, w którym moduł ładujący ramki danych PySpark służy do tworzenia czatbota opartego na wyszukiwaniu, który jest rejestrowany za pomocą biblioteki MLflow, co z kolei umożliwia interpretowanie modelu jako uniwersalnej funkcji języka Python na potrzeby wnioskowania za pomocą mlflow.pyfunc.load_model().

Ładowanie ramki danych PySpark i MLflow w notebooku Langchain

Weź notes

Agent ramki danych platformy Spark

Agent ramki danych platformy Spark w języku LangChain umożliwia interakcję z ramką danych platformy Spark zoptymalizowaną pod kątem odpowiadania na pytania. Dokumentacja LangChain'a dotycząca agenta ramki danych Spark zawiera szczegółowy przykład, jak tworzyć i używać agenta ramki danych Spark z ramką danych.

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)
...

W poniższym notesie pokazano, jak utworzyć i użyć agenta ramki danych Platformy Spark, aby uzyskać szczegółowe informacje na temat danych.

Korzystanie z LangChain do interakcji z notebookiem DataFrame platformy Spark

Weź notes

Databricks SQL Agent

Za pomocą agenta SQL usługi Databricks wszyscy użytkownicy usługi Azure Databricks mogą korzystać z określonego schematu w Unity Catalog i generować wnioski na podstawie swoich danych.

Ważne

Agent SQL usługi Databricks może wysyłać zapytania tylko do tabel i nie tworzy tabel.

W poniższym przykładzie wystąpienie bazy danych jest tworzone w poleceniu SQLDatabase.from_databricks(catalog="...", schema="..."), a agent i wymagane narzędzia są tworzone odpowiednio przez SQLDatabaseToolkit(db=db, llm=llm) i 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-3-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?")

Poniższy notes przedstawia sposób tworzenia i używania agenta SQL usługi Databricks w celu lepszego zrozumienia danych w bazie danych.

Korzystanie z biblioteki LangChain do interakcji z notesem bazy danych SQL

Weź notes