По состоянию на июнь 2024 г. мы рекомендуем перенести библиотеку API OpenAI JavaScript версии 4.x, последнюю версию официальной клиентской библиотеки OpenAI JavaScript, которая поддерживает версию API Службы OpenAI и более поздних версий 2022-12-01 . Эта статья поможет вам ускорить изменения, относящиеся к Azure OpenAI.
Проверка подлинности клиента
Существует несколько способов проверки подлинности запросов API в Azure OpenAI. Настоятельно рекомендуется использовать маркеры идентификатора Microsoft Entra. Дополнительные сведения см. в документации по удостоверению Azure.
Microsoft Entra ID
Существует несколько способов проверки подлинности в службе Azure OpenAI с помощью маркеров идентификатора Microsoft Entra. По умолчанию используется DefaultAzureCredential класс из @azure/identity пакета, но приложение может использовать другой класс учетных данных. В целях этого руководства предполагается, что вы используете DefaultAzureCredential класс. Учетные данные можно создать следующим образом:
TypeScript
import { DefaultAzureCredential } from"@azure/identity";
const credential = new DefaultAzureCredential();
Затем этот объект передается второму аргументу OpenAIClient конструкторов и AssistantsClient клиентских конструкторов.
Однако для проверки подлинности AzureOpenAI клиента необходимо использовать getBearerTokenProvider функцию из @azure/identity пакета. Эта функция создает поставщик токенов, который AzureOpenAI используется внутренне для получения маркеров для каждого запроса. Поставщик токенов создается следующим образом:
azureADTokenProvider передается объекту options при создании AzureOpenAI клиента.
(очень не рекомендуется) Ключ API
Ключи API не рекомендуется использовать в рабочей среде, так как они менее безопасны, чем другие методы проверки подлинности. Ранее объекты были созданы следующим образом для AzureKeyCredential проверки подлинности OpenAIClient или AssistantsClient:
TypeScript
import { AzureKeyCredential } from"@azure/openai";
const apiKey = new AzureKeyCredential("your API key");
С другой стороны, можно пройти проверку подлинности с помощью ключа API, AzureOpenAI задав переменную среды или задав AZURE_OPENAI_API_KEYapiKey строковое свойство в объекте параметров при создании AzureOpenAI клиента.
Важно!
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.
Конечную точку ресурса Azure OpenAI можно указать, задав endpoint параметр, но его также можно загрузить клиентом из переменной AZURE_OPENAI_ENDPOINTсреды. Это рекомендуемый способ задать конечную точку, так как он позволяет клиенту использоваться в разных средах, не изменяя код, а также защищать конечную точку от предоставления в коде.
Необходимо указать версию API, чтобы убедиться, что существующий код не прерывается между версиями API предварительной версии. Дополнительные сведения о версиях API OpenAI см. в документации по использованию версий API Azure. Кроме того, свойство не требуется, deployment но рекомендуется задать его. После deployment установки он используется в качестве развертывания по умолчанию для всех операций, требующих его. Если клиент не создан с deployment параметром, model свойство в объекте options должно быть задано с именем развертывания. Однако для таких операций аудио, как audio.transcriptions.create требование создания клиента с заданным параметром deployment имени развертывания.
Если этот параметр не задан, версия API по умолчанию используется до выпуска клиента. Клиент также не заблокирован для развертывания одной модели, то есть имя развертывания должно передаваться каждому методу, который требует его.
Отличия между API
Существуют ключевые различия между клиентами OpenAIClient и AssistantsClient клиентами AzureOpenAI :
Операции представлены как плоский список методов в обоих OpenAIClient и AssistantsClient, например client.getChatCompletions. Например AzureOpenAI, client.chat.completions.createоперации группируются в вложенных группах.
OpenAIClient и AssistantsClient переименуйте многие имена, используемые в API службы Azure OpenAI. Например, в API используется случай змеи, но в клиенте используется случай верблюда. Имена AzureOpenAIхранятся так же, как и в API службы Azure OpenAI.
Примеры миграции
В следующих разделах приведены примеры миграции из и AssistantsClient в OpenAIClientAzureOpenAI.
const result = await client.getChatCompletions(deploymentName, messages, { maxTokens: 100 });
Обратите внимание на следующее:
Метод getChatCompletions был заменен методом chat.completions.create .
Теперь messages параметр передается в объекте options с свойством messages .
maxTokens Свойство было переименовано max_tokens в и deploymentName параметр был удален. Как правило, имена свойств в options объекте совпадают с API службы Azure OpenAI, следуя соглашению о случае змеи, а не соглашению о регистре верблюда, используемом в соглашении AssistantsClient. Это верно для всех свойств во всех запросах и ответах клиента AzureOpenAI .
Параметр deploymentName не требуется, если клиент был создан с параметром deployment . Если клиент не был создан с deployment параметром, model свойство в объекте параметра должно быть задано с именем развертывания.
Метод getAudioTranscription был заменен методом audio.transcriptions.create .
Необходимо AzureOpenAI создать с deployment помощью параметра, заданного для имени развертывания, чтобы использовать такие звуковые операции, как audio.transcriptions.create.
Свойство model должно быть задано в объекте параметров, но его значение не используется в операции, поэтому вы можете настроить его в любом значении.
Свойство file принимает различные типы, включая Buffer, fs.ReadaStreamи Blob в этом примере файл передается из диска с помощью fs.createReadStream.
const options = {
model: azureOpenAIDeployment,
name: "Math Tutor",
instructions:
"You are a personal math tutor. Write and run JavaScript code to answer math questions.",
tools: [{ type: "code_interpreter" }],
};
const assistantResponse = await assistantsClient.createAssistant(options);
Метод createAssistant был заменен методом beta.assistants.create
Создание потока
В следующем примере показано, как перенести createThread вызов метода.
Метод createMessage был заменен методом beta.threads.messages.create .
Спецификация сообщения была перемещена из списка параметров в объект.
Запуски
Для запуска помощника в потоке createRun метод используется для создания запуска, а затем цикл используется для опроса состояния выполнения до тех пор, пока он не находится в состоянии терминала. В следующем примере показано, как перенести создание и опрос запуска.
Этот код можно перенести и упростить с помощью createAndPoll метода, который создает запуск и опрашивает его до тех пор, пока он не находится в состоянии терминала.
Страницы можно прокрутить с помощью for await цикла.
TypeScript
forawait (const runMessageDatum of runMessages) {
for (const item of runMessageDatum.content) {
...
}
}
Без разбиения на страницу результаты должны быть доступны вручную с помощью data свойства объекта ответа. Например, доступ к первой странице можно сделать следующим образом:
TypeScript
for (const runMessageDatum of runMessages.data) {
for (const item of runMessageDatum.content) {
...
}
}
Внедрение
В следующем примере показано, как перенести getEmbeddings вызов метода.
Метод getEmbeddings был заменен методом embeddings.create .
Теперь input параметр передается в объекте options с свойством input .
Параметр deploymentName удален. Параметр deploymentName не требуется, если клиент был создан с параметром deployment . Если клиент не был создан с deployment параметром, model свойство в объекте параметра должно быть задано с именем развертывания.
Генерирование изображений
В следующем примере показано, как перенести getImages вызов метода.
const results = await client.getImages(deploymentName, prompt, { n, size });
Метод getImages был заменен методом images.generate .
Теперь prompt параметр передается в объекте options с свойством prompt .
Параметр deploymentName удален. Параметр deploymentName не требуется, если клиент был создан с параметром deployment . Если клиент не был создан с deployment параметром, model свойство в объекте параметра должно быть задано с именем развертывания.
Фильтр содержимого
Результаты фильтра содержимого являются частью типов ответов завершения чата.OpenAIClientAzureOpenAI Однако не имеет прямого эквивалента contentFilterResults свойству в интерфейсеChatCompletion.Choice. Результаты фильтра содержимого можно получить, импортируя "@azure/openai/types" и доступ к свойству content_filter_results . В следующем примере показано, как получить доступ к результатам фильтра содержимого.
import"@azure/openai/types";
const result = await client.chat.completions.create({ model: '', messages });
for (const choice of results.choices) {
const filterResults = choice.content_filter_results;
if (!filterResults) {
console.log("No content filter is found");
return;
}
if (filterResults.error) {
console.log(
`Content filter ran into the error ${filterResults.error.code}: ${filterResults.error.message}`);
}
const { hate, sexual, self_harm, violence } = filterResults;
...
}
TypeScript
const results = await client.getChatCompletions(deploymentName, messages);
for (const choice of results.choices) {
if (!choice.contentFilterResults) {
console.log("No content filter is found");
return;
}
if (choice.contentFilterResults.error) {
console.log(
`Content filter ran into the error ${choice.contentFilterResults.error.code}: ${choice.contentFilterResults.error.message}`);
}
const { hate, sexual, selfHarm, violence } = choice.contentFilterResults;
...
}
Свойства дела верблюда были заменены свойствами регистра змеи.
"@azure/openai/types" импортируется, который добавляет определения azure (например, content_filter_results) в типы клиентов, см . в разделе типов Azure для получения дополнительных сведений.
Сравнение типов
В следующей таблице рассматриваются несколько имен типов из @azure/openai и отображаются их ближайшие openai эквиваленты. Различия имен иллюстрируют несколько указанных выше изменений. Эта таблица содержит общие сведения, а также дополнительные сведения и примеры кода приведены в следующих разделах.
Старое имя типа
Ближайший новый тип
Тип символа
Описание изменения
OpenAIClient
AzureOpenAI
Класс
Этот класс заменяет бывший и не имеет общих методов. См. раздел о AzureOpenAI ниже.
AudioResult
Transcription/Transcription
Интерфейс
В зависимости от операции вызова два интерфейса заменяют ранее
AudioResultFormat
встроенный response_format тип объединения свойства
Псевдоним
Он не существует
AudioResultSimpleJson
Transcription/Transcription
Интерфейс
В зависимости от операции вызова два интерфейса заменяют ранее
Ключ API можно указать в виде строкового значения.
ChatChoice
ChatCompletion.Choice
Интерфейс
ChatChoiceLogProbabilityInfo
Logprobs
Интерфейс
ChatCompletions
ChatCompletion и ChatCompletionChunk.
Интерфейс
ChatCompletionsFunctionToolCall
ChatCompletionMessageToolCall
Интерфейс
ChatRequestFunctionMessage
ChatCompletionFunctionMessageParam
Интерфейс
ChatRequestMessage
ChatCompletionMessageParam
Интерфейс
ChatRequestMessageUnion
ChatCompletionMessageParam
ChatRequestSystemMessage
ChatCompletionSystemMessageParam
Интерфейс
ChatRequestToolMessage
ChatCompletionToolMessageParam
Интерфейс
ChatRequestUserMessage
ChatCompletionUserMessageParam
Интерфейс
ChatResponseMessage
Delta / ChatCompletionMessage
Интерфейс
ChatRole
Н/П
Псевдоним
ChatTokenLogProbabilityInfo
TopLogprob
Интерфейс
ChatTokenLogProbabilityResult
ChatCompletionTokenLogprob
Интерфейс
Choice
Choice
Интерфейс
Completions
Completion
Интерфейс
CompletionsFinishReason
Н/П
Псевдоним
CompletionsLogProbabilityModel
Logprobs
Интерфейс
CompletionsUsage
CompletionUsage
Интерфейс
EmbeddingItem
Embedding
Интерфейс
Embeddings
CreateEmbeddingResponse
Интерфейс
EmbeddingsUsage
CreateEmbeddingResponse.Usage
Интерфейс
EventStream
Stream
Интерфейс
FunctionCall
FunctionCall
Интерфейс
FunctionCallPreset
Н/П
Псевдоним
FunctionDefinition
Function
Интерфейс
FunctionName
Н/П
Псевдоним
GetAudioTranscriptionOptions
TranscriptionCreateParams
Интерфейс
GetAudioTranslationOptions
TranslationCreateParams
Интерфейс
GetChatCompletionsOptions
ChatCompletionCreateParamsNonStreaming и ChatCompletionCreateParamsStreaming.
Интерфейс
GetCompletionsOptions
CompletionCreateParams
Интерфейс
GetEmbeddingsOptions
EmbeddingCreateParams
Интерфейс
GetImagesOptions
ImageGenerateParams
Интерфейс
ImageGenerationData
Image
Интерфейс
ImageGenerationQuality
Н/П
Псевдоним
ImageGenerationResponseFormat
Н/П
Псевдоним
ImageGenerations
ImagesResponse
Интерфейс
ImageGenerationStyle
Н/П
Псевдоним
ImageSize
Н/П
Псевдоним
MaxTokensFinishDetails
Н/П
Интерфейс
OpenAIClientOptions
AzureClientOptions
Интерфейс
OpenAIError
OpenAIError
Интерфейс
OpenAIKeyCredential
Н/П
Класс
StopFinishDetails
Н/П
Интерфейс
Типы Azure
AzureOpenAI подключается к службе Azure OpenAI и может вызывать все операции, доступные в службе. Однако типы запросов и ответов наследуются от OpenAI и еще не обновляются, чтобы отразить дополнительные функции, поддерживаемые исключительно службой Azure OpenAI. Пользователям TypeScript потребуется импортировать данные "@azure/openai/types" , из @azure/openai@2.0.0-beta.1 которых будут объединяться определения, относящиеся к Azure, в существующие типы. Примеры в разделе "Примеры миграции " показывают, как это сделать.
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
Продемонстрировать основные понятия ИИ, связанные с разработкой программного обеспечения и служб Microsoft Azure для создания решений искусственного интеллекта.