LangChain på Azure Databricks för LLM-utveckling

Viktigt!

Det här är experimentella funktioner och API-definitionerna kan ändras.

Den här artikeln beskriver LangChain-integreringar som underlättar utveckling och distribution av stora språkmodeller (LLM) på Azure Databricks.

Med dessa LangChain-integreringar kan du:

  • Läs in data sömlöst från en PySpark DataFrame med PySpark DataFrame-inläsaren.
  • Fråga dina data interaktivt med naturligt språk med Spark DataFrame Agent eller Databricks SQL Agent.
  • Omslut din Azure Databricks-serverade modell som en stor språkmodell (LLM) i LangChain.

Vad är LangChain?

LangChain är ett programvaruramverk som är utformat för att skapa program som använder stora språkmodeller (LLM). LangChains styrka ligger i dess breda utbud av integreringar och funktioner. Den innehåller API-omslutning, undersystem för webbskrapa, kodanalysverktyg, verktyg för dokumentsammanfattning med mera. Det stöder också stora språkmodeller från OpenAI, Anthropic, HuggingFace osv. ut ur lådan tillsammans med olika datakällor och typer.

LangChain är tillgängligt som en experimentell MLflow-smak som gör att LangChain-kunder kan utnyttja de robusta verktygen och experimentspårningsfunktionerna i MLflow direkt från Azure Databricks-miljön. Se MLflow-dokumentationen för LangChain-smak.

Krav

  • Databricks Runtime 13.3 ML och senare.
  • Databricks rekommenderar pip-installation av den senaste versionen av LangChain för att säkerställa att du har de senaste uppdateringarna.
    • %pip install --upgrade langchain

Läsa in data med PySpark DataFrame-inläsaren

PySpark DataFrame-inläsaren i LangChain förenklar inläsningen av data från en PySpark DataFrame med en enda metod.

from langchain.document_loaders import PySparkDataFrameLoader

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

Följande notebook-fil visar ett exempel där PySpark DataFrame-inläsaren används för att skapa en hämtningsbaserad chattrobot som loggas med MLflow, vilket i sin tur gör att modellen kan tolkas som en allmän Python-funktion för slutsatsdragning med mlflow.pyfunc.load_model().

PySpark DataFrame-inläsare och MLFlow i Langchain Notebook

Hämta notebook-fil

Spark DataFrame-agent

Spark DataFrame-agenten i LangChain tillåter interaktion med en Spark DataFrame, optimerad för frågesvar. LangChains Dokumentation om Spark DataFrame Agent innehåller ett detaljerat exempel på hur du skapar och använder Spark DataFrame-agenten med en DataFrame.

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

Följande notebook-fil visar hur du skapar och använder Spark DataFrame-agenten för att få insikter om dina data.

Använda LangChain för att interagera med en Spark DataFrame-notebook-fil

Hämta notebook-fil

Databricks SQL Agent

Databricks SQL Agent är en variant av sql database-standardagenten som LangChain tillhandahåller och anses vara en kraftfullare variant av Spark DataFrame-agenten.

Med Databricks SQL Agent kan alla Azure Databricks-användare interagera med ett angivet schema i Unity Catalog och generera insikter om sina data.

Viktigt!

Databricks SQL Agent kan bara köra frågor mot tabeller och skapar inte tabeller.

I följande exempel skapas databasinstansen SQLDatabase.from_databricks(catalog="...", schema="...") i kommandot och agenten och nödvändiga verktyg skapas av SQLDatabaseToolkit(db=db, llm=llm) respektive 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?")

Kommentar

OpenAI-modeller kräver en betald prenumeration om den kostnadsfria prenumerationen når en prisgräns.

Följande notebook-fil visar hur du skapar och använder Databricks SQL Agent för att hjälpa dig att bättre förstå data i databasen.

Använda LangChain för att interagera med en SQL-databasanteckningsbok

Hämta notebook-fil

Omsluta Azure Databricks-hanterade modeller som LLM:er

Om du har en LLM som du har skapat i Azure Databricks kan du använda den direkt i LangChain i stället för OpenAI, HuggingFace eller någon annan LLM-provider.

Den här integreringen stöder två slutpunktstyper:

  • Modell som betjänar slutpunkter som rekommenderas för produktion och utveckling.
  • Proxyapp för klusterdrivrutiner rekommenderas för interaktiv utveckling.

Omsluta en modell som betjänar slutpunkten

Du kan omsluta Azure Databricks-slutpunkter som LLM:er i LangChain. Om du vill omsluta en modell som betjänar slutpunkten som en LLM i LangChain behöver du:

  • En registrerad LLM distribuerad till en Azure Databricks-modell som betjänar slutpunkten.
  • KAN FRÅGA behörighet till slutpunkten.

Ofta kräver eller rekommenderar modeller viktiga parametrar som temperature eller max_tokens. I följande exempel visas hur du anger dessa parametrar med en distribuerad modell med namnet falcon-7b-instruct. Ytterligare information finns i dokumentationen Omsluta en serverdelsslutpunkts-LangChain .

from langchain.llms import Databricks

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

Omsluta ett proxyprogram för klusterdrivrutiner

Om du vill omsluta ett proxyprogram för klusterdrivrutiner som en LLM i LangChain behöver du:

  • En LLM som lästs in på ett interaktivt Azure Databricks-kluster i läget "enskild användare" eller "ingen isolering delad".
  • En lokal HTTP-server som körs på drivrutinsnoden för att hantera modellen på "/" med HTTP POST med JSON-indata/utdata.
  • En app använder ett portnummer mellan [3000, 8 000] och lyssnar på drivrutins-IP-adressen eller helt enkelt 0.0.0.0 i stället för localhost bara.
  • BEHÖRIGHETEN KAN KOPPLA TILL till klustret.

Ett exempel finns i LangChain-dokumentationen för att omsluta en proxyapp för klusterdrivrutiner.