Udostępnij przez


Integracja OpenAI z narzędziami Unity Catalog w Databricks

Użyj usługi Databricks Unity Catalog, aby zintegrować funkcje SQL i Python jako narzędzia w przepływach pracy interfejsu OpenAI. Ta integracja łączy zarządzanie katalogiem Unity z usługą OpenAI w celu tworzenia zaawansowanych aplikacji generatywnej AI.

Wymagania

  • Zainstaluj środowisko Python w wersji 3.10 lub nowszej.

Integracja narzędzi Unity Catalog z OpenAI

Uruchom następujący kod w notesie lub skrypcie w języku Python, aby utworzyć narzędzie Unity Catalog i użyć go podczas wywoływania modelu OpenAI.

  1. Zainstaluj pakiet integracji Katalogu Unity usługi Databricks dla OpenAI.

    %pip install unitycatalog-openai[databricks]
    %pip install mlflow -U
    dbutils.library.restartPython()
    
  2. Utwórz instancję klienta funkcji katalogu Unity.

    from unitycatalog.ai.core.base import get_uc_function_client
    
    client = get_uc_function_client()
    
  3. Utwórz funkcję katalogu Unity napisaną w języku Python.

    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. Utwórz instancję funkcji Unity Catalog jako narzędzie i sprawdź, czy działa ono prawidłowo, uruchamiając funkcję.

    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. Prześlij żądanie do modelu OpenAI wraz z narzędziami.

    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. Po tym jak system OpenAI zwróci odpowiedź, wywołaj funkcję Wykazu Unity, aby wygenerować odpowiedź zwrotną do OpenAI.

    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. Gdy odpowiedź zostanie zwrócona, możesz skonstruować ładunek odpowiedzi dla kolejnych wywołań interfejsu OpenAI.

    # 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"]
    )
    

Usługi komunalne

Aby uprościć proces tworzenia odpowiedzi narzędzia, pakiet ucai-openai posiada narzędzie generate_tool_call_messages, które konwertuje komunikaty odpowiedzi OpenAI ChatCompletion, aby mogły być używane do generowania odpowiedzi.

from unitycatalog.ai.openai.utils import generate_tool_call_messages

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

Uwaga / Notatka

Jeśli odpowiedź zawiera wiele wpisów wyboru, możesz przekazać argument choice_index podczas wywoływania generate_tool_call_messages, aby wybrać, który wpis wyboru ma być używany. Obecnie nie ma obsługi przetwarzania wpisów wielokrotnego wyboru.