LLM開発のためのDatabricks上のLangChain

重要

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

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

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

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

  • Mosaic AI Vector Searchを統合して、ベクトルの保存と取得を行います。

  • 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 langchain-databricks langchain-community langchain databricks-sql-connector

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

LLMDatabricksモデルサービング を使用して提供されるLangChain モデルまたは埋め込みモデルをお持ちの場合は、OpenAI、HuggingFace、またはその他のLLM プロバイダーの代わりに 内で直接使用できます。

モデルサービングエンドポイントをLLM LangChainモデルまたは埋め込みモデルとして使用するには、次のものが必要です。

  • LLMDatabricksモデルサービング エンドポイントにデプロイされた登録済みの モデルまたは埋め込みモデル。

    • または、ワークスペース内にデプロイされ、すぐに使用できるオープンソースモデルのキュレーションリストである 基盤モデル APIsが提供するモデルを使用することもできます。

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

チャットモデル

次の例は、Meta のLlama 3.1 70B Instruct モデルをLLM LangChainのAPI コンポーネントとして使用する方法を示しています。


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

エンドポイントを、サービスエンドポイントにデプロイされたカスタムモデルに置き換えることができます。 ストリーミング、非同期呼び出し、関数呼び出しなどのその他の例については、 LangChain のドキュメントを参照してください。

エンべディング

次の例は、databricks-bge-large-en 埋め込みモデルを LangChain の埋め込みコンポーネントとして使用する方法を示しています。API


from langchain_databricks 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 Vector Searchをベクトルストアとして使用

Mosaic AI Vector Search は、Databricks上のサーバレス類似検索エンジンで、メタデータを含むデータのベクトル表現をベクトルデータベースに格納できます。によって管理されている テーブルから自動更新のベクトル検索インデックスを作成し、簡単な でクエリを実行して、最も類似したベクトルを取得できます。DeltaUnity CatalogAPI

この機能を LangChain で使用するには、 DatabricksVectorSearch インスタンスを作成します。

from langchain_databricks 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 Catalog機能をツールとして使用

注:

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

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 langchain_databricks 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データベースを操作するノートブック

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