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 integracją tabeli wnioskowania, zapewniając kompleksową możliwość obserwacji od programowania 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.
- Ocena zintegrowanegoagenta 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 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ę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ć 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ż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 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ż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 wykazu aparatu Unity i używania ich w usłudze 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 notes przedstawia przykład, w którym moduł ładujący ramki danych PySpark służy 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ą mlflow.pyfunc.load_model()
.
Moduł ładujący ramek danych PySpark i MLflow w notesie Langchain
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
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 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.