Dela via


Azure OpenAI-klientbibliotek för JavaScript – version 1.0.0-beta.12

Azure OpenAI-klientbiblioteket för JavaScript är en anpassning av OpenAI:s REST-API:er som tillhandahåller ett idiomatiskt gränssnitt och omfattande integrering med resten av Azure SDK-ekosystemet. Den kan ansluta till Azure OpenAI-resurser eller till slutpunkten för icke-Azure OpenAI-slutsatsdragning, vilket gör den till ett bra val för även icke-Azure OpenAI-utveckling.

Använd klientbiblioteket för Azure OpenAI för att:

Azure OpenAI är en hanterad tjänst som gör att utvecklare kan distribuera, finjustera och generera innehåll från OpenAI-modeller på Azure-resurser.

Kolla in följande exempel:

Nyckellänkar:

Komma igång

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

Miljöer som stöds för närvarande

Förutsättningar

Om du vill använda en Azure OpenAI-resurs måste du ha en Azure-prenumeration och Azure OpenAI-åtkomst. På så sätt kan du skapa en Azure OpenAI-resurs och hämta både en anslutnings-URL och API-nycklar. Mer information finns i Snabbstart: Kom igång med att generera text med Azure OpenAI-tjänsten.

Om du vill använda Azure OpenAI JS-klientbiblioteket för att ansluta till icke-Azure OpenAI behöver du en API-nyckel från ett utvecklarkonto på https://platform.openai.com/.

Installera @azure/openai-paketet

Installera Azure OpenAI-klientbiblioteket för JavaScript med npm:

npm install @azure/openai

Skapa och autentisera en OpenAIClient

Om du vill konfigurera en klient för användning med Azure OpenAI anger du en giltig slutpunkts-URI till en Azure OpenAI-resurs tillsammans med motsvarande nyckelautentiseringsuppgifter, tokenautentiseringsuppgifter eller Azure-identitetsautentiseringsuppgifter som har behörighet att använda Azure OpenAI-resursen. Om du i stället vill konfigurera klienten för att ansluta till OpenAI:s tjänst anger du en API-nyckel från OpenAI:s utvecklarportal.

Använda en API-nyckel från Azure

Använd Azure-portalen för att bläddra till din OpenAI-resurs och hämta en API-nyckel, eller använd Azure CLI-kodfragmentet nedan:

Observera: Ibland kallas API-nyckeln för en "prenumerationsnyckel" eller "prenumerations-API-nyckel".

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

När du har en API-nyckel och slutpunkt kan du använda klassen för att autentisera AzureKeyCredential klienten på följande sätt:

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

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

Använda en Azure Active Directory-autentiseringsuppgift

Nyckelautentisering med klient-API används i de flesta av exemplen, men du kan också autentisera med Azure Active Directory med hjälp av Azure Identity-biblioteket. Om du vill använda DefaultAzureCredential-providern som visas nedan eller andra autentiseringsproviders som medföljer Azure SDK installerar @azure/identity du paketet:

npm install @azure/identity

Du måste också registrera ett nytt AAD-program och bevilja åtkomst till OpenAI genom att tilldela "Cognitive Services User" rollen till tjänstens huvudnamn (obs! Andra roller som "Owner" inte beviljar nödvändiga behörigheter räcker bara "Cognitive Services User" för att köra exemplen och exempelkoden).

Ange värdena för klient-ID, klient-ID och klienthemlighet för AAD-programmet som miljövariabler: 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());

Använda en API-nyckel från OpenAI

Om du i stället vill konfigurera klienten för att ansluta till OpenAI:s tjänst anger du en API-nyckel från OpenAI:s utvecklarportal. När du har en API-nyckel kan du använda klassen för att autentisera OpenAIKeyCredential klienten på följande sätt:

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

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

Viktiga begrepp

Huvudkonceptet att förstå är Slutföranden. Kortfattat förklaras att slutföranden ger dess funktioner i form av en textprompt, som genom att använda en specifik modell sedan försöker matcha kontexten och mönstren, vilket ger en utdatatext. Följande kodfragment ger en ungefärlig översikt:

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);
});

Exempel

Du kan bekanta dig med olika API:er med hjälp av exempel.

Generera chattrobotsvar

Det här exemplet autentiserar med hjälp av en DefaultAzureCredential och genererar sedan chattsvar för att mata in chattfråga och meddelanden.

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);
});

Generera flera slutföranden med prenumerationsnyckel

Det här exemplet genererar textsvar på indataprompter med hjälp av en Azure-prenumerationsnyckel

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);
});

Sammanfatta text med slutförande

Det här exemplet genererar en sammanfattning av den angivna indataprompten.

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);
});

Använda chattverktyg

Verktyg utökar chattens slutföranden genom att låta en assistent anropa definierade funktioner och andra funktioner i processen för att uppfylla en begäran om att chatten har slutförts. Om du vill använda chattverktyg börjar du med att definiera ett funktionsverktyg:

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"],
    },
  };

När verktyget har definierats inkluderar du den nya definitionen i alternativen för en begäran om att chatten ska slutföras:

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);

När assistent beslutar att ett eller flera verktyg ska användas innehåller svarsmeddelandet ett eller flera "verktygsanrop" som alla måste lösas via "verktygsmeddelanden" i efterföljande begäran. Den här lösningen av verktygsanrop till nya begärandemeddelanden kan betraktas som ett slags "motringning" för chattavslut.

// 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}`);
}

Om du vill tillhandahålla lösningar för verktygsanrop till assistent för att tillåta att begäran fortsätter, anger du all tidigare historisk kontext – inklusive det ursprungliga systemet och användarmeddelanden, svaret från assistent som inkluderade verktygsanropen och verktygsmeddelandena som löste vart och ett av dessa verktyg – när du gjorde en efterföljande begäran.

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
  }
}

Generera bilder med DALL-E bildgenereringsmodeller

Det här exemplet genererar batchbilder från en given indataprompt.

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);
});

Analysera affärsdata

Det här exemplet genererar chattsvar för att ange chattfrågor om dina affärsdata. Affärsdata tillhandahålls via ett Azure Cognitive Search index. Mer information om hur du konfigurerar ett Azure Cognitive Search index som datakälla finns i Snabbstart: Chatta med Azure OpenAI-modeller med dina egna data.

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);
});

Transkribera och översätta ljudfiler

Funktionerna för tal till text och översättning i Azure OpenAI kan användas för att transkribera och översätta en mängd olika ljudfilsformat. I följande exempel visas hur du använder getAudioTranscription metoden för att transkribera ljud till det språk som ljudet finns i. Du kan också översätta och transkribera ljudet till engelska med hjälp av getAudioTranslation metoden .

Ljudfilen kan läsas in i minnet med hjälp av NodeJS-filsystemets API:er. I webbläsaren kan filen läsas in med hjälp av arrayBuffer API:et FileReader och utdata från instansmetoden kan skickas till getAudioTranscription metoden .

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);
});

Chatta med bilder med gpt-4-vision-preview

Med gpt-4-vision-preview modellen kan du använda bilder som indatakomponenter i chattens slutföranden.

Det gör du genom att ange distinkta innehållsobjekt i användarmeddelandena för begäran om att chatten har slutförts:

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"
  }
}]}];

Chattens slutföranden fortsätter sedan som vanligt, även om modellen kan rapportera den mer informativa finish_details i stället för finish_reason:

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

Felsökning

Loggning

Aktivering av loggning kan hjälpa dig att hitta användbar information om fel. Om du vill se en logg över HTTP-begäranden och svar anger du AZURE_LOG_LEVEL miljövariabeln till info. Loggning kan också aktiveras vid körning genom att anropa setLogLevel i @azure/logger:

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

setLogLevel("info");

Mer detaljerade anvisningar om hur du aktiverar loggar finns i dokumentationen om @azure-/loggningspaket.