Udostępnij przez


Integracja LangChain z narzędziami Databricks Unity Catalog

Użyj katalogu Unity Databricks, aby zintegrować funkcje SQL i Python jako narzędzia w przepływach pracy LangChain i LangGraph. Ta integracja łączy zarządzanie katalogiem unity z funkcjami LangChain w celu tworzenia zaawansowanych aplikacji opartych na usłudze LLM.

Wymagania

  • Zainstaluj środowisko Python w wersji 3.10 lub nowszej.

Integracja LangChain z Databricks Unity Catalog

W tym przykładzie utworzysz narzędzie Katalogu Unity, przetestujesz jego funkcjonalność i dodasz je do agenta. Uruchom następujący kod w notatniku usługi Databricks.

Instalowanie zależności

Zainstaluj pakiety AI katalogu Unity, opcjonalnie z pakietami Databricks, a następnie zainstaluj pakiet integracyjny LangChain.

W tym przykładzie użyto języka LangChain, ale podobne podejście można zastosować do innych bibliotek. Zobacz narzędzia Unity Catalog z ramami generatywnej sztucznej inteligencji innych firm.

# Install the Unity Catalog AI integration package with the Databricks extra
%pip install unitycatalog-langchain[databricks]

# Install Databricks Langchain integration package
%pip install databricks-langchain
dbutils.library.restartPython()

Zainicjuj klienta funkcji Databricks

Zainicjuj klienta funkcji Databricks.

from unitycatalog.ai.core.base import get_uc_function_client

client = get_uc_function_client()

Definiowanie logiki narzędzia

Utwórz funkcję w katalogu Unity zawierającą logikę narzędzia.


CATALOG = "my_catalog"
SCHEMA = "my_schema"

def add_numbers(number_1: float, number_2: float) -> float:
  """
  A function that accepts two floating point numbers adds them,
  and returns the resulting sum as a float.

  Args:
    number_1 (float): The first of the two numbers to add.
    number_2 (float): The second of the two numbers to add.

  Returns:
    float: The sum of the two input numbers.
  """
  return number_1 + number_2

function_info = client.create_python_function(
  func=add_numbers,
  catalog=CATALOG,
  schema=SCHEMA,
  replace=True
)

Testowanie funkcji

Przetestuj funkcję, aby sprawdzić, czy działa zgodnie z oczekiwaniami:

result = client.execute_function(
  function_name=f"{CATALOG}.{SCHEMA}.add_numbers",
  parameters={"number_1": 36939.0, "number_2": 8922.4}
)

result.value # OUTPUT: '45861.4'

Owiń funkcję za pomocą zestawu UCFunctionToolKit

Opakuj funkcję przy użyciu elementu UCFunctionToolkit, aby była dostępna dla bibliotek tworzenia agentów. Zestaw narzędzi zapewnia spójność w różnych bibliotekach, dodając przydatne funkcje, takie jak automatyczne śledzenie dla retrieverów.

from databricks_langchain import UCFunctionToolkit

# Create a toolkit with the Unity Catalog function
func_name = f"{CATALOG}.{SCHEMA}.add_numbers"
toolkit = UCFunctionToolkit(function_names=[func_name])

tools = toolkit.tools

Korzystanie z narzędzia w agencie

Dodaj narzędzie do agenta LangChain przy użyciu właściwości tools z UCFunctionToolkit.

Ten przykład tworzy prostego agenta korzystającego z interfejsu API LangChain dla uproszczenia. W przypadku obciążeń produkcyjnych użyj przepływu pracy tworzenia agenta, jak pokazano w ResponsesAgent przykładach.

from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain.prompts import ChatPromptTemplate
from databricks_langchain import (
  ChatDatabricks,
  UCFunctionToolkit,
)
import mlflow

# Initialize the LLM (replace with your LLM of choice, if desired)
LLM_ENDPOINT_NAME = "databricks-meta-llama-3-3-70b-instruct"
llm = ChatDatabricks(endpoint=LLM_ENDPOINT_NAME, temperature=0.1)

# Define the prompt
prompt = ChatPromptTemplate.from_messages(
  [
    (
      "system",
      "You are a helpful assistant. Make sure to use tools for additional functionality.",
    ),
    ("placeholder", "{chat_history}"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}"),
  ]
)

# Enable automatic tracing
mlflow.langchain.autolog()

# Define the agent, specifying the tools from the toolkit above
agent = create_tool_calling_agent(llm, tools, prompt)

# Create the agent executor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_executor.invoke({"input": "What is 36939.0 + 8922.4?"})