Udostępnij za pośrednictwem


LangChain w usłudze Azure Databricks na potrzeby programowania w usłudze 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 obsługiwanych przez usługę Databricks jako llMs lub osadzania w aplikacji LangChain.

  • Zintegruj wyszukiwanie wektorów mozaiki sztucznej inteligencji na potrzeby przechowywania wektorów i pobierania.

  • Zarządzanie modelami i wydajnością langchain oraz śledzenie ich w eksperymentach MLflow.

  • Śledzenie faz programowania i produkcji aplikacji LangChain za pomocą śledzenia MLflow.

  • 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 otoki interfejsów API, podsystemy złomowania sieci Web, narzędzia do analizy kodu, narzędzia do podsumowania dokumentów i nie tylko. Obsługuje również duże modele językowe z programów OpenAI, Anthropic, HuggingFace itp. z różnych źródeł danych i typów.

Korzystanie z platformy MLflow na potrzeby opracowywania aplikacji LangChain

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

Platforma MLflow w usłudze Databricks oferuje dodatkowe funkcje, które odróżniają ją od wersji typu open source, zwiększając środowisko programistyczne z następującymi możliwościami:

  • 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 notesami usługi Databricks: eksperymenty są automatycznie połączone z notesami, usprawniając proces śledzenia.

  • Śledzenie MLflow w usłudze Databricks: zapewnia monitorowanie na poziomie produkcyjnym z integracją tabeli wnioskowania, zapewniając kompleksową możliwość obserwacji od programowania do środowiska produkcyjnego.

  • Zarządzanie cyklem życia modelu za pomocą katalogu aparatu Unity: scentralizowana kontrola nad dostępem, inspekcją, pochodzeniem i odnajdywaniem modeli w obszarach roboczych.

  • Ocena zintegrowanego agenta sztucznej inteligencji mozaiki: 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 integracyjny LangChain Databricks. Usługa Databricks zaleca również zainstalowanie najnowszej wersji biblioteki LangChain w celu zapewnienia najnowszych aktualizacji.
    • %pip install --upgrade langchain-databricks langchain

Używanie modeli usługi Databricks jako llMs lub osadzania

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żesz użyć modeli udostępnionych przez interfejsy API modelu foundation, wyselekcjonowanej listy modeli typu 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ć modelu Llama 3.1 70B Instrukcje meta jako składnika LLM w języku LangChain przy użyciu interfejsu API modeli foundation.


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

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 składnika osadzania w języku LangChain przy użyciu interfejsu API modeli foundation.


from langchain_databricks 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 starszą funkcję. 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żywanie wyszukiwania wektorów mozaiki sztucznej inteligencji 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 bazie danych wektorów. Możesz utworzyć automatyczne aktualizowanie indeksów wyszukiwania wektorów z tabel różnicowych zarządzanych przez wykaz aparatu Unity i wykonywać względem nich zapytania za pomocą prostego interfejsu API, aby pobrać najbardziej podobne wektory.

Aby użyć tej funkcji w usłudze LangChain, utwórz DatabricksVectorSearch wystąpienie:

from langchain_databricks 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żywanie funkcji wykazu aparatu Unity jako narzędzi

Uwaga

Integracja funkcji Wykazu aparatu Unity znajduje się 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 langchain-databricks pakietu w nadchodzącej wersji.

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

Ł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()

W poniższym notesie przedstawiono przykład, w którym moduł ładujący ramki danych PySpark jest używany do tworzenia czatbota opartego na pobieraniu, który jest rejestrowany za pomocą biblioteki MLflow, co z kolei umożliwia interpretowanie modelu jako ogólnej funkcji języka Python na potrzeby wnioskowania za pomocą polecenia mlflow.pyfunc.load_model().

Moduł ładujący ramek danych PySpark i MLflow w notesie Langchain

Pobierz 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 agenta ramki danych Platformy Spark języka LangChain zawiera szczegółowy przykład tworzenia i używania 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 biblioteki LangChain do interakcji z notesem ramki danych platformy Spark

Pobierz 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 wykazie aparatu Unity i generować szczegółowe informacje dotyczące ich 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 SQLDatabase.from_databricks(catalog="...", schema="...") poleceniu , a agent i wymagane narzędzia są tworzone odpowiednio przez SQLDatabaseToolkit(db=db, llm=llm) elementy 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

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

Uwaga

Modele OpenAI wymagają płatnej subskrypcji, jeśli bezpłatna subskrypcja osiągnie limit szybkości.

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

Pobierz notes