分享方式:


Azure Databricks 上用於 LLM 開發的 LangChain

重要

這些是實驗性功能,API 定義可能會變更。

本文說明 LangChain 整合,以利開發及部署 Azure Databricks 上的大型語言模型 (LLM)。

透過這些 LangChain 整合,您可以:

  • 使用 Databricks 服務模型作為 LLM 或內嵌在 LangChain 應用程式中。

  • 整合 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 等的現成大型語言模型,以及各種資料來源和類型。

利用 MLflow 進行 LangChain 開發

LangChain 可以 MLflow 變體提供,讓使用者能夠直接在 Databricks 內利用 MLflow 的強固工具,在開發和實際執行環境中進行實驗追蹤和可檢視性。 如需搭配 LangChain 使用 MLflow 的詳細資料和指導,請參閱 MLflow LangChain 變體文件

MLflow on Databricks 可提供與開放原始碼版本有所區別的其他功能,會藉助下列功能增強您的開發體驗:

  • 完全受控的 MLflow 追蹤伺服器:可立即在 Databricks 工作區內使用,讓您開始追蹤實驗,而不會造成設定延遲。

  • 與 Databricks Notebooks 無縫整合:實驗會自動連結至筆記本,進而簡化追蹤程序。

  • Databricks 上的 MLflow 追蹤:提供生產層級監視與推斷資料表整合,確保從開發到實際執行環境的端對端可檢視性。

  • 使用 Unity 目錄進行模型生命週期管理:集中控制整個工作區的存取、稽核、譜系和模型探索。

  • 整合式 Mosaic AI 代理程式評估:評估 LangChain 應用程式的品質、成本和延遲。

藉由利用這些功能,您可以最佳化 LangChain 型專案的開發、監視和管理,讓 Databricks 成為採用 MLflow 技術的 AI 行動方案的首選。

需求

  • Databricks Runtime 13.3 ML 或更新版本。
  • 安裝 LangChain Databricks 整合套件。 Databricks 還建議 pip 安裝最新版本的 LangChain,以確保您有最新的更新。
    • %pip install --upgrade langchain-databricks langchain

使用 Databricks 服務模型作為 LLM 或內嵌模型

如果您有使用 Databricks 模型服務提供的 LLM 或內嵌模型,您可以直接在 LangChain 內使用它來取代 OpenAI、HuggingFace 或任何其他 LLM 供應商。

若要將模型服務端點用作 LangChain 中的 LLM 或內嵌模型,您需要:

  • 部署至 Azure Databricks 模型服務端點的已註冊 LLM 或內嵌模型。
    • 或者,您可以使用基礎模型 API 提供的模型,這是部署在工作區內且可供立即使用的開放原始碼模型的精選清單。
  • 端點的 CAN QUERY 權限。

聊天模型

下列範例示範如何使用基礎模型 API,將 Meta 的 Llama 3.1 70B Instruct 模型用作 LangChain 中的 LLM 元件。


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 文件中找到其他範例,例如串流、非同步叫用和函式呼叫。

Embeddings

下列範例示範如何使用基礎模型 API,將 databricks-bge-large-en 內嵌模型用作 LangChain 中的內嵌元件。


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 向量搜尋作為向量存放區

Mosaic AI 向量搜尋是 Databricks 上的無伺服器相似性搜尋引擎,可讓您在向量資料庫中儲存資料的向量表示法,包括中繼資料。 您可以從 Unity 目錄管理的 Delta 資料表建立自動更新向量搜尋索引,並透過簡單的 API 來查詢它們,以擷取最相似的向量。

若要在 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 目錄函式作為工具

注意

Unity 目錄函式整合位於 langchain-community 套件中。 您必須使用 %pip install langchain-community 來進行安裝,才能存取其功能。 這項整合將會在即將推出的版本中移轉至 langchain-databricks 套件。

您可以將 Unity 目錄中的 SQL 或 Python 函式公開為 LangChain 代理程式的工具。 如需在 LangChain 中建立 Unity 目錄函式及其使用的完整指導,請參閱 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 進行記錄的擷取型聊天機器人,進而讓模型解譯為泛型 Python 函式以使用 mlflow.pyfunc.load_model() 進行推斷。

Langchain 中的 PySpark DataFrame 載入器和 MLflow 筆記本

取得筆記本

Spark DataFrame Agent

LangChain 中的 Spark DataFrame Agent 允許與 Spark DataFrame 互動,並針對問題解答進行了最佳化。 LangChain 的 Spark DataFrame Agent 文件提供了一個詳細範例,以說明如何建立 Spark DataFrame Agent 並將其與 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 Agent,以協助您進一步了解您的資料。

使用 LangChain 與 Spark DataFrame 筆記本互動

取得筆記本

Databricks SQL Agent

透過 Databricks SQL Agent,任何 Azure Databricks 使用者都可以與 Unity Catalog 中的指定結構描述互動,並根據其資料產生見解。

重要

Databricks SQL Agent 只能查詢資料表,而不會建立資料表。

在下列範例中,資料庫執行個體是在 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

db = SQLDatabase.from_databricks(catalog="samples", schema="nyctaxi")
llm = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=.7)
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?")

注意

如果免費訂用帳戶達到速率限制,OpenAI 模型需要付費訂用帳戶。

下列筆記本示範如何建立和使用 Databricks SQL Agent,以協助您進一步了解資料庫中的資料。

使用 LangChain 與 SQL Database 互動筆記本

取得筆記本