Freigeben über


Azure OpenAI-Clientbibliothek für JavaScript– Version 1.0.0-beta.12

Die Azure OpenAI-Clientbibliothek für JavaScript ist eine Anpassung der REST-APIs von OpenAI, die eine idiomatische Schnittstelle und eine umfassende Integration in das restliche Azure SDK-Ökosystem bietet. Es kann eine Verbindung mit Azure OpenAI-Ressourcen oder mit dem Nicht-Azure OpenAI-Rückschlussendpunkt herstellen, was ihn zu einer hervorragenden Wahl für die Nicht-Azure OpenAI-Entwicklung macht.

Verwenden Sie die Clientbibliothek für Azure OpenAI für Folgendes:

Azure OpenAI ist ein verwalteter Dienst, mit dem Entwickler Inhalte aus OpenAI-Modellen in Azure-Ressourcen bereitstellen, optimieren und generieren können.

Sehen Sie sich die folgenden Beispiele an:

Wichtige Links:

Erste Schritte

const { OpenAIClient, AzureKeyCredential } = require("@azure/openai");

const client = new OpenAIClient(
  "https://<resource name>.openai.azure.com/", 
  new AzureKeyCredential("<Azure API key>")
);
const { id, created, choices, usage } = await client.getCompletions("<deployment ID>", ["YOUR PROMPT HERE"]);

Die derzeitig unterstützten Umgebungen

Voraussetzungen

Wenn Sie eine Azure OpenAI-Ressource verwenden möchten, benötigen Sie ein Azure-Abonnement und Azure OpenAI-Zugriff. Dadurch können Sie eine Azure OpenAI-Ressource erstellen und sowohl eine Verbindungs-URL als auch API-Schlüssel abrufen. Weitere Informationen finden Sie unter Schnellstart: Erste Schritte beim Generieren von Text mithilfe des Azure OpenAI-Diensts.

Wenn Sie die Azure OpenAI JS-Clientbibliothek verwenden möchten, um eine Verbindung mit Nicht-Azure OpenAI herzustellen, benötigen Sie einen API-Schlüssel aus einem Entwicklerkonto unter https://platform.openai.com/.

Installieren Sie das Paket @azure/openai.

Installieren Sie die Azure OpenAI-Clientclientbibliothek für JavaScript mit npm:

npm install @azure/openai

Erstellen und Authentifizieren eines OpenAIClient

Um einen Client für die Verwendung mit Azure OpenAI zu konfigurieren, geben Sie einen gültigen Endpunkt-URI für eine Azure OpenAI-Ressource zusammen mit den entsprechenden Schlüsselanmeldeinformationen, Tokenanmeldeinformationen oder Azure-Identitätsanmeldeinformationen an, die für die Verwendung der Azure OpenAI-Ressource autorisiert sind. Um stattdessen den Client für die Verbindung mit dem OpenAI-Dienst zu konfigurieren, geben Sie einen API-Schlüssel über das OpenAI-Entwicklerportal an.

Verwenden eines API-Schlüssels aus Azure

Navigieren Sie im Azure-Portal zu Ihrer OpenAI-Ressource, und rufen Sie einen API-Schlüssel ab, oder verwenden Sie den folgenden Azure CLI-Codeausschnitt :

Hinweis: Manchmal wird der API-Schlüssel als "Abonnementschlüssel" oder "Abonnement-API-Schlüssel" bezeichnet.

az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>

Sobald Sie über einen API-Schlüssel und einen Endpunkt verfügen, können Sie die AzureKeyCredential -Klasse verwenden, um den Client wie folgt zu authentifizieren:

const { OpenAIClient, AzureKeyCredential } = require("@azure/openai");

const client = new OpenAIClient("<endpoint>", new AzureKeyCredential("<API key>"));

Verwenden von Azure Active Directory-Anmeldeinformationen

Die Client-API-Schlüsselauthentifizierung wird in den meisten Beispielen verwendet, Aber Sie können sich auch mithilfe der Azure Identity-Bibliothek bei Azure Active Directory authentifizieren. Um den unten gezeigten DefaultAzureCredential-Anbieter oder andere Anmeldeinformationsanbieter zu verwenden, die mit dem Azure SDK bereitgestellt werden, installieren Sie das @azure/identity Paket:

npm install @azure/identity

Sie müssen auch eine neue AAD-Anwendung registrieren und Zugriff auf OpenAI gewähren, indem Sie Ihrem Dienstprinzipal die "Cognitive Services User" Rolle zuweisen (Hinweis: Andere Rollen wie "Owner" erteilen nicht die erforderlichen Berechtigungen, reichen nur "Cognitive Services User" aus, um die Beispiele und den Beispielcode auszuführen).

Legen Sie die Werte der Client-ID, der Mandanten-ID und des geheimen Clientschlüssels der AAD-Anwendung als Umgebungsvariablen fest: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.

const { OpenAIClient } = require("@azure/openai");
const { DefaultAzureCredential } = require("@azure/identity");

const client = new OpenAIClient("<endpoint>", new DefaultAzureCredential());

Verwenden eines API-Schlüssels aus OpenAI

Um stattdessen den Client für die Verbindung mit dem OpenAI-Dienst zu konfigurieren, geben Sie einen API-Schlüssel über das OpenAI-Entwicklerportal an. Sobald Sie über einen API-Schlüssel verfügen, können Sie die OpenAIKeyCredential -Klasse verwenden, um den Client wie folgt zu authentifizieren:

const { OpenAIClient, OpenAIKeyCredential } = require("@azure/openai");

const client = new OpenAIClient(new OpenAIKeyCredential("<API key>"));

Wichtige Begriffe

Das zu verstehende Standard Konzept ist Vervollständigungen. Kurz erläutert, stellt Vervollständigungen ihre Funktionalität in Form einer Texteingabeaufforderung bereit, die mithilfe eines bestimmten Modells dann versucht, den Kontext und die Muster abzugleichen und einen Ausgabetext bereitzustellen. Der folgende Codeausschnitt bietet eine grobe Übersicht:

const { OpenAIClient, AzureKeyCredential } = require("@azure/openai");

async function main(){
  const client = new OpenAIClient(
  "https://your-azure-openai-resource.com/",
  new AzureKeyCredential("your-azure-openai-resource-api-key"));

  const { choices } = await client.getCompletions(
    "text-davinci-003", // assumes a matching model deployment or model name
    ["Hello, world!"]);

  for (const choice of choices) {
    console.log(choice.text);
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Beispiele

Mithilfe von Beispielen können Sie sich mit verschiedenen APIs vertraut machen.

Generieren einer Chatbotantwort

In diesem Beispiel wird mithilfe von DefaultAzureCredential authentifiziert und dann Chatantworten auf Eingabechatfragen und -nachrichten generiert.

const { OpenAIClient } = require("@azure/openai");
const { DefaultAzureCredential } = require("@azure/identity");

async function main(){
  const endpoint = "https://myaccount.openai.azure.com/";
  const client = new OpenAIClient(endpoint, new DefaultAzureCredential());

  const deploymentId = "gpt-35-turbo";

  const messages = [
    { role: "system", content: "You are a helpful assistant. You will talk like a pirate." },
    { role: "user", content: "Can you help me?" },
    { role: "assistant", content: "Arrrr! Of course, me hearty! What can I do for ye?" },
    { role: "user", content: "What's the best way to train a parrot?" },
  ];

  console.log(`Messages: ${messages.map((m) => m.content).join("\n")}`);

  const events = await client.streamChatCompletions(deploymentId, messages, { maxTokens: 128 });
  for await (const event of events) {
    for (const choice of event.choices) {
      const delta = choice.delta?.content;
      if (delta !== undefined) {
        console.log(`Chatbot: ${delta}`);
      }
    }
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Generieren mehrerer Vervollständigungen mit Abonnementschlüssel

In diesem Beispiel werden Mithilfe eines Azure-Abonnementschlüssels Textantworten auf Eingabeeingabeaufforderungen generiert.

const { OpenAIClient, AzureKeyCredential } = require("@azure/openai");

async function main(){
  // Replace with your Azure OpenAI key
  const key = "YOUR_AZURE_OPENAI_KEY";
  const endpoint = "https://myaccount.openai.azure.com/";
  const client = new OpenAIClient(endpoint, new AzureKeyCredential(key));

  const examplePrompts = [
    "How are you today?",
    "What is Azure OpenAI?",
    "Why do children love dinosaurs?",
    "Generate a proof of Euler's identity",
    "Describe in single words only the good things that come into your mind about your mother.",
  ];

  const deploymentName = "text-davinci-003";

  let promptIndex = 0;
  const { choices } = await client.getCompletions(deploymentName, examplePrompts);
  for (const choice of choices) {
    const completion = choice.text;
    console.log(`Input: ${examplePrompts[promptIndex++]}`);
    console.log(`Chatbot: ${completion}`);
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Zusammenfassen von Text mit Vervollständigung

In diesem Beispiel wird eine Zusammenfassung der angegebenen Eingabeeingabeaufforderung generiert.

const { OpenAIClient } = require("@azure/openai");
const { DefaultAzureCredential } = require("@azure/identity")

async function main(){
  const endpoint = "https://myaccount.openai.azure.com/";
  const client = new OpenAIClient(endpoint, new DefaultAzureCredential());

  const textToSummarize = `
    Two independent experiments reported their results this morning at CERN, Europe's high-energy physics laboratory near Geneva in Switzerland. Both show convincing evidence of a new boson particle weighing around 125 gigaelectronvolts, which so far fits predictions of the Higgs previously made by theoretical physicists.

    ""As a layman I would say: 'I think we have it'. Would you agree?"" Rolf-Dieter Heuer, CERN's director-general, asked the packed auditorium. The physicists assembled there burst into applause.
  :`;

  const summarizationPrompt = [`
    Summarize the following text.

    Text:
    """"""
    ${textToSummarize}
    """"""

    Summary:
  `];

  console.log(`Input: ${summarizationPrompt}`);

  const deploymentName = "text-davinci-003";

  const { choices } = await client.getCompletions(deploymentName, summarizationPrompt, {
    maxTokens: 64
  });
  const completion = choices[0].text;
  console.log(`Summarization: ${completion}`);
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Verwenden von Chattools

Tools erweitern Chat-Vervollständigungen, indem sie einem Assistent erlauben, definierte Funktionen und andere Funktionen beim Erfüllen einer Chatabschlussanforderung aufzurufen. Um Chattools zu verwenden, definieren Sie zunächst ein Funktionstool:

const getCurrentWeather = {
    name: "get_current_weather",
    description: "Get the current weather in a given location",
    parameters: {
      type: "object",
      properties: {
        location: {
          type: "string",
          description: "The city and state, e.g. San Francisco, CA",
        },
        unit: {
          type: "string",
          enum: ["celsius", "fahrenheit"],
        },
      },
      required: ["location"],
    },
  };

Wenn das Tool definiert ist, fügen Sie diese neue Definition in die Optionen für eine Chatabschlussanforderung ein:

const deploymentName = "gpt-35-turbo-1106";
const messages = [{ role: "user", content: "What is the weather like in Boston?" }];
const options = {
    tools: [
      {
        type: "function",
        function: getCurrentWeather,
      },
    ],
  };
const events = client.getChatCompletions(deploymentId, messages, options);

Wenn der Assistent entscheidet, dass ein oder mehrere Tools verwendet werden sollen, enthält die Antwortnachricht einen oder mehrere "Toolaufrufe", die alle über "Toolnachrichten" in der nachfolgenden Anforderung aufgelöst werden müssen. Diese Auflösung von Toolaufrufen in neue Anforderungsnachrichten kann als eine Art "Rückruf" für Chat-Vervollständigungen betrachtet werden.

// Purely for convenience and clarity, this function handles tool call responses.
function applyToolCall({ function: call, id }) {
    if (call.name === "get_current_weather") {
      const { location, unit } = JSON.parse(call.arguments);
      // In a real application, this would be a call to a weather API with location and unit parameters
      return {
        role: "tool",
        content: `The weather in ${location} is 72 degrees ${unit} and sunny.`,
        toolCallId: id,
      }
    }
    throw new Error(`Unknown tool call: ${call.name}`);
}

Um Toolaufrufauflösungen für den Assistent bereitzustellen, damit die Anforderung fortgesetzt werden kann, geben Sie den gesamten vorherigen verlaufsbezogenen Kontext an , einschließlich der ursprünglichen System- und Benutzernachrichten, der Antwort der Assistent, die die Toolaufrufe enthielt, und die Toolnachrichten, die jedes dieser Tools aufgelöst haben, bei einer nachfolgenden Anforderung an.

const choice = result.choices[0];
const responseMessage = choice.message;
if (responseMessage?.role === "assistant") {
  const requestedToolCalls = responseMessage?.toolCalls;
  if (requestedToolCalls?.length) {
    const toolCallResolutionMessages = [
      ...messages,
      responseMessage,
      ...requestedToolCalls.map(applyToolCall),
    ];
    const result = await client.getChatCompletions(deploymentName, toolCallResolutionMessages);
    // continue handling the response as normal
  }
}

Generieren von Bildern mit DALL-E Bildgenerierungsmodellen

In diesem Beispiel werden Batchbilder aus einer bestimmten Eingabeeingabeaufforderung generiert.

const { OpenAIClient, AzureKeyCredential } = require("@azure/openai");

async function main() {
  const endpoint = "https://myaccount.openai.azure.com/";
  const client = new OpenAIClient(endpoint, new AzureKeyCredential(azureApiKey));

  const deploymentName = "dalle-3";
  const prompt = "a monkey eating a banana";
  const size = "1024x1024";
  const n = 1;
  
  const results = await client.getImages(deploymentName, prompt, { n, size });

  for (const image of results.data) {
    console.log(`Image generation result URL: ${image.url}`);
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Analysieren von Geschäftsdaten

In diesem Beispiel werden Chatantworten auf Eingabechatfragen zu Ihren Geschäftsdaten generiert. Die Geschäftsdaten werden über einen Azure Cognitive Search Index bereitgestellt. Weitere Informationen zum Einrichten eines Azure Cognitive Search Indexes als Datenquelle finden Sie unter Schnellstart: Chatten mit Azure OpenAI-Modellen mithilfe Ihrer eigenen Daten.

const { OpenAIClient } = require("@azure/openai");
const { DefaultAzureCredential } = require("@azure/identity");

async function main(){
  const endpoint = "https://myaccount.openai.azure.com/";
  const client = new OpenAIClient(endpoint, new DefaultAzureCredential());

  const deploymentId = "gpt-35-turbo";

  const messages = [
    { role: "user", content: "What's the most common customer feedback about our product?" },
  ];

  console.log(`Messages: ${messages.map((m) => m.content).join("\n")}`);

  const events = await client.streamChatCompletions(deploymentId, messages, { 
    maxTokens: 128,
    azureExtensionOptions: {
      extensions: [
        {
          type: "AzureCognitiveSearch",
          endpoint: "<Azure Cognitive Search endpoint>",
          key: "<Azure Cognitive Search admin key>",
          indexName: "<Azure Cognitive Search index name>",
        },
      ],
    },
  });
  for await (const event of events) {
    for (const choice of event.choices) {
      const delta = choice.delta?.content;
      if (delta !== undefined) {
        console.log(`Chatbot: ${delta}`);
      }
    }
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Transkription und Übersetzung von Audiodateien

Die Spracherkennungs- und Übersetzungsfunktionen von Azure OpenAI können zum Transkribieren und Übersetzen einer Vielzahl von Audiodateiformaten verwendet werden. Das folgende Beispiel zeigt, wie Sie die getAudioTranscription -Methode verwenden, um Audiodaten in die Sprache zu transkribieren, in der sich das Audio befindet. Sie können die Audiodaten auch mit der -Methode übersetzen und ins getAudioTranslation Englische transkribieren.

Die Audiodatei kann mithilfe der NodeJS-Dateisystem-APIs in den Arbeitsspeicher geladen werden. Im Browser kann die Datei mithilfe der FileReader API geladen werden, und die Ausgabe von arrayBuffer instance Methode kann an die getAudioTranscription -Methode übergeben werden.

const { OpenAIClient, AzureKeyCredential } = require("@azure/openai");
const fs = require("fs/promises");

async function main() {
  console.log("== Transcribe Audio Sample ==");

  const client = new OpenAIClient(endpoint, new AzureKeyCredential(azureApiKey));
  const deploymentName = "whisper";
  const audio = await fs.readFile("< path to an audio file >");
  const result = await client.getAudioTranscription(deploymentName, audio);

  console.log(`Transcription: ${result.text}`);
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Chatten mit Bildern mithilfe von gpt-4-vision-preview

Das gpt-4-vision-preview Modell ermöglicht es Ihnen, Bilder als Eingabekomponenten für Chat-Vervollständigungen zu verwenden.

Stellen Sie dazu unterschiedliche Inhaltselemente in den Benutzernachrichten für die Anforderung zum Abschließen des Chats bereit:

const url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
const deploymentName = "gpt-4-1106-preview";
const messages: ChatRequestMessage[] = [{role: "user", content: [{
  type: "image_url",
  imageUrl: {
    url,
    detail: "auto"
  }
}]}];

Chat-Vervollständigungen werden dann wie gewohnt fortgesetzt, obwohl das Modell anstelle von finish_reasondas informativere finish_details melden kann:

const result = await client.getChatCompletions(deploymentName, messages);
console.log(`Chatbot: ${result.choices[0].message?.content}`);

Problembehandlung

Protokollierung

Die Aktivierung der Protokollierung kann hilfreiche Informationen über Fehler aufdecken. Um ein Protokoll von HTTP-Anforderungen und -Antworten anzuzeigen, legen Sie die Umgebungsvariable AZURE_LOG_LEVEL auf info fest. Alternativ kann die Protokollierung zur Laufzeit aktiviert werden, indem Sie setLogLevel in @azure/logger aufrufen:

const { setLogLevel } = require("@azure/logger");

setLogLevel("info");

Ausführlichere Anweisungen zum Aktivieren von Protokollen finden Sie in der Paketdokumentation zu @azure/logger.