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:

  • 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.
  • Opakowywanie usługi Azure Databricks służyło jako model dużego modelu językowego (LLM) w usłudze LangChain.

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.

LangChain jest dostępny jako eksperymentalny smak MLflow, który umożliwia klientom LangChain wykorzystanie niezawodnych narzędzi i możliwości śledzenia eksperymentów MLflow bezpośrednio ze środowiska usługi Azure Databricks. Zapoznaj się z dokumentacją biblioteki MLflow o smaku LangChain.

Wymagania

  • Databricks Runtime 13.3 ML i nowsze.
  • Usługa Databricks zaleca zainstalowanie najnowszej wersji pakietu LangChain w celu zapewnienia najnowszych aktualizacji.
    • %pip install --upgrade langchain

Ł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

Agent SQL usługi Databricks jest wariantem standardowego agenta usługi SQL Database, który udostępnia język LangChain i jest uważany za bardziej zaawansowany wariant agenta ramki danych Platformy Spark.

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

Zawijanie usługi Azure Databricks służyło modelom jako LLMs

Jeśli masz utworzoną usługę LLM w usłudze Azure Databricks, możesz jej użyć bezpośrednio w usłudze LangChain zamiast biblioteki OpenAI, HuggingFace lub innego dostawcy LLM.

Ta integracja obsługuje dwa typy punktów końcowych:

  • Model obsługujący punkty końcowe zalecane w środowisku produkcyjnym i programistycznym.
  • Aplikacja serwera proxy sterowników klastra zalecana do programowania interakcyjnego.

Zawijanie punktu końcowego obsługującego model

Punkty końcowe usługi Azure Databricks można opakowować jako moduły LLM w usłudze LangChain. Aby opakowować model obsługujący punkt końcowy jako moduł LLM w usłudze LangChain, potrzebne są następujące elementy:

  • Zarejestrowana usługa LLM wdrożona w modelu usługi Azure Databricks obsługującym punkt końcowy.
  • UPRAWNIENIE CAN QUERY do punktu końcowego.

Często modele wymagają ważnych parametrów, takich jak temperature lub max_tokens. W poniższym przykładzie pokazano, jak wprowadzić te parametry przy użyciu wdrożonego modelu o nazwie falcon-7b-instruct. Dodatkowe szczegóły można znaleźć w dokumentacji opakowującego punkt końcowy LangChain obsługującego.

from langchain.llms import Databricks

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

Zawijanie aplikacji serwera proxy sterownika klastra

Aby opakować aplikację serwera proxy sterownika klastra jako moduł LLM w usłudze LangChain, potrzebne są następujące elementy:

  • Moduł LLM załadowany do interaktywnego klastra usługi Azure Databricks w trybie "pojedynczego użytkownika" lub "braku izolacji udostępnionej".
  • Lokalny serwer HTTP uruchomiony w węźle sterownika do obsługi modelu pod adresem "/" przy użyciu protokołu HTTP POST z danymi wejściowymi/wyjściowymi JSON.
  • Aplikacja używa numeru portu z zakresu [3000, 8000] i nasłuchuje adresu IP sterownika lub po prostu 0.0.0.0, a nie localhost tylko.
  • Uprawnienie CAN ATTACH TO do klastra.

Aby zapoznać się z przykładem, zobacz dokumentację langchain dotyczącą opakowującego aplikację serwera proxy sterownika klastra.