쉽고 경제적인 RAG 구축을 위한 Knowledge Bases for Amazon Bedrock 안내서

Seongwoo Choi
9 min readJan 7, 2024

--

LLM이 질문에 대한 답변을 생성하는 과정에서 사실과는 다른 환각 현상이 발생할 수 있다. 환각을 최소화하기 위해 RAG(Retrieval Augmented Generation)라는 방법이 Meta에 의해 도입되었다. LLM이 입력을 받으면 특정 소스에서 관련한 문서를 찾아 context에 추가하고, 해당 정보를 토대로 최종 출력을 반환하게 된다. RAG를 통해서 Fine-Tuning을 하지 않고도 제한적인 정보를 가지고 있는 LLM을 보다 정확하고 커스텀하게 개선할 수 있게 되었다.
이러한 RAG의 단점이라면 아무래도 벡터 데이터베이스와 LLM과의 연동을 위하여 LangChain을 활용한 개발 공수가 수반된다는 것이다. AWS는 CSP 중에서도 빠르게 이러한 RAG를 간소화하고 추상화한 서비스인 Knowledge Bases for Amazon Bedrock re:Invent 2023에서 GA로 발표하였다.
이번 포스팅에서는 Knowledge Bases의 각 옵션에 따른 차이와 구성 방법에 대해 공유하려 한다.

Knowledge Bases의 벡터 데이터베이스

2024년 1월 7일 기준, 총 4가지의 옵션을 제공하고 있다.

2023년 12월 21일에 벡터 데이터베이스 종류로 Amazon Aurora가 추가되었다. Pinecone과 Redis Enterprise Cloud의 경우 AWS Native 서비스가 아니며 추가적인 관리 포인트를 요하기 때문에 본 포스팅에서는 논외로 하겠다.
따라서 AWS Native로 RAG를 구축하려면 Amazon OpenSearch Serverless 혹은 Amazon Aurora를 사용하게 된다. 여기서 Aurora Serverless는 콘솔 상에 명시되어 있지 않지만 Amazon Aurora를 선택하여 연동이 가능하며, 실제 운영 시에도 애플리케이션 상황에 따라 자동으로 확장/축소되어 관리가 줄어들기에 Aurora Serverless를 사용하기를 권장한다.

아무것도 없는 상태에서 새로 구축한다면 가장 편리한 것은 Amazon OpenSearch Serverless이다. 아래와 같이 추가적인 정보 기입 없이 Knowledge Base를 생성할 수 있다.

Quick create a vector database with OpenSearch Serverless

기존에 소유하고 있던 벡터 데이터베이스를 연동할 수도 있다. 이 경우에 OpenSearch Serverless도 가능하지만, 테스트 용도 혹은 문서가 많지 않거나 비용을 가장 낮게 사용하려면 Amazon Aurora Serverless (v2)를 권장한다.

OpenSearch Serverless의 경우 비용이 부과되는 최소 단위인 OCU(OpenSearch Compute Unit)에 대해 알아야 하는데, 기본적으로는 최소 OCU가 4개이다. 프로비저닝 시에 Indexing을 위한 OCU 2개, Search를 위한 OCU 2개가 생성된다. 개발/테스트 모드로 설정하여 Replica를 비활성화하면, 최소 OCU는 2개가 된다. 북미 버지니아 리전 기준 OCU당 비용이 시간당 $0.24 가 부과된다. 한 달이면 $0.24 * 2 * 24 * 30.5 = $351.36 가 부과된다.

Amazon Aurora Serverless는 최소 데이터베이스 구성 용량이 0.5 ACU(Aurora Capacity Unit)이다. 버지니아 리전 기준 ACU당 비용이 시간당 $0.12 가 부과된다. 한 달이면 $0.12 / 2 * 24 * 30.5 = $43.92 로 OpenSearch Serverless 옵션에 비해 8배나 저렴하다.

Amazon Aurora Serverless로 Knowledge Base 구축하기

경제적으로 Knowledge Base를 구축할 수 있는 Amazon Aurora Serverless를 이용한 가이드를 공유해 보겠다.

가장 먼저 Aurora Serverless 인스턴스를 프로비저닝해야 한다. 아래 버전 이상의 PostgreSQL DB 클러스터가 필요하다.

  • 15.4 / 14.9 / 13.12 / 12.16 각각의 이후 버전

추가적으로 pgvector 확장 기능 버전이 0.5.0 이상이어야 하며, Data API가 활성화, Secret Manager를 통해 관리되는 user 연결이 필수적인 조건이다.

조건에 따라서 15.5 버전의 PostgreSQL 엔진 버전과, Secret Manager에서 User 정보를 관리하는 옵션으로 설정하였다.

Serverless v2를 선택하고, ACU 최소 단위인 0.5 ACU로 동작하기 위해서 용량 범위를 0.5~1로 설정해 주고, 테스트 용도로 구성할 것이므로 복제본도 생성하지 않는다.

Knowledge Bases에서 접근하기 위해서 퍼블릭 액세스가 활성화되어 있어야 하며, 연결된 보안 그룹은 인바운드로 443 포트가 열려 있어야 한다. 필수 조건 중 하나인 Data API를 활성화하는 것을 잊지 않아야 한다. 이외의 옵션은 모두 Default로 설정해도 무관하다.

쿼리 편집기를 통해서 데이터베이스에 연결하여 pgvector 등 추가 설정을 완료해야 한다. Secret Manager를 통해서 연결하며 DB 생성 시 입력한 마스터 사용자 이름으로 연결한다. 아래 쿼리로 pgvector를 설치한다. 조건에 따라 0.5.0 이상으로 설치되었는지 확인한다.

CREATE EXTENSION IF NOT EXISTS vector;

SELECT extversion FROM pg_extension WHERE extname='vector';

아래 쿼리를 통해 스키마, 롤을 생성하고 권한을 부여한다. 해당 롤의 이름과 비밀번호는 Secret Manager에서 생성한 새로운 자격 증명과 일치해야 한다.

CREATE SCHEMA bedrock_integration;

CREATE ROLE bedrock_user WITH PASSWORD 'yourpassword' LOGIN;

GRANT ALL ON SCHEMA bedrock_integration to bedrock_user;

다음 쿼리를 통해 bedrock과의 연동을 위한 테이블과 인덱스를 생성하면 Database에서의 설정은 모두 완료된다.

CREATE TABLE bedrock_integration.bedrock_kb (id uuid PRIMARY KEY, embedding vector(1536), chunks text, metadata json);

CREATE INDEX on bedrock_integration.bedrock_kb USING hnsw (embedding vector_cosine_ops);

Amazon Bedrock의 Knowledge Bases 콘솔로 진입한다.

Knowledge base — provide details

Knowledge Base 이름과 관련 권한을 설정한다. 기본값으로 해도 무방하다.

Knowledge base — set up data source

데이터 소스를 담고 있는 S3 버킷의 URI를 입력한다. 해당 버킷에 담겨 있는 pdf, txt, xlsx, html, doc 등 파일 내 정보를 기반으로 LLM이 답변을 출력하게 된다.

Knowledge base — configure vector store 1

벡터 데이터베이스로 Amazon Aurora를 선택한다. 참고로 S3 버킷 내 문서를 벡터화하는 엠베딩 모델은 Amazon의 Titan Embeddings를 사용하고 있다. 한국어 엠베딩을 위해 KoSimCSE-roberta 등을 사용하길 원한다면 현재로서는 Knowledge Bases for Amazon Bedrock은 적합하지 않다.

Knowledge base — configure vector store 2

쿼리를 통해 입력한 정보와 매치되도록 모든 정보를 입력하여 생성을 완료한다. 필자의 경우는 permission denied for table bedrock_kb 에러가 떠서 아래 쿼리를 통해 권한 문제를 해결하였다. 공식 문서에는 이 부분에 관해 따로 명시되어 있진 않다.

GRANT ALL ON bedrock_integration.bedrock_kb TO bedrock_user;

Knowledge Base 생성 이후 Data Source 설정으로 이동하여 데이터 동기화를 위해 [Sync]를 눌러야 한다.

Test knowledge base

Knowledge Base 콘솔에서 위와 같이 간단하게 테스트 가능하며, 기존에 넣어놓은 소스 문서에서 관련한 부분을 찾아 context로 추가하여 최종 답변을 반환하는 것을 볼 수 있다. 쿼리 응답 시에는 참조한 context의 chunk를 같이 반환한다.

Conclusion

권한 부여라든지 인덱스 필드 매핑이라든지 OpenSearch Serverless로 간단히 구성할 때에 비해 약간의 수고는 들지만 효과적으로 Knowledge Base를 통해 보다 전문적이고 커스텀하게 답변을 생성하는 것을 확인할 수 있었다.
Knowledge Base는 re:Invent 2023에서 같이 출시된 Agents for Amazon Bedrock과 연계하여 내부 지식 기반뿐만 아니라 실시간 외부 지식 기반과 연동한 작업을 처리할 수도 있는 강력한 기능이다. 앞으로도 더 많은 데이터베이스와 임베딩 모델이 추가되어 Gen AI 생태계를 더욱 확장할 수 있기를 기원한다.

--

--