Использование Azure OpenAI в Fabric с SynapseML (предварительная версия)

В этой статье показано, как использовать Azure OpenAI в Fabric с SynapseML. SynapseML — это библиотека с открытым кодом, которая обеспечивает распределенную обработку больших наборов данных с помощью средств Foundry. Сценарии с одним или небольшим набором данных см. в статье "Использование Azure OpenAI" с пакетом SDK для Python или использование Azure OpenAI с функциями искусственного интеллекта.

Зачем использовать SynapseML?

SynapseML предлагает несколько преимуществ для работы с Azure OpenAI в Fabric:

  • Открытый исходный код: доступно по адресу https://github.com/microsoft/SynapseML
  • Настройка клиента не требуется: проверка подлинности обрабатывается автоматически в Fabric
  • Распределенная обработка: эффективнее обрабатывать миллионы строк с минимальными затратами. Используйте функции искусственного интеллекта Fabric для проверенных преобразований текста в масштабе.
  • Быстрые пакетные рабочие нагрузки: оптимизировано для крупномасштабных операций

Предпосылки

Замечание

SynapseML следует запускать в средах выполнения PySpark Fabric Runtime 1.3 и более поздних версий.

import synapse.ml.core
from synapse.ml.services.openai import *

Преобразователь OpenAIPrompt обеспечивает большую гибкость, включая поддержку API завершения чата или ответов, отслеживание использования и структурированные выходные данные. Для более точного управления используйте OpenAIChatCompletions или OpenAIResponses преобразователи напрямую. Дополнительные сведения см. в SynapseML GitHub Example Notebook

Использование API завершения чата

from synapse.ml.services.openai import OpenAIPrompt

# Create a DataFrame with prompts
df = spark.createDataFrame([
    ("Explain quantum computing in simple terms.",),
    ("What are the benefits of exercise?",),
    ("Describe the water cycle.",)
]).toDF("prompt")

# Configure OpenAIPrompt with chat_completions API
prompt_completion = (
    OpenAIPrompt()
    .setDeploymentName("gpt-4.1")
    .setApiType("chat_completions")  # Accepts "chat_completions" or "responses"
    .setPromptCol("prompt")
    .setUsageCol("usage")  # Track token usage
    .setOutputCol("completions")
)

# Transform and display results
display(prompt_completion.transform(df).select("prompt", "completions", "usage"))

Использование API ответов

API ответов обеспечивает улучшенное качество отклика и улучшенную обработку структурированных выходных данных.

from synapse.ml.services.openai import OpenAIPrompt

# Configure OpenAIPrompt with responses API
prompt_responses = (
    OpenAIPrompt()
    .setDeploymentName("gpt-4.1")
    .setApiType("responses")
    .setPromptCol("prompt")
    .setUsageCol("usage")  # Track token usage
    .setStore(False)  # Fabric LLM endpoint does not support storage
    .setOutputCol("responses")
)

# Transform and display results
display(prompt_responses.transform(df).select("prompt", "responses", "usage"))

Замечание

Конечная точка LLM Fabric не поддерживает параметр store, установленный на True, или параметр previous_response_id.

Структурированные выходные данные с помощью OpenAIPrompt

Запрос структурированных выходных данных JSON с помощью setResponseFormat метода. Формат ответа принимает следующие параметры:

Формат Description
None (по умолчанию) Позвольте LLM решить формат отклика на основе инструкций и входных данных, которые могут отличаться в каждой строке. Ответы могут быть обычным текстом или словарем JSON с различными полями.
"text" или {"type": "text"} Заставляет использовать простой текст для всех строк.
"json_object" или {"type": "json_object"} Возвращает словарь JSON в текстовой форме, где LLM решает поля. Требуется слово "json" в запросе.
{"type": "json_schema", ...} Возвращает словарь JSON, соответствующий пользовательской схеме JSON. Обеспечивает точный контроль над структурой ответа.
from synapse.ml.services.openai import OpenAIPrompt

# Create a DataFrame with prompts requiring structured output
df = spark.createDataFrame([
    ("List three programming languages with their main use cases.",),
]).toDF("prompt")

# Configure OpenAIPrompt with JSON response format
prompt_json = (
    OpenAIPrompt()
    .setDeploymentName("gpt-4.1")
    .setApiType("chat_completions")
    .setPromptCol("prompt")
    .setUsageCol("usage")
    .setResponseFormat({"type": "json_object"})  # Request JSON output
    .setOutputCol("completions")
)

# Transform and display results
display(prompt_json.transform(df).select("prompt", "completions", "usage"))

Эмбеддинги с помощью OpenAIEmbedding

Внедрение — это специальный формат представления данных моделями и алгоритмами машинного обучения. Внедрение представляет собой представление семантического значения фрагмента текста с высокой информационной плотностью. Каждое внедрение представляет собой такой вектор чисел с плавающей запятой, что расстояние между двумя внедрениями в векторном пространстве коррелирует с семантическим сходством между двумя входными значениями в исходном формате. Например, если два текста похожи, их векторные представления также должны быть похожи.

df = spark.createDataFrame(
    [
        ("Once upon a time",),
        ("Best programming language award goes to",),
        ("SynapseML is ",)
    ]
).toDF("text")
embedding = (
    OpenAIEmbedding()
    .setDeploymentName("text-embedding-ada-002")
    .setTextCol("text")
    .setOutputCol("out")
)
display(embedding.transform(df))

Доступные модели и ставки

Сведения о доступных моделях и нормах расхода см. в разделе «Нормы расхода для инструментов Foundry».