LangChain on Databricks for LLM Development

重要

これらは実験的な機能であり、API 定義は変更される可能性があります。

この記事では、Databricks での大規模な言語モデル (LLM) の開発とデプロイを容易にする LangChain 統合について説明します。

これらの LangChain 統合を使用すると、次のことができます。

  • PySpark DataFrame ローダーを使用して、PySpark DataFrame からデータをシームレスにロードします。

  • Spark DataFrame エージェントまたは Databricks SQL エージェントで自然言語を使用してデータを対話的にクエリします。

  • Databricks で提供されるモデルを LangChain で大規模言語モデル (LLM) としてラップします。

ラングチェーンとは何ですか?

LangChainは、大規模な言語モデル(LLM)を利用するアプリケーションの作成を支援するように設計されたソフトウェアフレームワークです。 LangChainの強みは、その幅広い統合と機能にあります。 これには、APIラッパー、Webスクレイピングサブシステム、コード分析ツール、ドキュメント要約ツールなどが含まれます。 また、OpenAI、Anthropic、HuggingFaceなどの大規模な言語モデルもサポートしています。さまざまなデータソースとタイプと一緒に箱から出して。

LangChain はエクスペリメント MLflow フレーバーとして利用できるため、LangChain のお客様は Databricks 環境から直接 MLflow の堅牢なツールとエクスペリメント追跡機能を活用できます。 LangChain フレーバーの MLflow に関するドキュメントを参照してください。

要件

  • Databricks Runtime 13.3 機械学習以上。

  • Databricks では、最新の更新プログラムを確実に入手するために、最新バージョンの LangChain をインストールすることをお勧めします。

    • %pip install --upgrade langchain

PySpark DataFrame ローダー を使用してデータをロードする

LangChain の PySpark DataFrame ローダー は、単一のメソッドで PySpark データフレームからのデータのロードを簡素化します。

from langchain.document_loaders import PySparkDataFrameLoader

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

次のノートブックは、PySpark DataFrame ローダーを使用して、MLflow でログに記録される取得ベースのチャットボットを作成し、モデルを mlflow.pyfunc.load_model()による推論用の汎用 Python 関数として解釈できるようにする例を示しています。

PySpark DataFrame loader and MLFlow in Langchain ノートブック

ノートブックを新しいタブで開く

スパーク DataFrame エージェント

LangChain の Spark DataFrame エージェントを使用すると、質問応答用に最適化された Spark DataFrame との対話が可能になります。 LangChain のSpark DataFrame Agent ドキュメントには、 DataFrame で Spark DataFrame Agent を作成および使用する方法の詳細な例が記載されています。

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

次のノートブックは、Spark DataFrame エージェントを作成して使用し、データの知見を得る方法を示しています。

LangChain を使用して Spark DataFrame ノートブック を操作する

ノートブックを新しいタブで開く

Databricks SQL エージェント

Databricks SQL エージェント は、LangChain が提供する標準の SQL Database エージェントのバリアントであり、Spark DataFrame Agent のより強力なバリアントと見なされます。

Databricks SQL エージェントを使用すると、すべての Databricks ユーザーが Unity Catalog 内の指定されたスキーマと対話し、データに関する知見を生成できます。

重要

Databricks SQL エージェントはクエリ テーブルのみを実行でき、テーブルは作成できません。

次の例では、データベース・インスタンスが SQLDatabase.from_databricks(catalog="...", schema="...") コマンド内に作成され、エージェントと必要なツールがそれぞれ SQLDatabaseToolkit(db=db, llm=llm)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?")

注:

OpenAI モデルでは、無料サブスクリプションがレート制限に達した場合、有料サブスクリプションが必要です。

次のノートブックは、Databricks SQL エージェントを作成して使用し、データベース内のデータをよりよく理解する方法を示しています。

LangChain を使用して SQL データベース ノートブック を操作する

ノートブックを新しいタブで開く

Databricks で提供されるモデルを LLM としてラップする

Databricks で作成した LLM がある場合は、OpenAI、HuggingFace、またはその他の LLM プロバイダーの代わりに、LangChain 内で直接使用できます。

この統合では、次の 2 つのエンドポイント タイプがサポートされています。

エンドポイント を提供するモデルをラップする

Databricks エンドポイントは、LangChain で LLM としてラップできます。 モデルサービングエンドポイントをLangChainでLLMとしてラップするには、次のものが必要です。

  • エンドポイントを提供する Databricks モデルにデプロイされた登録済み LLM。

  • CAN QUERY権限をエンドポイントに付与します。

多くの場合、モデルは temperaturemax_tokensなどの重要なパラメーターを要求または推奨します。 次の例は、 falcon-7b-instructという名前のデプロイ済みモデルでこれらのパラメーターを入力する方法を示しています。 詳細については、 サービングエンドポイントのラッピング 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?")

クラスター・ドライバー・プロキシー・アプリケーションを ラップする

クラスタードライバープロキシアプリケーションをLangChainのLLMとしてラップするには、次のものが必要です。

  • Databricks 対話型クラスターに "シングル ユーザー" モードまたは "分離共有なし" モードで読み込まれた LLM。

  • JSON 入出力で HTTP POST を使用して "/" でモデルを提供するために、ドライバー ノードで実行されているローカル HTTP サーバー。

  • アプリは [3000, 8000] の間のポート番号を使用し、ドライバーの IP アドレス、または localhost のみではなく単に 0.0.0.0 をリッスンします。

  • クラスターに対する CAN ATTACH TO 権限。

例については、 クラスタードライバープロキシアプリのラップ に関する LangChain のドキュメントを参照してください。