Расширение возможностей ИИ с помощью Apache APISIX и OpenAI API

Bobur Umurzokov

Bobur Umurzokov

February 7, 2023

Technology

Искусственный интеллект (ИИ) революционизировал то, как мы взаимодействуем с технологиями, и стал неотъемлемой частью современных приложений. OpenAI API предоставляет разработчикам мощные возможности ИИ, позволяя легко создавать продвинутые приложения с использованием ИИ.

Однако с ростом использования ИИ возрастает и потребность в масштабируемых, производительных и безопасных интеграциях API. Именно здесь на помощь приходит Apache APISIX. Apache APISIX — это высокопроизводительный API-шлюз с открытым исходным кодом, который предоставляет продвинутые функции для управления и масштабирования интеграций API.

В этом блоге мы рассмотрим преимущества интеграции Apache APISIX с OpenAI API и то, как вы можете использовать Apache APISIX для создания более масштабируемой, производительной и безопасной интеграции ИИ. От кэширования прокси до функций безопасности — мы расскажем обо всем, что вам нужно знать, чтобы начать работу с интеграцией Apache APISIX и OpenAI API. Независимо от того, являетесь ли вы разработчиком ИИ или специалистом по DevOps, этот блог станет вашим полным руководством по созданию мощной и экономически эффективной интеграции ИИ.

Цели обучения

В этой статье вы узнаете следующее:

  • Что такое OpenAI API и Apache APISIX?
  • Преимущества использования Apache APISIX с OpenAI API.
  • Несколько примеров использования плагинов Apache APISIX для улучшения OpenAI API.
  • Как создать новый Route в APISIX для OpenAI API.
  • Как добавить конечную точку OpenAI API в качестве Upstream для маршрута.
  • Как настроить аутентификацию, ограничение скорости и кэширование для маршрута по мере необходимости.
  • Как протестировать маршрут, чтобы убедиться, что запросы корректно перенаправляются в OpenAI API.

Что такое OpenAI API?

OpenAI — это передовая платформа для создания и развертывания продвинутых моделей искусственного интеллекта. Эти модели могут использоваться для различных задач, таких как обработка естественного языка, распознавание изображений и анализ настроений. Одним из ключевых преимуществ OpenAI является то, что она предоставляет API, который разработчики могут использовать для доступа к этим моделям и их интеграции в свои приложения.

OpenAI API — это облачная платформа, предоставляющая доступ к моделям ИИ OpenAI, включая ChatGPT. API позволяет разработчикам интегрировать возможности ИИ в свои приложения.

ChatGPT — это одна из моделей ИИ, доступных через OpenAI API, и она особенно хорошо подходит для задач, требующих обработки естественного языка и генерации текста. Например, ChatGPT можно использовать для генерации текстовых ответов в чат-боте, предоставления подсказок для завершения текста, завершения кода или ответов на вопросы в интерфейсе с поддержкой диалога.

Что такое Apache APISIX?

Apache APISIX — это облачное решение с открытым исходным кодом для управления трафиком API, которое предоставляет функции API-шлюза для создания масштабируемых, безопасных и высокодоступных RESTful API.

Используя API-шлюз с OpenAI API, вы можете легко создавать и развертывать масштабируемые, безопасные и высокопроизводительные API, которые обращаются к моделям OpenAI. Это позволит вам интегрировать мощь OpenAI в свои приложения и предоставить пользователям отличный опыт.

Преимущества использования Apache APISIX с OpenAI API

Использование Apache APISIX с OpenAI API имеет несколько преимуществ:

  1. Масштабируемость: Apache APISIX предоставляет простой способ управления и масштабирования OpenAI API, позволяя справляться с увеличением трафика и нагрузок.

  2. Производительность: Apache APISIX может улучшить производительность запросов к OpenAI API, кэшируя ответы и уменьшая задержку. Безопасность: Apache APISIX предоставляет функции безопасности, такие как шифрование и аутентификация, что упрощает защиту доступа к OpenAI API.

  3. Гибкость: Apache APISIX предоставляет гибкий способ управления и контроля доступа к OpenAI API, позволяя настраивать и конфигурировать интеграцию по мере необходимости.

  4. Мониторинг и аналитика: Apache APISIX предоставляет детальный мониторинг и аналитику, позволяя отслеживать и оптимизировать производительность вашей интеграции с OpenAI API.

Плагины Apache APISIX для улучшения OpenAI API

Существует несколько плагинов Apache APISIX, которые можно использовать для улучшения интеграции с OpenAI API. Некоторые из плагинов, которые можно использовать с OpenAI API, включают:

  • rate-limiting: Для ограничения количества запросов к API и предотвращения чрезмерного использования OpenAI API.
  • authentication: Для защиты доступа к OpenAI API путем реализации механизмов аутентификации и авторизации.
  • traffic-control: Для управления потоком трафика API и обеспечения стабильной производительности OpenAI API.
  • observability: Для мониторинга и логирования запросов и ответов API, предоставляя видимость использования и производительности OpenAI API.
  • caching: Для кэширования ответов API и уменьшения количества запросов, что улучшает производительность и снижает стоимость использования OpenAI API.
  • transformation: Для изменения запросов и ответов API, преобразуя данные из одного формата в другой, например, из JSON в XML.

Управление API OpenAI с помощью Apache APISIX: Демо

Имея достаточно теоретических знаний, мы можем перейти к практической части. В этом примере Apache APISIX используется для создания простого API-шлюза, который обращается к OpenAI API и управляет трафиком, создавая маршрут, upstream и включая некоторые плагины. Мы будем взаимодействовать с конечной точкой Completion OpenAI API для создания генератора описаний продуктов, который будет эффективно и точно генерировать описания продуктов.

Например, типичный запрос к API-шлюзу будет выглядеть следующим образом:

curl http://127.0.0.1:9080/openai/product/desc -X POST -d '{ "model":"text-davinci-003", "prompt":"Write a brief product description for Apple 13 pro", "temperature":0, "max_tokens":256 }'

И мы получим следующий ответ:

{ "object":"text_completion", "model":"text-davinci-003", "choices":[ { "text":"\n\nThe Apple 13 Pro is the perfect laptop for those who need a powerful and reliable machine. It features a 13-inch Retina display with True Tone technology, a powerful 8th-generation Intel Core i5 processor, 8GB of RAM, and a 256GB SSD for storage. It also has a Touch Bar and Touch ID for added security and convenience. With up to 10 hours of battery life, you can stay productive all day long. The Apple 13 Pro is the perfect laptop for those who need a powerful and reliable machine.", "index":0, "finish_reason":"stop" } ], "usage":{ "prompt_tokens":9, "completion_tokens":109, "total_tokens":118 } }

Предварительные требования

  • Необходимо быть знакомым с основными концепциями модели completion OpenAI API.
  • Создать API-ключ OpenAI: Для доступа к OpenAI API вам нужно создать API-ключ. Это можно сделать, войдя на сайт OpenAI и перейдя на страницу управления API-ключами.
  • Установить Docker на вашем компьютере для запуска APISIX.
  • Базовые знания о нескольких основных концепциях APISIX, таких как Route, Upstream и Plugin.

Настройка проекта

Первым делом клонируйте репозиторий apisix-docker с GitHub:

git clone https://github.com/apache/apisix-docker.git

Откройте папку проекта в вашем любимом редакторе кода. В этом руководстве используется VS Code.

Установка и запуск Apache APISIX

Чтобы запустить Apache APISIX, выполните следующие шаги:

Откройте новое окно терминала и выполните команду docker compose up из корневой папки проекта:

docker compose up -d

Эта команда запустит Apache APISIX и etcd вместе с Docker.

В этом демо мы установили APISIX с помощью Docker. Однако есть и другие способы установки, описанные в руководстве по установке.

Создание Upstream для OpenAI API

После завершения настройки мы создадим объект Upstream в APISIX с использованием его Admin API. "Upstream" в APISIX относится к серверам, которые отвечают за обработку фактических данных запроса.

В нашем случае мы определяем upstream API-сервер на api.openai.com с одним узлом и используем схему https для безопасного взаимодействия с Upstream:

curl "http://127.0.0.1:9180/apisix/admin/upstreams/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d ' { "name": "OpenAI API upstream", "desc": "Add the OpenAI API domain as the upstream", "type": "roundrobin", "scheme": "https", "nodes": { "api.openai.com:443": 1 } }'

Создание новой конфигурации плагина

Теперь мы создадим новую конфигурацию плагина с включенным плагином proxy-rewrite.

Плагин proxy используется для переопределения запросов к конечной точке завершения OpenAI API. Конфигурация плагина включает параметры для установки URL конечной точки API, передачи API-ключа OpenAI в качестве заголовка и установки заголовка Content-Type в значение application/json.

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins":{ "proxy-rewrite":{ "uri":"/v1/completions", "host":"api.openai.com", "headers":{ "Authorization":"OpenAI API Key", "Content-Type":"application/json" } } } }'

Настройка маршрута для конечной точки завершения OpenAI

На следующем шаге мы настроим новый маршрут в APISIX для обработки POST-запросов с новым пользовательским путем API-шлюза /openai/product/desc, и мы ссылаемся на созданные upstream и конфигурацию плагина по их уникальным идентификаторам.

curl -i http://127.0.0.1:9180/apisix/admin/routes/1 \ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "name":"OpenAI API completion route", "desc":"Create a new route in APISIX for the OpenAI API completion endpoint", "methods":[ "POST" ], "uri":"/openai/product/desc", "upstream_id":"1", "plugin_config_id":1 }'

Дополнительно маршрут настроен с повторными попытками, таймаутом и таймаутом keepalive для обеспечения надежной и устойчивой связи с OpenAI API.

Тестирование с помощью запроса Curl

Чтобы протестировать API, вы можете сделать POST-запрос к конечной точке /openai/product/desc с помощью инструмента, такого как cURL или Postman. API-шлюз перенаправит запрос в конечную точку завершения OpenAI API и успешно вернет результаты.

curl http://127.0.0.1:9080/openai/product/desc -X POST -d '{ "model":"text-davinci-003", "prompt":"Write a brief product description for Apple 13 pro", "temperature":0, "max_tokens":256 }'

Отлично! Мы получили ответ от фактической конечной точки завершения:

HTTP/1.1 200 OK Content-Type: application/json ... { "object":"text_completion", ... "choices":[ { "text":"\n\nThe Apple 13 Pro is the perfect laptop...", "index":0, "logprobs":null, "finish_reason":"stop" } ], ... }

Создание нового потребителя и добавление аутентификации

До этого момента наша конечная точка API-шлюза /openai/product/desc была общедоступной и доступной для неавторизованных пользователей (хотя связь между APISIX и OpenAI API защищена с помощью API-ключа в заголовке). В этом разделе мы включим функцию аутентификации, чтобы запретить неавторизованные запросы к нашему API.

Для этого нам нужно создать нового потребителя для нашей конечной точки и добавить плагин basic-auth для существующей конфигурации плагина, чтобы только разрешенные пользователи могли получить доступ к ней.

Следующая команда создаст нашего нового потребителя consumer1 с его учетными данными, такими как username1 и password1:

curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "consumer1", "plugins": { "basic-auth": { "username": "username1", "password": "password1" } } }'

Теперь мы обновляем существующую конфигурацию плагина и добавляем плагин basic-auth, чтобы APISIX проверял учетные данные потребителя API в заголовке запроса каждый раз, когда вызываются API:

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins":{ "proxy-rewrite":{ "uri":"/v1/completions", "host":"api.openai.com", "headers":{ "Authorization":"OpenAI API Key", "Content-Type":"application/json" } }, "basic-auth":{} } }'

Теперь только если мы предоставим правильные учетные данные пользователя в запросе и получим доступ к той же конечной точке, мы сможем получить ожидаемый ответ от OpenAI API:

curl -i -u username1:password1 http://127.0.0.1:9080/openai/product/desc -X POST -d \ '{ "model":"text-davinci-003", "prompt":"Write a brief product description for Apple 13 pro", "temperature":0, "max_tokens":256 }'

Применение политик ограничения скорости для бессерверных API

В этом разделе мы защитим нашу конечную точку описания продукта от злоупотреблений, применив политику ограничения скорости. В API-шлюзе Apache APISIX мы можем применить ограничение скорости, чтобы ограничить количество входящих вызовов.

Применение и тестирование политики ограничения скорости

С существующей конфигурацией маршрута мы можем применить политику ограничения скорости с плагином limit-count, чтобы защитить наш API от аномального использования. Мы ограничим количество вызовов API до 2 за 60 секунд для каждого потребителя API.

Чтобы включить плагин limit-count для существующего маршрута, нам нужно добавить плагин в список плагинов в нашей конфигурации Json:

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins":{ "proxy-rewrite":{ "uri":"/v1/completions", "host":"api.openai.com", "headers":{ "Authorization":"OpenAI API Key", "Content-Type":"application/json" } }, "basic-auth":{}, "limit-count":{ "count":2, "time_window":60, "rejected_code":403, "rejected_msg":"Requests are too frequent, please try again later.", "key_type":"var", "key":"remote_addr" } } }'

Apache APISIX обработает первые два запроса как обычно. Однако третий запрос в тот же период вернет код 403 HTTP Forbidden с нашим пользовательским сообщением об ошибке:

curl -i -u username1:password1 http://127.0.0.1:9080/openai/product/desc -X POST -d \ '{ "model":"text-davinci-003", "prompt":"Write a brief product description for Apple 13 pro", "temperature":0, "max_tokens":256 }' # После первого вызова HTTP/1.1 200 OK Content-Type: application/json Content-Length: 752 Connection: keep-alive X-RateLimit-Limit: 2 X-RateLimit-Remaining: 1 # После второго вызова HTTP/1.1 403 Forbidden {"error_msg":"Requests are too frequent, please try again later."}

Настройка кэширования для ответа OpenAI API

Кэширование прокси в Apache APISIX proxy caching — это функция Apache APISIX, которая позволяет кэшировать ответы API и обслуживать кэшированные ответы для последующих запросов. Это может помочь уменьшить количество запросов к API, что означает снижение стоимости использования OpenAI API, улучшить производительность вашей интеграции API и снизить нагрузку на сервер API.

Apache APISIX предоставляет детальный контроль над поведением кэширования, позволяя вам указать время истечения срока действия кэша, условия для инвалидации кэша и другие политики кэширования.

В следующей конфигурации мы определим плагин proxy-cache вместе с другими плагинами, чтобы кэшировать только успешные ответы описания продукта от метода POST конечной точки завершения OpenAI API.

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins":{ "proxy-rewrite":{ "uri":"/v1/completions", "host":"api.openai.com", "headers":{ "Authorization":"OpenAI API Key", "Content-Type":"application/json" } }, "basic-auth":{}, "proxy-cache":{ "cache_key":[ "$uri", "-cache-id" ], "cache_method":[ "POST" ], "cache_http_status":[ 200 ], "hide_cache_headers":true } } }'

Мы отправим несколько запросов на путь /openai/product/desc, и каждый раз мы должны получать ответ HTTP 200 OK. Однако заголовок Apisix-Cache-Status в ответе показывает MISS, что означает, что ответ еще не был кэширован при первом запросе. Теперь, если вы сделаете еще один запрос, вы увидите, что вы получите кэшированный ответ с индикатором кэширования HIT.

Ответ выглядит следующим образом:

HTTP/1.1 200 OK Apisix-Cache-Status: MISS

Когда вы сделаете следующий вызов к сервису, маршрут ответит на запрос кэшированным ответом, так как он уже был кэширован в предыдущем запросе:

HTTP/1.1 200 OK Apisix-Cache-Status: HIT

Итог

Интеграция Apache APISIX и OpenAI API включает в себя объединение функций Apache APISIX, высокопроизводительного API-шлюза с открытым исходным кодом, с передовыми возможностями искусственного интеллекта OpenAI API для улучшения функциональности и производительности приложений. С этой интеграцией разработчики могут использовать масштабируемость и производительность Apache APISIX для управления микросервисами, одновременно используя передовые возможности ИИ OpenAI для предоставления пользователям сложных и продвинутых функций.

На более поздних этапах вы можете развернуть как APISIX, так и код выполнения OpenAI на сервере приложений или в любом публичном облаке, чтобы сделать их доступными в производственной среде.

В этом посте мы продемонстрировали лишь несколько примеров плагинов Apache APISIX, которые можно использовать с OpenAI API. Вы можете выбрать плагины, которые лучше всего соответствуют вашим потребностям, и настроить интеграцию Apache APISIX и OpenAI API в соответствии с конкретными требованиями ваших приложений.

Связанные ресурсы

Рекомендуемые материалы

Сообщество

🙋 Присоединяйтесь к сообществу Apache APISIX 🐦 Следите за нами в Twitter 📝 Найдите нас в Slack

Tags: