Unity Kataloğu araçlarını üçüncü taraf oluşturucu yapay zeka çerçeveleriyle tümleştirme

Unity Kataloğu AI aracısı araçları LangChain, LlamaIndex, OpenAI ve Anthropic gibi popüler nesil yapay zeka kitaplıklarında kullanılabilir. Bu tümleştirmeler Unity Kataloğu aracı idaresini üçüncü taraf aracı yazma çerçevelerinin özellikleriyle birleştirir. Örneğin:

  • LangChain'de Unity Kataloğu işlevleri, verileri sorgulama veya dönüştürme gibi görevleri gerçekleştirmek için aracının iş akışının bir parçası olabilir.
  • OpenAI veya Antropik tümleştirmelerde işlevler yürütme sırasında doğrudan yapay zeka modeli tarafından çağrılır.

Bir Unity Kataloğu aracı oluşturmak ve bu çerçeveyle kullanmak için aşağıdaki sekmelerde çerçevenizi seçin. Kodu bir Azure Databricks not defterinde veya Python betiğinde çalıştırın.

Gereksinimler

  • Python 3.10 veya üzerini yükleyin.

LangChain

SQL ve Python işlevlerini LangChain ve LangGraph iş akışlarında araç olarak tümleştirmek için Azure Databricks Unity Kataloğu'nu kullanın. Bu tümleştirme, güçlü LLM tabanlı uygulamalar oluşturmak için Unity Kataloğu idaresini LangChain özellikleriyle birleştirir.

Bu örnekte bir Unity Kataloğu aracı oluşturur, işlevselliğini test eder ve aracıya eklersiniz.

Bağımlılıkları yükleme

Databricks'in isteğe bağlı özelliğiyle Unity Catalog yapay zeka paketlerini yükleyin ve LangChain tümleştirme paketini kurun.

# 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()

Databricks İşlev İstemcisi'ni başlatma

Databricks İşlev İstemcisi'ni başlatın.

from unitycatalog.ai.core.base import get_uc_function_client

client = get_uc_function_client()

Aracın mantığını tanımla

Aracın mantığını içeren bir Unity Kataloğu işlevi oluşturun.


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
)

İşlevi test et.

İşlevinizin beklendiği gibi çalışıp çalışmadığını denetlemek için işlevinizi test edin:

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'

UCFunctionToolKit kullanarak işlevi sarmalayın

İşlevi, aracı yazma kitaplıkları tarafından erişilebilir hale getirmek için UCFunctionToolkit kullanarak sarmalayın. Araç seti farklı kitaplıklarda tutarlılık sağlar ve almacılar için otomatik izleme gibi yararlı özellikler ekler.

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

Bir aracı ajan içinde kullanın

Aracı tools özelliğini UCFunctionToolkit kullanarak bir LangChain aracısına ekleyin.

Bu örnek basitlik için LangChain API'sini AgentExecutor kullanarak basit bir aracı yazar. Üretim iş yükleri için Yapay zeka aracısı yazma bölümünde görülen aracı yazma iş akışını kullanın ve bunu Databricks Uygulamalarına dağıtın.

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?"})

LlamaIndex

SQL ve Python işlevlerini LlamaIndex iş akışlarında araç olarak tümleştirmek için Azure Databricks Unity Kataloğu'nu kullanın. Bu tümleştirme, Unity Kataloğu idaresini LlamaIndex'in LLM'ler için büyük veri kümelerini dizinleme ve sorgulama özellikleriyle birleştirir.

  1. LlamaIndex için Databricks Unity Kataloğu tümleştirme paketini yükleyin.

    %pip install unitycatalog-llamaindex[databricks]
    dbutils.library.restartPython()
    
  2. Unity Kataloğu işlevleri istemcisinin bir örneğini oluşturun.

    from unitycatalog.ai.core.base import get_uc_function_client
    
    client = get_uc_function_client()
    
  3. Python'da yazılmış bir Unity Kataloğu işlevi oluşturun.

    CATALOG = "your_catalog"
    SCHEMA = "your_schema"
    
    func_name = f"{CATALOG}.{SCHEMA}.code_function"
    
    def code_function(code: str) -> str:
      """
      Runs Python code.
    
      Args:
        code (str): The Python code to run.
      Returns:
        str: The result of running the Python code.
      """
      import sys
      from io import StringIO
      stdout = StringIO()
      sys.stdout = stdout
      exec(code)
      return stdout.getvalue()
    
    client.create_python_function(
      func=code_function,
      catalog=CATALOG,
      schema=SCHEMA,
      replace=True
    )
    
  4. Unity Kataloğu işlevinin bir örneğini araç seti olarak oluşturun ve aracın düzgün davrandığını doğrulamak için bunu çalıştırın.

    from unitycatalog.ai.llama_index.toolkit import UCFunctionToolkit
    import mlflow
    
    # Enable traces
    mlflow.llama_index.autolog()
    
    # Create a UCFunctionToolkit that includes the UC function
    toolkit = UCFunctionToolkit(function_names=[func_name])
    
    # Fetch the tools stored in the toolkit
    tools = toolkit.tools
    python_exec_tool = tools[0]
    
    # Run the tool directly
    result = python_exec_tool.call(code="print(1 + 1)")
    print(result)  # Outputs: {"format": "SCALAR", "value": "2\n"}
    
  5. Unity Kataloğu işlevini bir LlamaIndex araç koleksiyonunun parçası olarak tanımlayarak bir LlamaIndex ReActAgent'da aracı kullanın. Ardından LlamaIndex araç koleksiyonunu çağırarak aracının düzgün davrandığını doğrulayın.

    from llama_index.llms.openai import OpenAI
    from llama_index.core.agent import ReActAgent
    
    llm = OpenAI()
    
    agent = ReActAgent.from_tools(tools, llm=llm, verbose=True)
    
    agent.chat("Please run the following python code: `print(1 + 1)`")
    

OpenAI

SQL ve Python işlevlerini OpenAI iş akışlarında araç olarak tümleştirmek için Azure Databricks Unity Kataloğu'nu kullanın. Bu tümleştirme, güçlü yapay zeka uygulamaları oluşturmak için Unity Kataloğu idaresini OpenAI ile birleştirir.

  1. OpenAI için Databricks Unity Kataloğu tümleştirme paketini yükleyin.

    %pip install unitycatalog-openai[databricks]
    %pip install mlflow -U
    dbutils.library.restartPython()
    
  2. Unity Kataloğu işlevleri istemcisinin bir örneğini oluşturun.

    from unitycatalog.ai.core.base import get_uc_function_client
    
    client = get_uc_function_client()
    
  3. Python'da yazılmış bir Unity Kataloğu işlevi oluşturun.

    CATALOG = "your_catalog"
    SCHEMA = "your_schema"
    
    func_name = f"{CATALOG}.{SCHEMA}.code_function"
    
    def code_function(code: str) -> str:
      """
      Runs Python code.
    
      Args:
        code (str): The python code to run.
      Returns:
        str: The result of running the Python code.
      """
      import sys
      from io import StringIO
      stdout = StringIO()
      sys.stdout = stdout
      exec(code)
      return stdout.getvalue()
    
    client.create_python_function(
      func=code_function,
      catalog=CATALOG,
      schema=SCHEMA,
      replace=True
    )
    
  4. Unity Kataloğu işlevinin bir örneğini araç seti olarak oluşturun ve işlevi çalıştırarak aracın düzgün davrandığını doğrulayın.

    from unitycatalog.ai.openai.toolkit import UCFunctionToolkit
    import mlflow
    
    # Enable tracing
    mlflow.openai.autolog()
    
    # Create a UCFunctionToolkit that includes the UC function
    toolkit = UCFunctionToolkit(function_names=[func_name])
    
    # Fetch the tools stored in the toolkit
    tools = toolkit.tools
    client.execute_function = tools[0]
    
  5. İsteği araçlarla birlikte OpenAI modeline gönderin.

    import openai
    
    messages = [
      {
        "role": "system",
        "content": "You are a helpful customer support assistant. Use the supplied tools to assist the user.",
      },
      {"role": "user", "content": "What is the result of 2**10?"},
    ]
    response = openai.chat.completions.create(
      model="gpt-4o-mini",
      messages=messages,
      tools=tools,
    )
    # check the model response
    print(response)
    
  6. OpenAI bir yanıt döndürdüğünde, Yanıt yanıtını OpenAI'ye geri oluşturmak için Unity Kataloğu işlev çağrısını çağırın.

    import json
    
    # OpenAI sends only a single request per tool call
    tool_call = response.choices[0].message.tool_calls[0]
    # Extract arguments that the Unity Catalog function needs to run
    arguments = json.loads(tool_call.function.arguments)
    
    # Run the function based on the arguments
    result = client.execute_function(func_name, arguments)
    print(result.value)
    
  7. Yanıt döndürüldükten sonra OpenAI'ye yapılan sonraki çağrılar için yanıt yükünü oluşturabilirsiniz.

    # Create a message containing the result of the function call
    function_call_result_message = {
      "role": "tool",
      "content": json.dumps({"content": result.value}),
      "tool_call_id": tool_call.id,
    }
    assistant_message = response.choices[0].message.to_dict()
    completion_payload = {
      "model": "gpt-4o-mini",
      "messages": [*messages, assistant_message, function_call_result_message],
    }
    
    # Generate final response
    openai.chat.completions.create(
      model=completion_payload["model"], messages=completion_payload["messages"]
    )
    

Yardımcı Programlar

Araç yanıtını oluşturma işlemini basitleştirmek için, ucai-openai paketi OpenAI ChatCompletion yanıt iletilerini yanıt oluşturmada kullanılabilecek hale getiren bir araç sağlar.

from unitycatalog.ai.openai.utils import generate_tool_call_messages

messages = generate_tool_call_messages(response=response, client=client)
print(messages)

Note

Yanıt birden çok seçenekli girdi içeriyorsa, generate_tool_call_messages çağırırken choice_index bağımsız değişkenini, hangi seçim girişinin kullanılacağını seçmek için geçirebilirsiniz. Şu anda çoktan seçmeli girişleri işleme desteği yoktur.

Anthropic

SQL ve Python işlevlerini Anthropic SDK LLM çağrılarında araç olarak tümleştirmek için Azure Databricks Unity Kataloğu'nu kullanın. Bu tümleştirme, güçlü yapay zeka uygulamaları oluşturmak için Unity Kataloğu idaresini Antropik modellerle birleştirir.

Note

Anthropic tümleştirmesi için Databricks Runtime 15.0 ve üzeri gerekir.

  1. Antropik için Databricks Unity Kataloğu tümleştirme paketini yükleyin.

    %pip install unitycatalog-anthropic[databricks]
    dbutils.library.restartPython()
    
  2. Unity Kataloğu işlevleri istemcisinin bir örneğini oluşturun.

    from unitycatalog.ai.core.base import get_uc_function_client
    
    client = get_uc_function_client()
    
  3. Python'da yazılmış bir Unity Kataloğu işlevi oluşturun.

    CATALOG = "your_catalog"
    SCHEMA = "your_schema"
    
    func_name = f"{CATALOG}.{SCHEMA}.weather_function"
    
    def weather_function(location: str) -> str:
      """
      Fetches the current weather from a given location in degrees Celsius.
    
      Args:
        location (str): The location to fetch the current weather from.
      Returns:
        str: The current temperature for the location provided in Celsius.
      """
      return f"The current temperature for {location} is 24.5 celsius"
    
    client.create_python_function(
      func=weather_function,
      catalog=CATALOG,
      schema=SCHEMA,
      replace=True
    )
    
  4. Unity Kataloğu işlevinin bir örneğini araç seti olarak oluşturun.

    from unitycatalog.ai.anthropic.toolkit import UCFunctionToolkit
    
    # Create an instance of the toolkit
    toolkit = UCFunctionToolkit(function_names=[func_name], client=client)
    
  5. Antropik'te bir araç çağrısı kullanın.

    import anthropic
    
    # Initialize the Anthropic client with your API key
    anthropic_client = anthropic.Anthropic(api_key="YOUR_ANTHROPIC_API_KEY")
    
    # User's question
    question = [{"role": "user", "content": "What's the weather in New York City?"}]
    
    # Make the initial call to Anthropic
    response = anthropic_client.messages.create(
      model="claude-3-5-sonnet-20240620",  # Specify the model
      max_tokens=1024,  # Use 'max_tokens' instead of 'max_tokens_to_sample'
      tools=toolkit.tools,
      messages=question  # Provide the conversation history
    )
    
    # Print the response content
    print(response)
    
  6. Bir araç yanıtı oluşturun. Claude modelinden gelen yanıt, bir aracın çağrılması gerekiyorsa bir araç isteği meta veri bloğu içerir.

    from unitycatalog.ai.anthropic.utils import generate_tool_call_messages
    
    # Call the UC function and construct the required formatted response
    tool_messages = generate_tool_call_messages(
      response=response,
      client=client,
      conversation_history=question
    )
    
    # Continue the conversation with Anthropic
    tool_response = anthropic_client.messages.create(
      model="claude-3-5-sonnet-20240620",
      max_tokens=1024,
      tools=toolkit.tools,
      messages=tool_messages,
    )
    
    print(tool_response)
    

Paket, unitycatalog.ai-anthropic Unity Kataloğu işlevine yapılan çağrının ayrıştırılması ve işlenmesini basitleştirmek için bir ileti işleyici yardımcı programı içerir. Yardımcı programı aşağıdakileri yapar:

  1. Araç çağırma gereksinimlerini algılar.
  2. Sorgudan araç çağrı bilgilerini ayıklar.
  3. Unity Kataloğu işlevine yapılan çağrıyı gerçekleştirir.
  4. Unity Kataloğu işlevinden yanıtı ayrıştırıyor.
  5. Claude ile konuşmaya devam etmek için bir sonraki ileti biçimini üretin.

Note

Konuşma geçmişinin tamamı conversation_history bağımsız değişkeni olarak generate_tool_call_messages API'sine sağlanmalıdır. Claude modelleri, konuşmanın başlatılmasını (özgün kullanıcı girişi sorusu) ve sonraki tüm LLM tarafından oluşturulan yanıtları ve çok aşamalı araç çağrı sonuçlarını gerektirir.