LLM開発のためのDatabricks上のLangChain

重要

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

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

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

  • Databricks が提供するモデルを LLM または埋め込みとして LangChain アプリケーションで使用できます。

  • LangChainモデルとパフォーマンスをMLflowエクスペリメントで管理および追跡します。

  • Tracingを使用して、 アプリケーションの開発フェーズと本番運用フェーズをトレースします。LangChainMLflow

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

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

LangChainとは何ですか?

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

MLflow を LangChain 開発に活用する

LangChain は MLflow フレーバーとして提供されており、ユーザーは MLflowの堅牢なツールを活用してエクスペリメントの追跡とオブザーバビリティを Databricks内で直接行うことができます。 MLflow と LangChain の併用に関する詳細とガイダンスについては、 MLflow LangChain フレーバーのドキュメントを参照してください。

Databricks 上の MLflow には、オープンソース バージョンとは異なる追加機能が提供されており、次の機能で開発エクスペリエンスが向上します。

  • フルマネージド MLflow Tracking Server: Databricks ワークスペース内ですぐに利用できるため、セットアップの遅延なしにエクスペリメントの追跡を開始できます。

  • Databricksノートブックとのシームレスな統合:エクスペリメントは自動的にノートブックにリンクされ、追跡プロセスを合理化します。

  • MLflow Tracing on Databricks: 推論テーブル統合による本番運用レベルのモニタリングを提供し、開発から本番運用までのエンドツーエンドのオブザーバビリティを確保します。

  • Unity Catalog によるモデルのライフサイクル管理 :ワークスペース全体のアクセス、監査、リネージ、モデル検出を一元的に制御できます。

これらの機能を活用することで、LangChain ベースのプロジェクトの開発、モニタリング、管理を最適化でき、 Databricks を MLflow を活用した AI イニシアチブの主要な選択肢にすることができます。

要件

  • Databricks Runtime 13.3 ML 以降。

  • LangChain Databricks 統合パッケージと Databricks SQL コネクタをインストールします。 また、Databricks では、最新バージョンの LangChain を pip インストールして、最新の更新プログラムを適用することもお勧めします。

    • %pip install --upgrade databricks-langchain langchain-community langchain databricks-sql-connector

Databricks が提供するモデルを LLM または埋め込みとして使用する

この統合は、対話型開発のためのクラスタードライバープロキシアプリケーションを使用したモデルサービングの使用をサポートします。

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

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

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

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

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

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

Unity Catalog機能をツールとして使用

注:

Unity Catalog 関数の統合は、 langchain-community パッケージに含まれています。 その機能にアクセスするには、 %pip install langchain-community を使用してインストールする必要があります。 この統合は databricks-langchain 今後のリリースでパッケージに移行されます。

Unity Catalog の SQL 関数または Python 関数を LangChain エージェントのツールとして公開できます。 Unity Catalog 関数の作成と LangChain での使用に関する詳細なガイダンスについては、 Databricks UC Toolkit のドキュメントを参照してください。

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ローダーとLangchainのMLflowノートブック

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

Spark DataFrame エージェント

LangChain の Spark DataFrame Agent は、質問応答に最適化された 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 Agentを使用すると、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
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?")

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

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

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