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:
- Vytvoření chatu pomocí ChatGPT
- Vytvoření vektorového vkládání textu
- Použití vlastních dat s Azure OpenAI
- Generování imagí
- Přepis a překlad zvukových souborů
- Vytvoření starší verze dokončování textu
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:
- Více dokončení
- Chatbot
- Shrnutí textu
- Použití nástrojů chatu
- Generování imagí
- Analýza obchodních dat
- Přepis a překlad zvukových souborů
- Chatování s obrázky pomocí gpt-4-vision-preview
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í npm
pří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.
Azure SDK for JavaScript
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro