JavaScript용 Azure OpenAI 클라이언트 라이브러리 - 버전 1.0.0-beta.12
JavaScript용 Azure OpenAI 클라이언트 라이브러리는 Idiomatic 인터페이스를 제공하고 나머지 Azure SDK 에코시스템과 풍부한 통합을 제공하는 OpenAI의 REST API를 적응한 것입니다. Azure OpenAI 리소스 또는 비 Azure OpenAI 유추 엔드포인트에 연결할 수 있으므로 비 Azure OpenAI 개발에도 적합합니다.
Azure OpenAI용 클라이언트 라이브러리를 사용하여 다음을 수행합니다.
- ChatGPT 사용하여 채팅 완료 만들기
- 텍스트에 대한 벡터 포함 만들기
- Azure OpenAI에서 사용자 고유의 데이터 사용
- 이미지 생성
- 오디오 파일 전사 및 번역
- 텍스트에 대한 레거시 완성 만들기
Azure OpenAI는 개발자가 Azure 리소스의 OpenAI 모델에서 콘텐츠를 배포, 조정 및 생성할 수 있는 관리형 서비스입니다.
다음 예제를 확인하세요.
주요 링크:
시작
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"]);
현재 지원되는 환경
- Node.js의 LTS 버전
- 최신 버전의 Safari, Chrome, Edge, Firefox.
사전 요구 사항
Azure OpenAI 리소스를 사용하려면 Azure 구독 및 Azure OpenAI 액세스 권한이 있어야 합니다. 이렇게 하면 Azure OpenAI 리소스를 만들고 연결 URL과 API 키를 모두 가져올 수 있습니다. 자세한 내용은 빠른 시작: Azure OpenAI Service를 사용하여 텍스트 생성 시작을 참조하세요.
Azure OpenAI JS 클라이언트 라이브러리를 사용하여 비 Azure OpenAI에 연결하려면 의 개발자 계정 https://platform.openai.com/에서 API 키가 필요합니다.
@azure/openai
패키지를 설치합니다.
를 사용하여 JavaScript용 Azure OpenAI 클라이언트 라이브러리를 npm
설치합니다.
npm install @azure/openai
OpenAIClient
만들기 및 인증
Azure OpenAI에서 사용할 클라이언트를 구성하려면 Azure OpenAI 리소스를 사용할 수 있는 권한이 부여된 해당 키 자격 증명, 토큰 자격 증명 또는 Azure ID 자격 증명과 함께 Azure OpenAI 리소스에 유효한 엔드포인트 URI를 제공합니다. 대신 OpenAI의 서비스에 연결하도록 클라이언트를 구성하려면 OpenAI의 개발자 포털에서 API 키를 제공합니다.
Azure에서 API 키 사용
Azure Portal을 사용하여 OpenAI 리소스로 이동하고 API 키를 검색하거나 아래 Azure CLI 코드 조각을 사용합니다.
참고: API 키를 "구독 키" 또는 "구독 API 키"라고도 합니다.
az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>
API 키와 엔드포인트가 있으면 클래스를 AzureKeyCredential
사용하여 다음과 같이 클라이언트를 인증할 수 있습니다.
const { OpenAIClient, AzureKeyCredential } = require("@azure/openai");
const client = new OpenAIClient("<endpoint>", new AzureKeyCredential("<API key>"));
Azure Active Directory 자격 증명 사용
클라이언트 API 키 인증은 대부분의 예제에서 사용되지만 Azure ID 라이브러리를 사용하여 Azure Active Directory로 인증할 수도 있습니다. 아래에 표시된 DefaultAzureCredential 공급자 또는 Azure SDK와 함께 제공되는 다른 자격 증명 공급자를 사용하려면 패키지를 설치 @azure/identity
하세요.
npm install @azure/identity
또한 새 AAD 애플리케이션을 등록 하고 서비스 주체에 역할을 할당하여 "Cognitive Services User"
OpenAI에 대한 액세스 권한을 부여해야 합니다(참고: 와 같은 "Owner"
다른 역할은 필요한 권한을 부여하지 않으며 예제 및 샘플 코드를 실행하는 데만 "Cognitive Services User"
충분합니다).
AAD 애플리케이션의 클라이언트 ID, 테넌트 ID 및 클라이언트 암호 값을 환경 변수로 설정합니다. 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());
OpenAI에서 API 키 사용
대신 OpenAI의 서비스에 연결하도록 클라이언트를 구성하려면 OpenAI의 개발자 포털에서 API 키를 제공합니다. API 키가 있으면 클래스를 OpenAIKeyCredential
사용하여 다음과 같이 클라이언트를 인증할 수 있습니다.
const { OpenAIClient, OpenAIKeyCredential } = require("@azure/openai");
const client = new OpenAIClient(new OpenAIKeyCredential("<API key>"));
주요 개념
이해해야 할 기본 개념은 완료입니다. 간단히 설명하면 완성은 특정 모델을 사용하여 컨텍스트 및 패턴과 일치하도록 시도하여 출력 텍스트를 제공하는 텍스트 프롬프트 형식의 기능을 제공합니다. 다음 코드 조각은 대략적인 개요를 제공합니다.
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);
});
예제
샘플을 사용하여 다양한 API를 숙지할 수 있습니다.
챗봇 응답 생성
이 예제에서는 DefaultAzureCredential을 사용하여 인증한 다음 입력 채팅 질문 및 메시지에 대한 채팅 응답을 생성합니다.
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);
});
구독 키를 사용하여 여러 완료 생성
이 예제에서는 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);
});
완료를 사용하여 텍스트 요약
이 예제에서는 지정된 입력 프롬프트의 요약을 생성합니다.
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);
});
채팅 도구 사용
도구는 도우미 채팅 완료 요청을 수행하는 과정에서 정의된 함수 및 기타 기능을 호출할 수 있도록 하여 채팅 완료를 확장합니다. 채팅 도구를 사용하려면 먼저 함수 도구를 정의합니다.
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"],
},
};
도구가 정의된 경우 채팅 완료 요청에 대한 옵션에 새 정의를 포함합니다.
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);
도우미 하나 이상의 도구를 사용해야 한다고 결정하면 응답 메시지에는 후속 요청에서 "도구 메시지"를 통해 모두 확인해야 하는 하나 이상의 "도구 호출"이 포함됩니다. 새 요청 메시지에 대한 도구 호출의 이 해결은 채팅 완료를 위한 일종의 "콜백"으로 간주될 수 있습니다.
// 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}`);
}
요청을 계속할 수 있도록 도우미 도구 호출 확인을 제공하려면 원래 시스템 및 사용자 메시지, 도구 호출을 포함하는 도우미 응답 및 각 도구를 해결한 도구 메시지를 포함하여 모든 이전 기록 컨텍스트를 제공합니다.
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
}
}
DALL-E 이미지 생성 모델을 사용하여 이미지 생성
이 예제에서는 지정된 입력 프롬프트에서 일괄 처리 이미지를 생성합니다.
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);
});
비즈니스 데이터 분석
이 예제에서는 비즈니스 데이터에 대한 입력 채팅 질문에 대한 채팅 응답을 생성합니다. 비즈니스 데이터는 Azure Cognitive Search 인덱스로 제공됩니다. Azure Cognitive Search 인덱스 를 데이터 원본으로 설정하는 방법에 대한 자세한 내용은 빠른 시작: 사용자 고유의 데이터를 사용하여 Azure OpenAI 모델과 채팅을 참조하세요.
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);
});
오디오 파일 전사 및 번역
Azure OpenAI의 음성 텍스트 변환 및 번역 기능을 사용하여 다양한 오디오 파일 형식을 전사하고 번역할 수 있습니다. 다음 예제에서는 메서드를 사용하여 오디오를 getAudioTranscription
오디오가 있는 언어로 전사하는 방법을 보여줍니다. 메서드를 사용하여 getAudioTranslation
오디오를 영어로 번역하고 전사할 수도 있습니다.
NodeJS 파일 시스템 API를 사용하여 오디오 파일을 메모리에 로드할 수 있습니다. 브라우저에서 API를 사용하여 FileReader
파일을 로드할 수 있으며 instance 메서드의 arrayBuffer
출력을 getAudioTranscription
메서드에 전달할 수 있습니다.
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);
});
gpt-4-vision-preview를 사용하여 이미지와 채팅
모델을 gpt-4-vision-preview
사용하면 이미지를 입력 구성 요소로 사용하여 채팅을 완료할 수 있습니다.
이렇게 하려면 채팅 완료 요청에 대한 사용자 메시지에 고유한 콘텐츠 항목을 제공합니다.
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"
}
}]}];
그러면 모델이 대신 더 많은 정보를 finish_details
finish_reason
보고할 수 있지만 채팅 완료는 평소와 같이 진행됩니다.
const result = await client.getChatCompletions(deploymentName, messages);
console.log(`Chatbot: ${result.choices[0].message?.content}`);
문제 해결
로깅
로깅을 사용하도록 설정하면 실패에 대한 유용한 정보를 파악하는 데 도움이 될 수 있습니다. HTTP 요청 및 응답 로그를 보려면 AZURE_LOG_LEVEL
환경 변수를 info
로 설정합니다. 또는 @azure/logger
에서 setLogLevel
을 호출하여 런타임에 로깅을 사용하도록 설정할 수 있습니다.
const { setLogLevel } = require("@azure/logger");
setLogLevel("info");
로그를 사용하는 방법에 대한 자세한 내용은 @azure/logger package docs를 참조하세요.
Azure SDK for JavaScript