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.

  • śledzenia platformy MLflow w usłudze Databricks: zapewnia monitorowanie na poziomie produkcyjnym z wnioskowaniem table integracji, zapewniając kompleksową możliwość obserwacji od programowania do środowiska produkcyjnego.

  • zarządzanie cyklem życia modelu za pomocąUnity Catalog: scentralizowana kontrola dostępu, inspekcji, pochodzenia i odkrywania modeli w obszarach roboczych.

  • Ocena zintegrowanegoagenta sztucznej inteligencji mozaiki: ocena jakości, kosztów i opóźnień aplikacji LangChain.

Korzystając z tych funkcji, można optimize rozwijanie, monitorowanie i zarządzanie projektami bazującymi na LangChain, dzięki czemu usługa Databricks jest pierwszorzędnym 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 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żna użyć modeli udostępnionych przez interfejsy API modelu Foundation Model, wyselekcjonowanego list 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 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?")

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 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 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żna tworzyć automatycznie aktualizujące się indeksy wyszukiwania wektorów na podstawie Delta tables zarządzanych przez Unity Catalog i wykonywać zapytania za pośrednictwem prostego interfejsu API, aby pobrać najbardziej podobne wektory.

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

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życie funkcji Catalog w Unity jako narzędzi

Uwaga

Integracja funkcji Catalog 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 databricks-langchain pakietu w nadchodzącej wersji.

Funkcje JĘZYKA SQL lub Python można uwidocznić w środowisku Unity Catalog jako narzędzia dla agenta LangChain. Aby uzyskać pełne wskazówki dotyczące tworzenia funkcji Catalog Unity 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()

W poniższym notesie przedstawiono przykład where, w którym narzędzie do ładowania danych PySpark jest używane do tworzenia czatbota opartego na wyszukiwaniu, który jest rejestrowany za pomocą platformy MLflow. Dzięki temu model może być interpretowany jako ogólna funkcja Pythona do zastosowań w zakresie wnioskowania z użyciem mlflow.pyfunc.load_model().

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

notesu

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

notesu

Databricks SQL Agent

Za pomocą agenta SQL usługi Databricks wszyscy użytkownicy usługi Azure Databricks mogą wchodzić w interakcje z określonymi schema w środowisku Unity Catalog i generate szczegółowe informacje na temat ich danych.

Ważne

Agent SQL Databricks może wysyłać zapytania tylko do tablesi nie tworzy tables.

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

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

Get notatnik