AWS 기반 서버리스 검색 증강 생성(RAG)

이 콘텐츠는 어떠셨나요?

진화하는 생성형 AI 환경에서 외부의 최신 정보를 대규모 언어 모델(LLM)에 통합하는 것은 상당한 발전을 의미합니다. 이 게시물에서는 보다 정확하고 상황에 맞는 응답을 생성하는 애플리케이션을 쉽게 만들 수 있는 진정한 서버리스 검색 증강 생성(RAG) 솔루션을 구축합니다. 목표는 GenAI 기반 애플리케이션을 최대한 빠르게 만들어 비용을 감독하고 사용하지 않는 컴퓨팅에 대한 비용을 지불하지 않도록 하는 것입니다.

서버리스 RAG: 개요

서버리스 RAG는 기본 모델의 고급 언어 처리 기능과 서버리스 아키텍처의 민첩성 및 비용 효율성을 결합합니다. 이러한 통합을 통해 데이터베이스, 인터넷, 사용자 지정 지식 기반 등의 외부 소스에서 정보를 동적으로 검색할 수 있으므로 정확하고 컨텍스트가 풍부할 뿐만 아니라 최신 정보가 포함된 최신 콘텐츠를 생성할 수 있습니다.

Amazon Bedrock은 서버리스 RAG 애플리케이션의 배포를 간소화하여 개발자에게 광범위한 인프라 관리 없이도 GenAI 프로젝트를 생성, 관리 및 확장할 수 있는 도구를 제공합니다. 또한 개발자는 Lambda 및 S3와 같은 AWS 서비스의 강력한 기능과 LanceDB와 같은 혁신적인 오픈 소스 벡터 데이터베이스를 활용하여 응답성이 뛰어나고 비용 효율적인 AI 기반 솔루션을 구축할 수 있습니다.

문서 모으기

서버리스 RAG 솔루션을 향한 여정에는 몇 가지 주요 단계가 포함되며, 각 단계는 기본 모델과 외부 지식을 원활하게 통합할 수 있도록 맞춤화되었습니다.

프로세스는 이벤트 기반 메커니즘이 임베딩을 생성하기 위해 텍스트 콘텐츠 추출 및 처리를 트리거하는 서버리스 아키텍처로 문서를 모으는 것으로 시작됩니다. Amazon Titan과 같은 모델을 사용하여 생성된 이러한 임베딩은 콘텐츠를 기계가 쉽게 이해하고 처리할 수 있는 수치 벡터로 변환합니다.

Amazon S3에서 지원하는 서버리스 벡터 데이터베이스인 LanceDB에 이러한 벡터를 저장하면 효율적인 검색 및 관리가 용이해져 관련 정보만 사용하여 LLM의 응답을 강화할 수 있습니다. 이 접근 방식은 생성된 콘텐츠의 정확성과 관련성을 향상시킬 뿐만 아니라 종량제 모델을 활용하여 운영 비용을 크게 절감합니다.

여기에서 코드를 살펴보세요.

임베딩이란 무엇인가요?

자연어 처리(NLP) 영역에서 임베딩은 텍스트 정보를 기계가 이해하고 처리할 수 있는 숫자 형식으로 변환할 수 있게 하는 중추적 개념입니다. 이는 의미론적 관계를 컴퓨터가 인간의 언어보다 훨씬 더 잘 이해할 수 있는 기하학적 관계로 변환하는 방법입니다. 기본적으로 임베딩을 통해 문서의 내용을 고차원 공간의 벡터로 변환합니다. 이러한 방식으로 이 공간에서 기하학적 거리가 의미론적 의미를 갖게 됩니다. 이 공간에서 서로 다른 개념을 나타내는 벡터는 서로 멀리 떨어지고, 유사한 개념은 하나로 묶입니다.

이는 방대한 텍스트로 훈련된 신경망을 사용하여 다양한 컨텍스트에서 단어 그룹이 함께 나타날 가능성을 계산하는 Amazon Titan Embedding과 같은 모델을 통해 가능합니다.

다행히도 이 시스템을 처음부터 구축할 필요는 없습니다. 임베딩 모델과 기타 기본 모델에 대한 액세스를 제공하기 위해 Bedrock이 존재합니다.

지식 기반을 임베딩했습니다. 이제 무엇을 해야 하나요?

어딘가, 정확히 말해 벡터 데이터베이스에 저장해야 합니다. 바로 여기서 진정한 서버리스 마법이 일어납니다.

LanceDB는 영구 스토리지를 사용한 벡터 검색용 오픈 소스 벡터 데이터베이스로 임베딩의 검색, 필터링 및 관리를 간소화합니다. 가장 눈에 띄는 기능은 LanceDB를 S3에 직접 연결하는 것이었습니다. 이렇게 하면 유휴 컴퓨팅이 필요 없습니다. Lambda 함수가 실행되는 동안에만 데이터베이스를 사용하겠습니다. 로드 테스트 결과, LanceDB, Bedrock 또는 Lambda의 성능 저하 없이 최대 500MB 크기의 문서를 모을 수 있는 것으로 나타났습니다.

이 시스템의 알려진 제한 사항은 Lambda 콜드 스타트이지만, 대부분의 시간이 소요되는 프로세스는 실제로는 Lambda 외부에서 발생하는 임베딩 계산이며, 사용자 기반이 콜드 스타트의 영향을 받는 경우는 10%에 불과한 것으로 확인되었습니다. 이를 완화하기 위해 MVP의 다음 단계에서 배치 작업을 생성하는 것을 고려할 수 있으며, Batch 또는 ECS Fargate 등의 다른 서버리스 AWS 서비스를 통해 스팟 요금을 활용하여 비용도 더 절감할 수 있습니다.

쿼리

사용자는 Lambda URL을 통해 입력 내용을 추론 함수에 전달할 수 있습니다. 이 입력 내용은 벡터를 계산하는 Bedrock을 통해 Titan Embedding 모델에 공급됩니다. 그런 다음 이 벡터를 사용하여 벡터 데이터베이스에서 몇 개의 유사한 문서를 소싱하고 최종 프롬프트에 추가합니다. 사용자가 선택한 LLM으로 최종 프롬프트를 보내고 스트리밍이 지원되는 경우 사용자에게 실시간으로 응답이 다시 스트리밍됩니다. 여기에서도 장시간 실행되는 유휴 계산이 없으며, 사용자 입력은 일반적으로 모으는 문서보다 작기 때문에 임베딩 계산에 걸리는 시간이 더 짧을 것으로 예상할 수 있습니다.

이 추론 시스템의 알려진 제한 사항은 새로운 Lambda 함수 내에서 벡터 데이터베이스를 콜드 스타트업하는 것입니다. LanceDB는 S3에 저장된 데이터베이스를 참조하므로 새로운 Lambda 실행 환경이 생성될 때 벡터 검색을 수행하려면 데이터베이스를 로드해야 합니다. 이는 스케일 업하거나 한동안 아무도 질문하지 않은 경우에만 발생하므로 완전한 서버리스 아키텍처의 비용 절감 효과에 비해 다소 작은 절충안입니다.

여기에서 코드를 살펴보세요.

서버리스 RAG의 경제성 살펴보기

서버리스 RAG를 도입하려면 비용에 미치는 영향을 이해하는 것이 중요합니다. 토큰 사용량과 서버리스 리소스 소비를 기반으로 하는 Amazon Bedrock의 가격 모델을 통해 개발자는 비용을 정확하게 예측할 수 있습니다. 임베딩을 위해 문서를 처리하든, 응답을 위해 모델을 쿼리하든 사용량에 따른 요금을 통해 비용이 사용량에 직접 연결되므로 사용한 만큼만 비용을 지불하면 됩니다.

모으기의 경제학

문서 처리에 서버리스 아키텍처를 사용하는 경우의 경제성에 대해 좀 더 자세히 알아보겠습니다. 몇 가지 가정을 바탕으로 계산을 진행하는데, 처리 시간은 대략 데이터 메가바이트당 1분으로 추정되며, 이 정도 크기의 문서에는 보통 3만 개 미만의 토큰이 포함되어 있습니다. 이러한 수치는 기준을 제공하지만 현실은 더 유리한 경우가 많으며, 훨씬 더 빠르게 처리되는 문서가 많습니다.

대부분의 경우 1MB 문서 하나를 처리하는 데 드는 비용은 0.5센트가 채 되지 않습니다. 각각 크기가 1MB인 문서를 1,000개까지 스케일 업할 경우 총 비용은 4 USD 미만으로 매우 낮습니다. 이 예에서는 문서 처리를 위한 서버리스 아키텍처의 비용 효율성을 보여줄 뿐만 아니라 Amazon Bedrock과 같은 플랫폼에서 사용되는 토큰 기반 요금 모델의 효율성을 강조합니다. 이는 일회성 프로세스로, 일단 처리된 문서는 삭제하기로 결정할 때까지 벡터 데이터베이스에 보관됩니다.

쿼리의 경제학

설정의 대화형 부분으로 넘어가서 실제로 AI에게 몇 가지 질문을 하기 시작하면 어떤 일이 발생하는지 살펴보겠습니다. AWS Lambda가 프롬프트를 포함하고 답변을 제공하는 데 20초가량 걸리고, 각 질문과 답변이 각각 약 1,000개의 토큰이라고 가정해 보겠습니다. 추론 비용에 비해 S3에 대한 요청과 관련된 비용은 미미합니다.

가정을 전제로 비용에 대해 자세히 알아보겠습니다. Anthropic의 Claude V2 모델에 대한 단일 쿼리를 실행하는 데 드는 비용은 약 3센트입니다. Claude Instant와 같이 조금 더 가벼운 것을 선택하면 쿼리당 비용이 몇 분의 1로 급격히 떨어집니다. Claude V2로 쿼리를 1,000개까지 늘릴 경우 전체 비용은 약 33 USD입니다. 여기에는 LLM으로 질문을 보내고, 데이터베이스에서 유사한 문서를 가져와 쿼리를 보강하고, 상황에 맞는 문서에 바인딩하고, 맞춤형 답변을 얻는 전체 여정이 포함됩니다.

이 전체 설정의 가장 큰 장점은 서버리스 특성 덕분에 요청별로 작동하도록 설계되었다는 점입니다. 즉, 사용한 만큼만 비용을 지불하면 됩니다.

서버리스 RAG를 통한 지평 확장

앞으로 서버리스 RAG의 잠재적인 적용 분야는 현재의 사용 사례를 훨씬 뛰어넘을 것입니다. 개발자는 관련성을 위한 모델 순위 재조정, 향상된 의미 체계 검색을 위한 어댑터 내장, 멀티 모달 정보 통합 탐색과 같은 추가 전략을 통합함으로써 GenAI 애플리케이션을 더욱 정교하게 개선하고 확장할 수 있습니다.

Amazon Bedrock의 서버리스 RAG 지원은 생성형 AI 분야에서 혁신을 위한 새로운 길을 열어줍니다. AWS는 진입 장벽을 낮추고 확장 가능하고 비용 효율적인 플랫폼을 제공함으로써 개발자가 AI 기반 애플리케이션의 잠재력을 최대한 활용할 수 있도록 지원합니다. 서버리스 RAG의 기능을 계속 탐색하고 확장함에 따라 보다 지능적이고 반응성이 뛰어나며 관련성이 높은 AI 솔루션을 만들 수 있는 가능성은 무한합니다. 이 여정에 동참하여 Amazon Bedrock의 서버리스 RAG가 어떻게 AI 프로젝트를 현실로 바꿀 수 있는지 알아보세요.

리소스

Giuseppe Battista

Giuseppe Battista

Giuseppe Battista는 Amazon Web Services의 Senior Solutions Architect입니다. 그는 영국과 아일랜드의 Early Stage Startups를 위한 솔루션스 아키텍처를 이끌고 있습니다. 그는 twitch.tv/aws에서 'Let's Build a Startup'이라는 Twitch 쇼를 진행하며 Unicorn's Den 액셀러레이터의 책임자입니다.

LinkedIn에서 Giuseppe 팔로우

Kevin Shaffer-Morrison

Kevin Shaffer-Morrison

Kevin Shaffer-Morrison은 Amazon Web Services Senior Solutions Architect입니다. 그는 수백 개에 달하는 Startup의 빠른 시작과 클라우드 진입을 도와왔으며, 코드 샘플과 Twitch 라이브 스트림으로 초기 단계의 창업자를 돕는 데 중점을 두고 있습니다.

LinkedIn에서 Kevin 팔로우

이 콘텐츠는 어떠셨나요?