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:
- Erstellen eines Chatabschlusses mit ChatGPT
- Erstellen einer Vektoreinbettung für Text
- Verwenden Ihrer eigenen Daten mit Azure OpenAI
- Generieren von Bildern
- Transkription und Übersetzen von Audiodateien
- Erstellen einer Legacy-Vervollständigung für Text
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:
- Mehrere Vervollständigungen
- Chatbot
- Zusammenfassen von Text
- Verwenden von Chattools
- Generieren von Bildern
- Analysieren von Geschäftsdaten
- Transkription und Übersetzen von Audiodateien
- Chatten mit Bildern mithilfe von gpt-4-vision-preview
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
- LTS-Versionen von Node.js
- Neueste Versionen von Safari, Chrome, Edge und Firefox.
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_reason
das 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.
Azure SDK for JavaScript