Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Du kan bruke Azure OpenAI-tjenesten til å løse mange oppgaver på naturlig språk ved å be om fullførings-API-et. For å gjøre det enklere å skalere prompting-arbeidsflytene dine fra noen få eksempler til store datasett med eksempler, integreres Azure OpenAI-tjenesten med det distribuerte maskinlæringsbiblioteket SynapseML. Ved å bruke denne integrasjonen kan du bruke Apache Spark sitt distribuerte databehandlingsrammeverk til å behandle millioner av prompts med OpenAI-tjenesten. Denne veiledningen viser hvordan man kan anvende store språkmodeller i distribuert skala ved å bruke Azure OpenAI og Microsoft Fabric.
Forutsetning
De viktigste forutsetningene for denne hurtigstarten inkluderer en fungerende Azure OpenAI-ressurs og en Apache Spark-klynge med SynapseML installert.
Skaff deg et abonnement Microsoft Fabric. Eller meld deg på en gratis prøveperiode Microsoft Fabric.
Logg inn på Microsoft Fabric.
Bytt til Fabric ved å bruke erfaringsbryteren nederst til venstre på hjemmesiden din.
- Gå til Data Science-opplevelsen i Microsoft Fabric.
- Opprett en ny notatblokk.
- En Azure OpenAI-ressurs – create a resource
Importer denne veiledningen som en notatblokk
Neste trinn er å legge til denne koden i Spark-klyngen. Du kan enten opprette en notatblokk i Spark-plattformen og kopiere koden til denne notatblokken for å kjøre demoen. Eller last ned notatboken og importer den til Synapse Analytics.
- Last ned denne demoen som en notatblokk (velg Raw, og lagre deretter filen)
- Importer notatblokken til Synapse-arbeidsområdet , eller hvis du bruker Stoffimport til Fabric Workspace
- Installer SynapseML på klyngen. Se installasjonsinstruksjonene for Synapse nederst på SynapseML-nettstedet. Hvis du bruker Fabric, sjekk installasjonsguiden. Dette steget krever at du limer inn en ekstra celle øverst i notatboken du importerte.
- Koble notatblokken til en klynge, og følg med, redigere og kjøre cellene.
Fyll ut tjenesteinformasjon
Deretter redigerer du cellen i notatblokken for å peke til tjenesten. Sett variablene service_name, deployment_name, location, og key til å matche din OpenAI-tjeneste:
import os
from pyspark.sql import SparkSession
from synapse.ml.core.platform import running_on_synapse, find_secret
# Bootstrap Spark Session
spark = SparkSession.builder.getOrCreate()
if running_on_synapse():
from notebookutils.visualization import display
# Fill in the following lines with your service information
# Learn more about selecting which embedding model to choose: https://openai.com/blog/new-and-improved-embedding-model
service_name = "synapseml-openai"
deployment_name = "gpt-4.1-mini"
deployment_name_embeddings = "text-embedding-3-small"
key = find_secret(
"openai-api-key"
) # please replace this line with your key as a string
assert key is not None and service_name is not None
Opprette et datasett med ledetekster
Deretter oppretter du en dataramme som består av en rekke rader, med én ledetekst per rad.
Du kan også laste inn data direkte fra ADLS eller andre databaser. Hvis du vil ha mer informasjon om innlasting og klargjøring av Spark-datarammer, kan du se veiledningen for innlasting av Apache Spark-data.
df = spark.createDataFrame(
[
("Hello my name is",),
("The best code is code that's",),
("SynapseML is ",),
]
).toDF("prompt")
Create OpenAIPrompt Apache Spark client
For å bruke Azure OpenAI-tjenesten på datarammen din, opprett et OpenAIPrompt-objekt som fungerer som en distribuert klient. Sett tjenesteparametrene med enten én verdi eller en dataframe-kolonne ved å bruke de riktige setterne på objektet OpenAIPrompt . I dette eksempelet, sett maxTokens til 200. En token er omtrent fire tegn, og denne grensen gjelder summen av prompten og resultatet. Sett parameteren promptCol med navnet på promptkolonnen i datarammen.
from synapse.ml.services.openai import OpenAIPrompt
completion = (
OpenAIPrompt()
.setSubscriptionKey(key)
.setDeploymentName(deployment_name)
.setCustomServiceName(service_name)
.setMaxTokens(200)
.setPromptCol("prompt")
.setErrorCol("error")
.setOutputCol("completions")
)
Transformér datarammen ved å bruke OpenAIPrompt-klienten
Etter å ha opprettet datarammen og prompt-klienten, transformerer du inputdatasetet ditt og legger til en kolonne med navnet completions med all informasjonen tjenesten legger til. Merk bare teksten for enkelhet.
from pyspark.sql.functions import col
completed_df = completion.transform(df).cache()
display(
completed_df.select(
col("prompt"),
col("error"),
col("completions.choices.text").getItem(0).alias("text"),
)
)
Utdataene skal se omtrent slik ut. Fullføringsteksten er forskjellig fra eksempelet.
| omgående | feil | Tekst |
|---|---|---|
| Hei, navnet mitt er | null | Makaveli, jeg er 18 år gammel og vil bli rapper når jeg blir stor. Jeg elsker å skrive og lage musikk. Jeg er fra Los Angeles, CA. |
| Den beste koden er kode som er | null | forståelig Dette er en subjektiv påstand, og det finnes ikke noe definitivt svar. |
| SynapseML er | null | En maskinlæringsalgoritme som kan lære å forutsi fremtidige utfall av hendelser. |
Flere brukseksempler
Generering av tekstembeddinger
I tillegg til å fullføre tekst, kan du også legge inn tekst for bruk i nedstrøms algoritmer eller vektorgjenfinningsarkitekturer. Ved å lage embeddings kan du søke i og hente dokumenter fra store samlinger. Bruk denne tilnærmingen når prompt engineering ikke er tilstrekkelig for oppgaven. For mer informasjon om bruk, OpenAIEmbeddingse innbyggingsguiden.
from synapse.ml.services.openai import OpenAIEmbedding
embedding = (
OpenAIEmbedding()
.setSubscriptionKey(key)
.setDeploymentName(deployment_name_embeddings)
.setCustomServiceName(service_name)
.setTextCol("prompt")
.setErrorCol("error")
.setOutputCol("embeddings")
)
display(embedding.transform(df))
Chatfullføring
Modeller som GPT-4o og GPT-4.1 forstår chatter i stedet for enkeltprompter. Transformatoren OpenAIChatCompletion viser denne funksjonaliteten i stor skala.
from synapse.ml.services.openai import OpenAIChatCompletion
from pyspark.sql import Row
from pyspark.sql.types import *
def make_message(role, content):
return Row(role=role, content=content, name=role)
chat_df = spark.createDataFrame(
[
(
[
make_message(
"system", "You are an AI chatbot with red as your favorite color"
),
make_message("user", "What's your favorite color"),
],
),
(
[
make_message("system", "You are very excited"),
make_message("user", "How are you today"),
],
),
]
).toDF("messages")
chat_completion = (
OpenAIChatCompletion()
.setSubscriptionKey(key)
.setDeploymentName(deployment_name)
.setCustomServiceName(service_name)
.setMessagesCol("messages")
.setErrorCol("error")
.setOutputCol("chat_completions")
)
display(
chat_completion.transform(chat_df).select(
"messages", "chat_completions.choices.message.content"
)
)
Forbedre gjennomstrømming med forespørselsgruppering
Eksemplet gjør flere forespørsler til tjenesten, én for hver ledetekst. Hvis du vil fullføre flere ledetekster i én enkelt forespørsel, bruker du satsvis modus. Først, i objektet OpenAIPrompt , i stedet for å sette Prompt-kolonnen til "Prompt", spesifiser "batchPrompt" for BatchPrompt-kolonnen.
Hvis du vil gjøre dette, oppretter du en dataramme med en liste over ledetekster per rad.
batch_df = spark.createDataFrame(
[
(["The time has come", "Pleased to", "Today stocks", "Here's to"],),
(["The only thing", "Ask not what", "Every litter", "I am"],),
]
).toDF("batchPrompt")
Deretter lager du objektet OpenAIPrompt . I stedet for å angi ledetekstkolonnen, angir du batchPrompt-kolonnen hvis kolonnen er av typen Array[String].
batch_completion = (
OpenAIPrompt()
.setSubscriptionKey(key)
.setDeploymentName(deployment_name)
.setCustomServiceName(service_name)
.setMaxTokens(200)
.setBatchPromptCol("batchPrompt")
.setErrorCol("error")
.setOutputCol("completions")
)
I kallet om å transformere, gjøres det en forespørsel per rad. Siden hver rad inneholder flere prompts, sender hver forespørsel alle prompts i den raden. Resultatene inneholder en rad for hver rad i forespørselen.
completed_batch_df = batch_completion.transform(batch_df).cache()
display(completed_batch_df)
Bruke en automatisk minibatcher
Hvis dataene dine er i kolonneformat, kan du transponere dem til radformat ved å bruke SynapseMLs FixedMiniBatcherTransformer.
from pyspark.sql.types import StringType
from synapse.ml.stages import FixedMiniBatchTransformer
from synapse.ml.core.spark import FluentAPI
completed_autobatch_df = (
df.coalesce(
1
) # Force a single partition so that our little 4-row dataframe makes a batch of size 4, you can remove this step for large datasets
.mlTransform(FixedMiniBatchTransformer(batchSize=4))
.withColumnRenamed("prompt", "batchPrompt")
.mlTransform(batch_completion)
)
display(completed_autobatch_df)
Ledetekst for oversettelse
Den Azure OpenAI-tjenesten kan løse mange forskjellige naturlige språkoppgaver gjennom prompt engineering. Dette eksempelet viser prompting for språkoversettelse:
translate_df = spark.createDataFrame(
[
("Japanese: Ookina hako \nEnglish: Big box \nJapanese: Midori tako\nEnglish:",),
(
"French: Quel heure et il au Montreal? \nEnglish: What time is it in Montreal? \nFrench: Ou est le poulet? \nEnglish:",
),
]
).toDF("prompt")
display(completion.transform(translate_df))
Be om svar på spørsmål
Dette eksempelet utløser modellen for svar på allmennkunnskapsspørsmål:
qa_df = spark.createDataFrame(
[
(
"Q: Where is the Grand Canyon?\nA: The Grand Canyon is in Arizona.\n\nQ: What is the weight of the Burj Khalifa in kilograms?\nA:",
)
]
).toDF("prompt")
display(completion.transform(qa_df))