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 Catalog 進行模型生命週期管理:集中控制跨越整個工作區的存取、稽核、譜系和模型發現。
- 整合式Mosaic AI 代理程式評估:評估 LangChain 應用程式的品質、成本和延遲。
藉由利用這些功能,您可以將 LangChain 型專案的開發、監視和管理優化,讓 Databricks 成為 MLflow 支援的 AI 計劃的首選。
需求
- Databricks Runtime 13.3 ML 或更新版本。
- 安裝 LangChain Databricks 整合套件和 Databricks SQL 連接器。 Databricks 還建議 pip 安裝最新版本的 LangChain,以確保您有最新的更新。
%pip install --upgrade databricks-langchain langchain-community langchain databricks-sql-connector
使用 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 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 文件中找到其他範例,例如串流、非同步叫用和函式呼叫。
Embeddings
下列範例示範如何使用基礎模型 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 目錄所管理的 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 目錄函式作為工具
注意
Unity Catalog 函式整合位於 langchain-community
套件中。 您必須使用 %pip install langchain-community
來進行安裝,才能存取其功能。 這項整合將會在即將推出的版本中移轉至 databricks-langchain
套件。
您可以將 Unity 目錄中的 SQL 或 Python 函式公開為 LangChain 代理程式的工具。 如需在 LangChain 中建立 Unity 目錄函式和使用它們的完整指引,請參閱 Databricks UC Toolkit 檔案。
使用 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 目錄中的指定架構互動,併產生其數據的見解。
重要
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
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 Agent,以協助您進一步了解資料庫中的資料。