LLM 開発用の Azure Databricks 上の LangChain
重要
これらは実験的な機能であり、API 定義は変更される可能性があります。
この記事では、Azure Databricks での大規模言語モデル (LLM) の開発とデプロイを容易にする LangChain 統合について説明します。
これらの LangChain 統合により、次のことが可能になります。
- LangChain アプリケーションで Databricks によって提供されるモデルを LLM または埋め込みとして使用します。
- ベクトルの保存と取得のために Mosaic AI ベクトル検索を統合します。
- MLflow 実験で LangChain モデルとパフォーマンスを管理および追跡します。
- MLflow トレースを使用して LangChain アプリケーションの開発フェーズと運用フェーズをトレースします。
- PySpark DataFrame ローダーを使用して、PySpark DataFrame からデータをシームレスに読み込みます。
- Spark DataFrame Agent または Databricks SQL Agent を使用して、自然言語を使用してデータに対話形式でクエリを実行します。
LangChain とは
LangChain は、大規模言語モデル (LLM) を利用するアプリケーションの作成を支援するように設計されたソフトウェア フレームワークです。 LangChain の強みは、その幅広い統合と機能にあります。 これには、API ラッパー、Web スクレイピング サブシステム、コード分析ツール、ドキュメント要約ツールなどが含まれます。 また、OpenAI、Anthropic、HuggingFace などの大規模な言語モデルを、さまざまなデータ ソースやタイプとともにすぐにサポートします。
LangChain 開発に MLflow を活用する
LangChain は MLflow フレーバーとして使用できます。これにより、ユーザーは Databricks 内の開発環境と運用環境の両方で直接、実験追跡と監視に MLflow の信頼性の高いツールを利用することができます。 LangChain で MLflow を使用する方法の詳細とガイダンスについては、MLflow LangChain フレーバーのドキュメントを参照してください。
Databricks 上の MLflow にはオープンソース バージョンとは区別される追加機能が用意されており、次の機能によって開発エクスペリエンスが向上します。
- フル マネージド MLflow Tracking Server: Databricks ワークスペース内ですぐに利用でき、セットアップの遅延なく実験の追跡を開始できます。
- Databricks Notebooks とのシームレスな統合: 実験はノートブックに自動的にリンクされ、追跡プロセスが合理化されます。
- Databricks 上のMLflow トレース: 推論テーブル統合による運用レベルの監視を提供し、開発から運用までのエンドツーエンドの監視が保証されます。
- Unity Catalogによるモデル ライフサイクル管理: ワークスペース全体のアクセス、監査、系列、モデル検出を一元的に制御します。
- 統合されたMosaic AI エージェント評価: LangChain アプリケーションの品質、コスト、待機時間を評価します。
これらの機能を活用することで、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 または埋め込みとして使用する
Databricks Model Serving を使用して提供された LLM または埋め込みモデルがある場合は、OpenAI、HuggingFace、またはその他の LLM プロバイダーの代わりに、LangChain 内でそれを直接使用することができます。
モデル提供エンドポイントを LangChain の LLM または埋め込みモデルとして使用するには、次のものが必要です。
- Azure Databricks モデル提供エンドポイントにデプロイされた登録済み LLM または埋め込みモデル。
- または、ワークスペース内にデプロイされ、すぐに使用できるオープンソース モデルのキュレーション リストである Foundation Model API で使用可能なモデルを使用することもできます。
- エンドポイントに対する CAN QUERY アクセス許可。
チャット モデル
次の例は、Foundation Models API を使用して、Meta の Llama 3.1 70B Instruct モデルを LangChain で LLM コンポーネントとして使用する方法を示しています。
from databricks_langchain import ChatDatabricks
chat_model = ChatDatabricks(
endpoint="databricks-meta-llama-3-1-70b-instruct"
temperature=0.1,
max_tokens=250,
)
chat_model.invoke("How to use Databricks?")
この endpoint は、提供エンドポイントにデプロイされたカスタム モデルに置き換えることができます。 ストリーミング、非同期呼び出し、関数呼び出しなどのその他の例については、LangChain のドキュメントを参照してください。
埋め込み
次の例は、Foundation Models API を使用して、databricks-bge-large-en
埋め込みモデルを LangChain で埋め込みコンポーネントとして使用する方法を示しています。
from databricks_langchain import DatabricksEmbeddings
embeddings = DatabricksEmbeddings(endpoint="databricks-bge-large-en")
その他の詳細については、LangChain のドキュメントを参照してください。
LLM(大規模言語モデル)
警告
入力候補モデルはレガシ機能と見なされます。 ほとんどの最新モデルではチャット入力候補インターフェイスが使用されるため、代わりに ChatModel コンポーネントで使用する必要があります。
次の例は、入力候補モデル API を LangChain で LLM コンポーネントとして使用する方法を示しています。
from langchain_community.llms import Databricks
llm = Databricks(endpoint_name="falcon-7b-instruct", model_kwargs={"temperature": 0.1, "max_tokens": 100})
llm("How are you?")
Mosaic AI ベクトル検索をベクター ストアとして使用する
Mosaic AI ベクトル検索は、メタデータを含むデータのベクトル表現をベクトル データベースに保存できるようにする、Databricks 上のサーバーレス類似検索エンジンです。 Unity Catalog で管理されている Delta テーブルから自動更新ベクトル検索インデックスを作成し、単純な API を使用してそれらのクエリを実行し、類似性の最も高いベクトルを取得することができます。
LangChain でこの機能を使用するには、DatabricksVectorSearch
インスタンスを作成します。
from databricks_langchain import DatabricksVectorSearch
vector_store = DatabricksVectorSearch(index_name="<YOUR_VECTOR_SEARCH_INDEX_NAME>")
retriever = vector_store.as_retriever(search_kwargs={"k": 5})
retriever.invoke("What is Databricks?")
詳しくは、DatabricksVectorSearch のドキュメントを参照してください。
Unity カタログ関数をツールとして使用する
Note
Unity Catalog 関数の統合は、langchain-community
パッケージ内にあります。 この機能にアクセスするには、%pip install langchain-community
を使用してインストールする必要があります。 この統合は、今後のリリースで databricks-langchain
パッケージに移行されます。
LangChain エージェントのツールとして、Unity Catalog で SQL 関数または Python 関数を公開できます。 Unity Catalog 関数の作成と LangChain での使用に関する完全なガイダンスについては、Databricks UC ツールキットのドキュメントを参照してください。
PySpark DataFrame ローダーを使用してデータを読み込む
LangChain の PySpark DataFrame ローダーは、単一のメソッドで PySpark DataFrame からのデータのロードを簡素化します。
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 関数として解釈されるようになります。
Langchain ノートブックの PySpark DataFrame ローダーと MLflow
Spark DataFrame エージェント
LangChain の Spark DataFrame エージェントを使用すると、質問応答用に最適化された Spark DataFrame との対話が可能になります。 LangChain の Spark DataFrame エージェント ドキュメントには、DataFrame で Spark 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)
...
次のノートブックでは、データに関する分析情報を得るために Spark DataFrame エージェントを作成および使用する方法を示します。
LangChain を使用して Spark DataFrame ノートブックと対話する
Databricks SQL エージェント
Databricks SQL エージェントを使用するとすべての Azure Databricks ユーザーが Unity カタログで指定されたスキーマと対話し、データに関する分析情報を生成できます。
重要
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 エージェントを作成および使用する方法を示します。