LLM 開発のための Databricks 上の LangChain
これらは試験的な機能であり、API 定義は変更される可能性があります。
この記事では、Databricks での大規模言語モデル (LLM) の開発とデプロイを容易にする LangChain 統合について説明します。
これらのLangChain統合により、次のことができます。
-
Databricks が提供するモデルを LLM または埋め込みとして LangChain アプリケーションで使用できます。
-
LangChainモデルとパフォーマンスをMLflowエクスペリメントで管理および追跡します。
-
MLflow Tracingを使用して、LangChain アプリケーションの開発フェーズと本番運用フェーズをトレースします。
-
PySpark データフレーム ローダーを使用して、PySpark データフレーム からデータをシームレスに読み込みます。
-
Spark データフレーム Agent または Databricks SQL Agent で自然言語を使用して、データを対話形式でクエリします。
LangChainとは何ですか?
LangChainは、大規模言語モデル(LLM)を利用するアプリケーションの作成を支援するために設計されたソフトウェアフレームワークです。 LangChainの強みは、その幅広い統合と機能にあります。 これには、APIラッパー、Webスクレイピングサブシステム、コード分析ツール、ドキュメント要約ツールなどが含まれます。 また、OpenAI、 Anthropic、HuggingFaceなどの大規模言語モデルや、さまざまなデータソースやタイプもサポートしています。
MLflow を LangChain 開発に活用する
LangChain は MLflow フレーバーとして提供されており、ユーザーは MLflowの堅牢なツールを活用してエクスペリメントの追跡とオブザーバビリティを Databricks内で直接行うことができます。 MLflow と LangChain の併用に関する詳細とガイダンスについては、 MLflow LangChain フレーバーのドキュメントを参照してください。
Databricks 上の MLflow には、オープンソース バージョンとは異なる追加機能が提供されており、次の機能で開発エクスペリエンスが向上します。
- フルマネージド MLflowトラッキングサーバー : 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 または埋め込みとして使用する
この統合は、モデルサービングとクラスタードライバープロキシアプリケーションを使用してインタラクティブな開発を行うことをサポートします。
クラスター ドライバー プロキシ アプリケーションを LLM として LangChain にラップするには、次のものが必要です。
- LLMDatabricks汎用コンピュートに読み込まれた (専用または分離なしの共有アクセス モード)。
- ドライバー ノードで実行されているローカル HTTP サーバーで、JSON 入力/出力で HTTP POST を使用して "/" でモデルを提供します。
- アプリは [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 データフレーム ローダーを使用してデータを読み込む
LangChain の PySpark データフレーム ローダー は、PySpark データフレーム からのデータの読み込みを 1 つの方法で簡素化します。
from langchain.document_loaders import PySparkDataFrameLoader
loader = PySparkDataFrameLoader(spark, wikipedia_dataframe, page_content_column="text")
documents = loader.load()
次のノートブックでは、PySpark データフレーム ローダーを使用して、MLflowによって記録されるリトリーバーベースのチャットボットを作成し、モデルを mlflow.pyfunc.load_model()
で推論するための汎用 Python 関数として解釈できる例を示しています。
LangchainにおけるPySpark データフレーム ローダーとMLflowノートブック
Spark データフレーム エージェント
LangChain の Spark データフレーム Agent は、質問応答に最適化された Spark データフレーム との対話を可能にします。 LangChain の Spark データフレーム Agent のドキュメント には、データフレーム を使用して Spark データフレーム 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 データフレーム Agent を作成して使用し、データに関する理解を深める方法を示しています。
LangChain を使用して Spark データフレーム ノートブックと対話する
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 エージェントを作成して使用し、データベース内のデータをよりよく理解する方法を示しています。