404 в запросе GET функций Azure

Следующий файл абсолютно прав, я дважды проверил его. Имя соответствует веб-сайту Azure, там есть ключ API. Почему я вообще не получаю ответа при попытке использовать это в Postman в качестве GET?

//https://disney-clone-portfolio.azurewebsites.net/api/getaisuggestion?term=action

import {
  app,
  HttpRequest,
  HttpResponseInit,
  InvocationContext,
} from "@azure/functions";

import OpenAI from "openai";

const openAI = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

export async function getAISuggestion(
  request: HttpRequest,
  context: InvocationContext
): Promise<HttpResponseInit> {
  context.log(`Http function processed request for url "${request.url}"`);

  const term = request.query.get("term");

  const completion = await openAI.chat.completions.create({
    messages: [
      {
        role: "system",
        content: `You are a digital video assistant working for services such as Netflix, Disney Plus & Amazon Prime Video. Your job is to provide suggestions based on the videos the user specifies. Provide an quirky breakdown of what the user should watch next! It should only list the names of the films after the introduction. Keep the response short and sweet! Always list at least 3 films as suggestions. If the user mentions a genre, you should provide a suggestion based on that genre.`,
      },
      {
        role: "user",
        content: `I like: ${term}`,
      },
    ],
    model: "gpt-3.5-turbo-16k",
  });

  return {
    body: completion.choices[0].message.content || "No suggestions found",
  };
}

app.http("getAISuggestion", {
  methods: ["GET"],
  authLevel: "anonymous",
  handler: getAISuggestion,
});

Настроена ли функция как общедоступная? Как вы развернули эту функцию?

Clifford Cheefoon 26.03.2024 04:26

да! Смотрите здесь, это закомментированный URL prnt.sc/aV0UV7xJzhG7

Caio 26.03.2024 16:25
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
2
116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Вам необходимо выполнить функцию локально перед развертыванием в приложении-функции, чтобы убедиться, что функция не выдает никаких ошибок и работает должным образом.
  • Я изменил код для использования Azure OpenAI.
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
import OpenAI from "openai";

const apiVersion = '2024-02-15-preview';
const apiKey = process.env.OPENAI_API_KEY;

const openAI = new OpenAI({
  apiKey: apiKey,
  baseURL: process.env.OPENAI_BASE_URL,
  defaultQuery: { 'api-version': apiVersion },
  defaultHeaders: { 'api-key': apiKey },
});


export async function getAISuggestion(
    request: HttpRequest,
    context: InvocationContext
    ): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    const term = request.query.get("term");

    const completion = await openAI.chat.completions.create({
    messages: [
      {
        role: 'user',
        content: `You are a digital video assistant working for services such as Netflix, Disney Plus & Amazon Prime Video. Your job is to provide suggestions based on the videos the user specifies. Provide an quirky breakdown of what the user should watch next! It should only list the names of the films after the introduction. Keep the response short and sweet! Always list at least 3 films as suggestions. If the user mentions a genre, you should provide a suggestion based on that genre.`,
      },
      {
        role: "user",
        content: `I like: ${term}`,
      },
    ],
    model: "gpt-35-turbo-16k",
  });

  return {
    body: completion.choices[0].message.content || "No suggestions found",
  };
};

app.http('getAISuggestion', {
    methods: ['GET'],
    authLevel: 'anonymous',
    handler: getAISuggestion
});
  • Добавлен ключ API и базовый URL-адрес в локальном файле настроек.
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing",
    "OPENAI_API_KEY": "a0ee****2a3",
    "OPENAI_BASE_URL": "https://{resource_name}.openai.azure.com/openai/deployments/{model}"
  }
}
  • Я получаю ожидаемый результат локально.

  • Я развернул функцию в приложении-функции с помощью кода vs, или вы также можете использовать команду func azure functionapp publish {func-app-name}.

  • Добавлен ключ и базовый URL-адрес в настройках приложения после развертывания.

  • Я могу успешно вызвать URL-адрес функции.

Я сделал еще один, используя OpenAI, немного по-другому, я вообще не использовал функции, но он тоже работал нормально. Дело в том, что при использовании без этого URL-адреса OpenAI, как у меня, он закомментирован. Мой Microsoft Azure смотрите здесь prnt.sc/aV0UV7xJzhG7. Просто чтобы уточнить, как вы запустили эту функцию локально?

Caio 26.03.2024 16:24

@Caio На вашем скриншоте показан URL-адрес приложения-функции, а не URL-адрес функции. Я выполнил свою функцию в браузере, как и в почтальоне, локально. На вашем снимке экрана я не вижу никакой функции на вкладке функций обзорной панели. Правильно ли вы развернули свою функцию? Вы должны увидеть функцию на вкладке функций.

Ikhtesam Afrin 26.03.2024 17:51

Это то, что я сейчас проверяю. Внутри моего VSCode, используя расширение «Функции Azure», я запускаю приложение «Развертывание в функцию», оно показывает мне это prnt.sc/ihy7a2Xf7ZtY , но кажется, что функция никогда туда не попадает... Понятия не имею, почему, я выбираю правильный приложение-функция, и в моем проекте есть такая функция prnt.sc/I8bZZTuL76D4

Caio 26.03.2024 18:08

Вывод здесь, извините prnt.sc/ItctjGPZoruu

Caio 26.03.2024 18:14

@Caio, поэтому после развертывания триггер не синхронизируется, поэтому вы не можете увидеть эту функцию. Проверьте настройки вашего приложения, если у вас добавлены AzureWebJobFeatureFlags, как показано на моем снимке экрана.

Ikhtesam Afrin 26.03.2024 18:30

Если его нет, добавьте AzureWebJobsFeatureFlags:EnableWorkerIndexing и затем разверните. После развертывания вы сможете увидеть конечную точку вашей функции на вкладке вывода в коде vs.

Ikhtesam Afrin 26.03.2024 18:31

Это уже есть, проверьте здесь prnt.sc/TCCIIietAJy4

Caio 26.03.2024 18:34

@Caio Добавьте его в приложение-функцию перед развертыванием, если оно отсутствует. Чтобы добавить навигацию в приложение-функцию -> переменные среды, а затем добавить ключ и значения в настройках приложения. Я также добавил скриншот в свой ответ, пожалуйста, проверьте. Когда мы развертываем функцию в приложении-функции, локальный файл настроек не развертывается вместе с ним, он предназначен только для локальной разработки.

Ikhtesam Afrin 26.03.2024 18:49

@Caio в вашем случае добавьте указанные значения в приложение-функцию -> конфигурация, поскольку портал Azure еще не обновлен, поэтому вы можете не видеть переменные среды в приложении-функции. Так что добавьте его в приложение Configuration Blade of Function.

Ikhtesam Afrin 26.03.2024 18:56

внутри VSCode я загрузил локальные настройки, чтобы они синхронизировались, как вы можете видеть здесь prnt.sc/Vf8lY4ZrwlXw. А твой скриншот не пришел!

Caio 26.03.2024 19:03

и действительно, я не смог найти опцию переменных среды

Caio 26.03.2024 19:03

Хорошо, кажется, вы добавили это. Можете ли вы развернуть сейчас

Ikhtesam Afrin 26.03.2024 19:09

HTTP-триггеров по-прежнему нет: prnt.sc/kWaUXfHvdgZj prnt.sc/sbNYjdAwbFsE prnt.sc/4qI7BRPUW9GT

Caio 26.03.2024 19:12

Можете ли вы поделиться здесь скриншотом своего кода функции, а пока попробуйте опубликовать его с помощью этой команды func azure functionapp publish {func-app-name}

Ikhtesam Afrin 26.03.2024 19:18

func не будет существовать для меня как команда, следует ли мне установить инструменты Azure или что-то в этом роде? Моя функция prnt.sc/q0YA-xsP1nye

Caio 26.03.2024 19:28

Полная команда 1. az login 2. az account set --subscription "Subscription name" 3. func azure functionapp publish functionappname

Ikhtesam Afrin 26.03.2024 19:36

Попробуйте перезапустить приложение-функцию один раз перед развертыванием.

Ikhtesam Afrin 26.03.2024 19:37

@Caio, можешь ли ты получить результат локально?

Ikhtesam Afrin 26.03.2024 19:47

Я добираюсь до этого, просто нужно установить Functions Core Tools, подождите

Caio 26.03.2024 19:49

окей, вот это странно prnt.sc/wy-50BIPUAhh prnt.sc/S8dgdvo_VIQ0

Caio 26.03.2024 19:53

окей, обновление: у меня есть это: prnt.sc/QDDJ1Lu_9fHK почтальон дает мне это prnt.sc/1GRmdfXHeRpA

Caio 26.03.2024 21:05

@Caio, удалось ли вам получить результат локально? Ваша функция развернута успешно, но я считаю, что вам нужно проверить, работает ли ваша функция локально, если да, то она должна работать и в приложении-функции.

Ikhtesam Afrin 27.03.2024 00:01

не совсем, какую команду вы использовали для локального развертывания?

Caio 27.03.2024 00:03

Для локального запуска либо запустите проект в режиме отладки, либо нажмите fn + f5, либо используйте func host start в терминале.

Ikhtesam Afrin 27.03.2024 00:05

Разве это не бесплатно? prnt.sc/3LHH2kN_x3n6

Caio 27.03.2024 01:42

@Caio Нет, это не бесплатно. В моем случае я создал экземпляр Azure OpenAI, а затем использовал его учетные данные, такие как baseurl и ключ.

Ikhtesam Afrin 27.03.2024 03:57

Думаю, мы нашли мою проблему, не так ли? хаха

Caio 27.03.2024 04:21

@Caio Да, я думаю, это может быть причиной того, что вы не получаете вывод в приложении-функции

Ikhtesam Afrin 27.03.2024 04:22

огромное вам спасибо за ваше расположение!

Caio 27.03.2024 04:29

Другие вопросы по теме