Sdílet prostřednictvím


Klientská knihovna Azure OpenAI pro JavaScript – verze 1.0.0-beta.12

Klientská knihovna Azure OpenAI pro JavaScript je adaptací rozhraní REST API openAI, která poskytují idiomatické rozhraní a bohatou integraci se zbytkem ekosystému sady Azure SDK. Může se připojit k prostředkům Azure OpenAI nebo ke koncovému bodu odvozování OpenAI mimo Azure, což je skvělá volba i pro vývoj mimo Azure OpenAI.

Pomocí klientské knihovny pro Azure OpenAI můžete:

Azure OpenAI je spravovaná služba, která vývojářům umožňuje nasazovat, ladit a generovat obsah z modelů OpenAI v prostředcích Azure.

Podívejte se na následující příklady:

Klíčové odkazy:

Začínáme

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

Aktuálně podporovaná prostředí

  • LtS verze Node.js
  • Nejnovější verze prohlížečů Safari, Chrome, Edge a Firefox.

Požadavky

Pokud chcete použít prostředek Azure OpenAI, musíte mít předplatné Azure a přístup k Azure OpenAI. To vám umožní vytvořit prostředek Azure OpenAI a získat adresu URL připojení i klíče rozhraní API. Další informace najdete v tématu Rychlý start: Začínáme s generováním textu pomocí služby Azure OpenAI.

Pokud chcete použít klientskou knihovnu Azure OpenAI JS pro připojení k rozhraní OpenAI mimo Azure, budete potřebovat klíč rozhraní API z vývojářského účtu na adrese https://platform.openai.com/.

Nainstalujte balíček @azure/openai.

Nainstalujte klientskou knihovnu Azure OpenAI pro JavaScript pomocí npmpříkazu :

npm install @azure/openai

Vytvoření a ověření OpenAIClient

Pokud chcete nakonfigurovat klienta pro použití s Azure OpenAI, poskytněte prostředku Azure OpenAI platný identifikátor URI koncového bodu spolu s odpovídajícími přihlašovacími údaji klíče, přihlašovacími údaji tokenu nebo přihlašovacími údaji identity Azure, které mají oprávnění k používání prostředku Azure OpenAI. Pokud chcete místo toho nakonfigurovat klienta pro připojení ke službě OpenAI, zadejte klíč rozhraní API z portálu pro vývojáře OpenAI.

Použití klíče rozhraní API z Azure

Pomocí webu Azure Portal přejděte k prostředku OpenAI a načtěte klíč rozhraní API, nebo použijte následující fragment kódu Azure CLI :

Poznámka: Někdy se klíč rozhraní API označuje jako klíč předplatného nebo klíč rozhraní API předplatného.

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

Jakmile budete mít klíč rozhraní API a koncový bod, můžete pomocí AzureKeyCredential třídy ověřit klienta následujícím způsobem:

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

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

Použití přihlašovacích údajů Azure Active Directory

Ve většině příkladů se používá ověřování pomocí klíče rozhraní API klienta, ale ověření můžete provést také v Azure Active Directory pomocí knihovny Azure Identity. Pokud chcete použít zprostředkovatele DefaultAzureCredential uvedeného níže nebo jiného zprostředkovatele přihlašovacích údajů poskytnutého se sadou Azure SDK, nainstalujte @azure/identity balíček :

npm install @azure/identity

Budete také muset zaregistrovat novou aplikaci AAD a udělit přístup k OpenAI přiřazením "Cognitive Services User" role k instančnímu objektu (poznámka: Jiné role jako "Owner" neudělují potřebná oprávnění, "Cognitive Services User" stačí spustit příklady a vzorový kód).

Nastavte hodnoty ID klienta, ID tenanta a tajného klíče klienta aplikace AAD jako proměnné prostředí: 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());

Použití klíče rozhraní API z OpenAI

Pokud chcete místo toho nakonfigurovat klienta pro připojení ke službě OpenAI, zadejte klíč rozhraní API z portálu pro vývojáře OpenAI. Jakmile budete mít klíč rozhraní API, můžete pomocí OpenAIKeyCredential třídy ověřit klienta následujícím způsobem:

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

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

Klíčové koncepty

Hlavním konceptem, kterému je třeba porozumět , je dokončení. Stručně řečeno, dokončování poskytuje své funkce ve formě textové výzvy, která se pak pomocí konkrétního modelu pokusí shodovat kontext a vzory a poskytnout výstupní text. Následující fragment kódu poskytuje hrubý přehled:

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

Příklady

Pomocí ukázek se můžete seznámit s různými rozhraními API.

Vygenerovat odpověď chatovacího robota

Tento příklad provede ověření pomocí DefaultAzureCredential a pak vygeneruje odpovědi chatu na vstupní otázky a zprávy chatu.

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

Generování více dokončení pomocí klíče předplatného

Tento příklad generuje textové odpovědi na výzvy k zadání pomocí klíče předplatného Azure.

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

Shrnutí textu s dokončením

Tento příklad vygeneruje souhrn daného vstupního dotazu.

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

Použití nástrojů chatu

Nástroje rozšiřují dokončování chatu tím, že asistent umožňují vyvolat definované funkce a další možnosti v procesu plnění žádosti o dokončení chatu. Pokud chcete používat nástroje chatu, začněte definováním funkčního nástroje:

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

S definovaným nástrojem zahrňte novou definici do možností pro žádost o dokončení chatu:

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

Když asistent rozhodne, že by se měl použít jeden nebo více nástrojů, zpráva odpovědi obsahuje jedno nebo více "volání nástrojů", která musí být všechna vyřešena prostřednictvím "zpráv nástroje" v následné žádosti. Toto řešení volání nástrojů do zpráv s novými požadavky lze považovat za druh zpětného volání pro dokončení chatu.

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

Pokud chcete asistent poskytnout řešení volání nástrojů, aby požadavek mohl pokračovat, uveďte při vytváření následného požadavku veškerý předchozí historický kontext – včetně původních systémových a uživatelských zpráv, odpovědí z asistent, která obsahovala volání nástroje, a zpráv nástroje, které tyto nástroje vyřešily.

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

Generování obrázků pomocí modelů DALL-E generování obrázků

Tento příklad vygeneruje dávkové obrázky z dané vstupní výzvy.

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

Analýza obchodních dat

Tento příklad generuje odpovědi chatu na vstupní otázky chatu týkající se vašich obchodních dat. Obchodní data se poskytují prostřednictvím indexu Azure Cognitive Search. Další informace o nastavení indexu Azure Cognitive Search jako zdroje dat najdete v tématu Rychlý start: Chat s modely Azure OpenAI s využitím vlastních dat.

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

Přepis a překlad zvukových souborů

Funkce převodu řeči na text a překlad v Azure OpenAI se dají použít k přepisu a překladu široké škály formátů zvukových souborů. Následující příklad ukazuje, jak použít metodu getAudioTranscription k přepisu zvuku do jazyka, ve který se zvuk nachází. Zvuk můžete také přeložit a přepsat do angličtiny pomocí getAudioTranslation metody .

Zvukový soubor je možné načíst do paměti pomocí rozhraní API systému souborů NodeJS. V prohlížeči je možné soubor načíst pomocí FileReader rozhraní API a výstup arrayBuffer metody instance lze předat getAudioTranscription metodě .

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

Chatování s obrázky pomocí gpt-4-vision-preview

Model gpt-4-vision-preview umožňuje používat obrázky jako vstupní komponenty pro dokončování chatu.

Uděláte to tak, že pro žádost o dokončení chatu zadáte do zpráv uživatelů jedinečné položky obsahu:

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

Dokončení chatu pak bude pokračovat obvyklým způsobem, i když model může hlásit více informací finish_details místo :finish_reason

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

Poradce při potížích

protokolování

Povolení protokolování může pomoct odhalit užitečné informace o selháních. Pokud chcete zobrazit protokol požadavků a odpovědí HTTP, nastavte proměnnou AZURE_LOG_LEVEL prostředí na info. Případně je možné protokolování povolit za běhu voláním setLogLevel v :@azure/logger

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

setLogLevel("info");

Podrobnější pokyny k povolení protokolů najdete v dokumentaci k balíčkům @azure/protokolovacího nástroje.