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 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 Tracking Server : Databricks ワークスペース内ですぐに利用できるため、セットアップの遅延なしにエクスペリメントの追跡を開始できます。
-
Databricksノートブックとのシームレスな統合 :エクスペリメントは自動的にノートブックにリンクされ、追跡プロセスを合理化します。
-
MLflow Tracing on Databricks : 推論テーブルの統合により、本番運用レベルのモニタリングを提供し、開発から本番運用までのエンドツーエンドのオブザーバビリティを確保します。
-
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 または埋め込みとして使用する
LLMDatabricksモデルサービング を使用して提供されるLangChain モデルまたは埋め込みモデルをお持ちの場合は、OpenAI、HuggingFace、またはその他のLLM プロバイダーの代わりに 内で直接使用できます。
モデルサービングエンドポイントをLLM LangChainモデルまたは埋め込みモデルとして使用するには、次のものが必要です。
-
LLMDatabricksモデルサービング エンドポイントにデプロイされた登録済みの モデルまたは埋め込みモデル。
- または、ワークスペース内にデプロイされ、すぐに使用できるオープンソースモデルのキュレーションリストである 基盤モデル APIsが提供するモデルを使用することもできます。
-
エンドポイントに対する CAN QUERY アクセス許可。
チャットモデル
次の例は、Meta のLlama 3.1 70B Instruct モデルをLLM LangChainのAPI コンポーネントとして使用する方法を示しています。
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?")
エンドポイントを、サービスエンドポイントにデプロイされたカスタムモデルに置き換えることができます。 ストリーミング、非同期呼び出し、関数呼び出しなどのその他の例については、 LangChain のドキュメントを参照してください。
埋め込み
次の例は、databricks-bge-large-en
埋め込みモデルを LangChain の埋め込みコンポーネントとして使用する方法を示しています。API
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 Vector Searchをベクトルストアとして使用
Mosaic AI Vector Search は、Databricks上のサーバレス類似検索エンジンで、メタデータを含むデータのベクトル表現をベクトルデータベースに格納できます。によって管理されている テーブルから自動更新のベクトル検索インデックスを作成し、簡単な でクエリを実行して、最も類似したベクトルを取得できます。DeltaUnity CatalogAPI
この機能を 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 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 DataFrame からのデータの読み込みを 1 つの方法で簡素化します。
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 Agent を作成して使用し、データに関する理解を深める方法を示しています。
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 エージェントを作成して使用し、データベース内のデータをよりよく理解する方法を示しています。