Bagikan melalui


LangChain di Azure Databricks untuk pengembangan LLM

Penting

Ini adalah fitur eksperimental dan definisi API mungkin berubah.

Artikel ini menjelaskan integrasi LangChain yang memfasilitasi pengembangan dan penyebaran model bahasa besar (LLM) di Azure Databricks.

Dengan integrasi LangChain ini, Anda dapat:

  • Muat data dengan mulus dari PySpark DataFrame dengan pemuat DataFrame PySpark.
  • Kueri data Anda secara interaktif menggunakan bahasa alami dengan Spark DataFrame Agent atau Databricks SQL Agent.
  • Bungkus model Azure Databricks Anda sebagai model bahasa besar (LLM) di LangChain.

Apa itu LangChain?

LangChain adalah kerangka kerja perangkat lunak yang dirancang untuk membantu membuat aplikasi yang menggunakan model bahasa besar (LLM). Kekuatan LangChain terletak pada berbagai integrasi dan kemampuannya. Ini termasuk pembungkus API, subsistem pengikisan web, alat analisis kode, alat ringkasan dokumen, dan banyak lagi. Ini juga mendukung model bahasa besar dari OpenAI, Anthropic, HuggingFace, dll. out of the box bersama dengan berbagai sumber dan jenis data.

LangChain tersedia sebagai rasa MLflow eksperimental yang memungkinkan pelanggan LangChain memanfaatkan alat yang kuat dan kemampuan pelacakan eksperimen MLflow langsung dari lingkungan Azure Databricks. Lihat dokumentasi MLflow rasa LangChain.

Persyaratan

  • Databricks Runtime 13.3 ML ke atas.
  • Databricks merekomendasikan pip menginstal versi terbaru LangChain untuk memastikan Anda memiliki pembaruan terbaru.
    • %pip install --upgrade langchain

Memuat data dengan pemuat DataFrame PySpark

Pemuat DataFrame PySpark di LangChain menyederhanakan pemuatan data dari PySpark DataFrame dengan satu metode.

from langchain.document_loaders import PySparkDataFrameLoader

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

Notebook berikut menampilkan contoh di mana PySpark DataFrame loader digunakan untuk membuat chatbot berbasis pengambilan yang dicatat dengan MLflow, yang pada gilirannya memungkinkan model ditafsirkan sebagai fungsi Python generik untuk inferensi dengan mlflow.pyfunc.load_model().

PySpark DataFrame loader dan MLflow di notebook Langchain

Dapatkan buku catatan

Spark DataFrame Agent

Spark DataFrame Agent di LangChain memungkinkan interaksi dengan Spark DataFrame, yang dioptimalkan untuk jawaban atas pertanyaan. Dokumentasi Spark DataFrame Agent LangChain memberikan contoh terperinci tentang cara membuat dan menggunakan Spark DataFrame Agent dengan 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)
...

Notebook berikut menunjukkan cara membuat dan menggunakan Spark DataFrame Agent untuk membantu Anda mendapatkan wawasan tentang data Anda.

Menggunakan LangChain untuk berinteraksi dengan notebook Spark DataFrame

Dapatkan buku catatan

Agen SQL Databricks

Databricks SQL Agent adalah varian dari SQL Database Agent standar yang disediakan LangChain dan dianggap sebagai varian yang lebih kuat dari Spark DataFrame Agent.

Dengan Agen SQL Databricks, setiap pengguna Azure Databricks dapat berinteraksi dengan skema tertentu di Unity Catalog dan menghasilkan wawasan tentang data mereka.

Penting

Agen SQL Databricks hanya dapat mengkueri tabel, dan tidak membuat tabel.

Dalam contoh berikut, instans database dibuat dalam SQLDatabase.from_databricks(catalog="...", schema="...") perintah dan agen dan alat yang diperlukan dibuat oleh SQLDatabaseToolkit(db=db, llm=llm) dan create_sql_agent(llm=llm, toolkit=toolkit, **kwargs), masing-masing.

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

Catatan

Model OpenAI memerlukan langganan berbayar, jika langganan gratis mencapai batas tarif.

Notebook berikut menunjukkan cara membuat dan menggunakan Databricks SQL Agent untuk membantu Anda lebih memahami data dalam database Anda.

Menggunakan LangChain untuk berinteraksi dengan buku catatan database SQL

Dapatkan buku catatan

Membungkus Azure Databricks melayani model sebagai LLM

Jika Anda memiliki LLM yang Anda buat di Azure Databricks, Anda dapat menggunakannya langsung di dalam LangChain di tempat OpenAI, HuggingFace, atau penyedia LLM lainnya.

Integrasi ini mendukung dua jenis titik akhir:

Membungkus model yang melayani titik akhir

Anda dapat membungkus titik akhir Azure Databricks sebagai LLM di LangChain. Untuk membungkus model yang melayani titik akhir sebagai LLM di LangChain, Anda perlu:

  • LLM terdaftar yang disebarkan ke model Azure Databricks yang melayani titik akhir.
  • IZIN CAN QUERY ke titik akhir.

Sering kali, model memerlukan atau merekomendasikan parameter penting, seperti temperature atau max_tokens. Contoh berikut menunjukkan cara memasukkan parameter tersebut dengan model yang disebarkan bernama falcon-7b-instruct. Detail tambahan dapat ditemukan pada dokumentasi Membungkus titik akhir penyajian 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?")

Membungkus aplikasi proksi driver kluster

Untuk membungkus aplikasi proksi driver kluster sebagai LLM di LangChain, Anda perlu:

  • LLM yang dimuat pada kluster interaktif Azure Databricks dalam mode "pengguna tunggal" atau "tidak ada isolasi bersama".
  • Server HTTP lokal yang berjalan pada simpul driver untuk melayani model di "/" menggunakan HTTP POST dengan input/output JSON.
  • Aplikasi menggunakan nomor port antara [3000, 8000] dan mendengarkan alamat IP driver atau hanya 0.0.0.0, bukan localhost hanya.
  • Izin CAN ATTACH TO ke kluster.

Lihat dokumentasi LangChain untuk Membungkus aplikasi proksi driver kluster misalnya.