Apache APISIX와 OpenAI API로 AI 역량 강화하기
February 7, 2023
인공지능(AI)은 우리가 기술과 상호작용하는 방식을 혁신적으로 바꾸었으며, 현대 애플리케이션의 필수적인 부분이 되었습니다. OpenAI API는 개발자들에게 강력한 AI 기능을 제공하여, 고급 AI 애플리케이션을 쉽게 구축할 수 있도록 합니다.
그러나 AI 사용이 증가함에 따라, 확장 가능하고 성능이 뛰어나며 안전한 API 통합의 필요성도 커지고 있습니다. 이때 Apache APISIX가 등장합니다. Apache APISIX는 고성능 오픈소스 API 게이트웨이로, API 통합을 관리하고 확장하기 위한 고급 기능을 제공합니다.
이 블로그 포스트에서는 Apache APISIX와 OpenAI API를 통합하는 장점과, Apache APISIX를 사용하여 더 확장 가능하고 성능이 뛰어나며 안전한 AI 통합을 만드는 방법을 탐구해 보겠습니다. 프록시 캐싱부터 보안 기능까지, Apache APISIX와 OpenAI API 통합을 시작하는 데 필요한 모든 것을 다룰 것입니다. AI 개발자이든 DevOps 전문가이든, 이 블로그 포스트는 강력하고 비용 효율적인 AI 통합을 만드는 데 필요한 완벽한 가이드입니다.
학습 목표
이 글을 통해 다음을 배우게 됩니다:
- OpenAI API와 Apache APISIX는 무엇인가?
- OpenAI API와 함께 Apache APISIX를 사용하는 장점.
- OpenAI API를 향상시키기 위한 여러 Apache APISIX 플러그인 사용 사례.
- APISIX에서 OpenAI API를 위한 새로운 Route를 만드는 방법.
- OpenAI API 엔드포인트를 Upstream으로 추가하는 방법.
- 필요에 따라 인증, 속도 제한, 캐싱을 구성하는 방법.
- 요청이 올바르게 OpenAI API로 전달되는지 확인하기 위해 경로를 테스트하는 방법.
OpenAI API란?
OpenAI는 고급 인공지능 모델을 생성하고 배포하기 위한 최첨단 플랫폼입니다. 이러한 모델은 자연어 처리, 이미지 인식, 감정 분석 등 다양한 작업에 사용될 수 있습니다. OpenAI의 주요 장점 중 하나는 개발자가 이러한 모델에 접근하고 애플리케이션에 통합할 수 있는 API를 제공한다는 것입니다.
OpenAI API는 ChatGPT를 포함한 OpenAI의 AI 모델에 접근할 수 있는 클라우드 기반 플랫폼입니다. 이 API를 통해 개발자는 애플리케이션에 AI 기능을 통합할 수 있습니다.
ChatGPT는 OpenAI API를 통해 사용할 수 있는 여러 AI 모델 중 하나이며, 특히 자연어 처리 및 텍스트 생성 기능이 필요한 사용 사례에 적합합니다. 예를 들어, ChatGPT는 챗봇에서 텍스트 응답을 생성하거나, 텍스트 완성 제안을 제공하거나, 코드 완성 또는 대화형 인터페이스에서 질문에 답변하는 데 사용될 수 있습니다.
Apache APISIX란?
Apache APISIX는 확장 가능하고 안전하며 고가용성을 갖춘 RESTful API를 생성하기 위한 API 게이트웨이 기능을 제공하는 오픈소스 클라우드 네이티브 API 트래픽 관리 솔루션입니다.
OpenAI API와 함께 API 게이트웨이를 사용하면, OpenAI 모델에 접근하는 확장 가능하고 안전하며 고성능의 API를 쉽게 생성하고 배포할 수 있습니다. 이를 통해 애플리케이션에 OpenAI의 힘을 통합하고 사용자에게 뛰어난 경험을 제공할 수 있습니다.
OpenAI API와 함께 Apache APISIX를 사용하는 장점
OpenAI API와 함께 Apache APISIX를 사용하는 데에는 여러 가지 장점이 있습니다:
-
확장성: Apache APISIX는 OpenAI API를 관리하고 확장하는 쉬운 방법을 제공하여, 증가하는 트래픽과 사용 요구를 처리할 수 있습니다.
-
성능: Apache APISIX는 응답을 캐싱하고 지연 시간을 줄여 OpenAI API 요청의 성능을 향상시킬 수 있습니다. 보안: Apache APISIX는 암호화 및 인증과 같은 보안 기능을 제공하여 OpenAI API에 대한 접근을 쉽게 보호할 수 있습니다.
-
유연성: Apache APISIX는 OpenAI API에 대한 접근을 관리하고 제어하는 유연한 방법을 제공하여, 필요에 따라 통합을 사용자 정의하고 구성할 수 있습니다.
-
모니터링 및 분석: Apache APISIX는 상세한 모니터링 및 분석을 제공하여, OpenAI API 통합의 성능을 추적하고 최적화할 수 있습니다.
OpenAI API를 향상시키기 위한 Apache APISIX 플러그인
OpenAI API와의 통합을 향상시키기 위해 사용할 수 있는 여러 Apache APISIX 플러그인이 있습니다. OpenAI API와 함께 사용할 수 있는 플러그인 중 일부는 다음과 같습니다:
- rate-limiting: API 요청 수를 제한하고 OpenAI API의 과도한 사용을 방지합니다.
- authentication: 인증 및 권한 부여 메커니즘을 구현하여 OpenAI API에 대한 접근을 보호합니다.
- traffic-control: API 트래픽의 흐름을 제어하여 OpenAI API의 일관된 성능과 안정성을 보장합니다.
- observability: API 요청 및 응답을 모니터링하고 로깅하여 OpenAI API의 사용 및 성능에 대한 가시성을 제공합니다.
- caching: API 응답을 캐싱하고 API 요청 수를 줄여 성능을 향상시키고 OpenAI API 사용 비용을 절감합니다.
- transformation: API 요청 및 응답을 수정하여, JSON에서 XML과 같은 형식으로 데이터를 변환합니다.
Apache APISIX로 OpenAI API 관리 데모
이제 충분한 이론적 지식을 바탕으로 실습 세션으로 넘어갈 수 있습니다. 이 예제에서는 Apache APISIX를 사용하여 OpenAI API에 접근하고 트래픽을 관리하는 간단한 API 게이트웨이를 생성합니다. 이를 위해 경로, 업스트림을 생성하고 몇 가지 플러그인을 활성화합니다. 우리는 OpenAI API의 Completion 엔드포인트와 상호작용하여 제품 설명을 효율적이고 정확하게 생성하는 제품 설명 생성기를 만들 것입니다.
예를 들어, 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
}
}
사전 요구 사항
- 기본 OpenAI API completion 모델 개념에 익숙해야 합니다.
- OpenAI API 키 생성: OpenAI API에 접근하려면 API 키를 생성해야 합니다. OpenAI 웹사이트에 로그인하여 API 키 관리 페이지로 이동하여 이를 수행할 수 있습니다.
- APISIX를 실행하기 위해 머신에 Docker가 설치되어 있어야 합니다.
- Route, Upstream 및 Plugin과 같은 APISIX 핵심 개념에 대한 기본 지식이 필요합니다.
프로젝트 설정
먼저 GitHub에서 apisix-docker 프로젝트 저장소를 복제합니다:
git clone https://github.com/apache/apisix-docker.git
프로젝트 폴더를 선호하는 코드 편집기에서 엽니다. 이 튜토리얼은 VS Code를 활용합니다.
Apache APISIX 설치 및 실행
Apache APISIX를 실행하려면 다음 단계를 따릅니다:
새 터미널 창을 열고 프로젝트의 루트 폴더에서 docker compose up
명령을 실행합니다:
docker compose up -d
위 명령은 Docker와 함께 Apache APISIX와 etcd를 실행합니다.
이 데모에서는 Docker를 사용하여 APISIX를 설치했습니다. 그러나 설치 가이드에 따라 다른 방법으로 설치할 수도 있습니다.
OpenAI API를 위한 Upstream 생성
설정이 완료되면, APISIX의 Admin API를 사용하여 Upstream 객체를 생성합니다. APISIX에서 "Upstream"은 실제 요청 데이터를 제공하는 백엔드 서버를 의미합니다.
이 경우, api.openai.com
에 단일 노드와 https
스키마를 사용하여 업스트림 API 서버를 정의합니다:
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 플러그인이 활성화된 새로운 플러그인 구성을 생성합니다.
이 프록시 플러그인은 OpenAI API 완성 엔드포인트에 대한 요청을 재정의하는 데 사용됩니다. 플러그인의 구성에는 API 엔드포인트의 URL 설정, OpenAI API 키를 헤더로 전달, 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 완성 엔드포인트를 위한 Route 설정
다음 단계에서는 APISIX에서 POST
요청을 처리하기 위해 새로운 Route를 설정하고, 이전 단계에서 생성한 업스트림과 플러그인 구성을 고유 ID로 참조합니다.
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를 테스트하기 위해 cURL 또는 Postman과 같은 도구를 사용하여 /openai/product/desc
엔드포인트에 POST 요청을 보낼 수 있습니다. 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 플러그인을 추가하여 허용된 사용자만 접근할 수 있도록 합니다.
아래 명령은 username1
과 password1
과 같은 자격 증명을 가진 새로운 consumer1
을 생성합니다:
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에 대한 속도 제한 정책 적용
이 섹션에서는 제품 설명 엔드포인트를 남용으로부터 보호하기 위해 스로틀링 정책을 적용할 것입니다. Apache APISIX 게이트웨이에서 속도 제한을 적용하여 들어오는 호출 수를 제한할 수 있습니다.
속도 제한 정책 적용 및 테스트
기존 경로 구성에 limit-count 플러그인을 적용하여 API를 비정상적인 사용으로부터 보호할 수 있습니다. 우리는 API 호출을 60초당 2회로 제한할 것입니다.
기존 경로에 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은 API 응답을 캐싱하고 후속 요청에 캐시된 응답을 제공할 수 있는 Apache APISIX의 기능입니다. 이를 통해 API 요청 수를 줄여 OpenAI API 사용 비용을 절감하고, API 통합의 성능을 향상시키며, API 서버의 부하를 줄일 수 있습니다.
Apache APISIX는 캐시 만료 시간, 캐시 무효화 조건 및 기타 캐싱 정책을 지정할 수 있는 세밀한 캐싱 제어를 제공합니다.
아래 구성에서는 proxy-cache
플러그인을 다른 플러그인과 함께 정의하여 OpenAI API 완성 엔드포인트의 POST
메서드에서 성공적인 제품 설명 응답만 캐싱하도록 합니다.
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 통합은 오픈소스 고성능 마이크로서비스 API 게이트웨이인 Apache APISIX의 기능과 OpenAI API의 고급 인공지능 기능을 결합하여 애플리케이션의 기능과 성능을 향상시키는 것을 포함합니다. 이 통합을 통해 개발자는 Apache APISIX의 확장성과 성능을 활용하여 마이크로서비스를 관리하면서 OpenAI의 최첨단 AI 기능을 활용하여 사용자에게 정교하고 고급 기능을 제공할 수 있습니다.
나중 단계에서는 APISIX와 OpenAI 런타임 코드를 애플리케이션 서버나 공용 클라우드에 배포하여 프로덕션에서 사용할 수 있도록 할 수 있습니다.
이 글에서는 OpenAI API와 함께 사용할 수 있는 Apache APISIX 플러그인의 몇 가지 예만을 보여주었습니다. 필요에 가장 적합한 플러그인을 선택하고 애플리케이션의 특정 요구 사항을 충족하도록 Apache APISIX와 OpenAI API 통합을 사용자 정의할 수 있습니다.