Bedrock 기본 연동
AWS SDK (python) 연동
작업 전 필수 조건
- AWS 계정이 있고, Bedrock에 필요한 권한이 있는 역할에 액세스 권한 필요
- 루트 계정으로는 작업이 안됨. 사용자 생성 필요 (사용자 생성 및 Access Key 발급은 여기로)
- IAM 사용자에 대한 액세스 키 필요
- AWS CLI 사용자 프로필 구성 필요 (사용자 프로필 등록은 여기로!!)
이 글의 "생성 실패" 는 루트 계정으로 작업을 진행해서 실패한 케이스이다.
해당 부분은 그러려니 하고 넘어가주면 된다.
기본 SDK 설치
pip install boto3
기초 모델 나열
# Use the ListFoundationModels API to show the models that are available in &BR; in a given region.
import boto3
# Create an &BR; client in the ®ion-us-east-1; Region.
bedrock = boto3.client(
service_name="bedrock",
region_name="ap-southeast-2"
)
print(bedrock.list_foundation_models())
검색 증강 생성(RAG)
검색 증강 생성이란?
RetrieveAndGenerate 의 줄임말로 "RAG" 이라고 부른다.
대규모 언어 모델(LLM)의 출력을 최적화하여 응답을 생성하기 전에 학습 데이터 소스 외부의 신뢰할 수 있는 지식 베이스를 참조하도록 하는 프로세스.
검색 증강 생성이 중요한 이유는?
LLM은 지능형 챗봇 및 기타 자연어 처리(NLP) 애플리케이션을 지원하는 핵심 AI 기술.
신뢰할 수 있는 지식 소스를 참조하여 다양한 답변을 해주는 봇을 만드는 것.
검색 증강 생성의 장점?
| 비용의 절감 | 챗봇은 일반적으로 파운데이션 모델을 사용하여 개발을 진행한다. (파운데이션 모델은 광범위한 일반화 데이터와 레이블이 지정되지 않은 데이터에 대해 훈련되는 API세스 가능 LLM) 조직, 도메인별로 정보를 위하여 재학습을 시키는 비용이 많이 발생하게 된다. 이런 단점을 보완하기 위하여 지식 Base를 기반으로 답변을 추출하는 RAG의 사용으로 비용이 감소한다 |
| 최신 정보 | 파운데이션 모델은 최신 정보가 변경되면 새로 학습을 진행해야한다. 그렇기때문에 거의 실시간으로 작동하기는 힘들다. 그에반해 사용자가 지식 Base를 업데이트 하면 최신 정보를 가지고 AI를 사용할 수 있기 때문에 준 실시간으로 최신 정보를 활용할 수 있다. |
| 사용자 신뢰 강화 | 일반적인 AI의 단점으로 거짓 답변이 있다. RAG은 답변을 도출할때 응답 정보의 위치를 사용자에게 같이 보여줄 수 있기 때문에 신뢰가 강화된다 |
검색 증강 생성의 단점?
| 거짓 답변 | AI가 답할 수 없는 질문이 들어오면 거짓 답변을 하게 된다. (ex. 세종대왕 맥북던짐 사건) |
| 최신 정보 X | 최신 정보를 갱신하려면 재학습 과정이 필요하기 때문에 실시간으로 최신정보에 대한 답변을 받을 수 없다. |
| 신뢰할 수 없는 출처 | AI의 경우 출처가 명확하지 않기때문에 해당 답변이 맞는지 알 수가 없으므로, 신뢰도가 떨어지게 된다. |
검색 증강 생성의 작동 방식
1. 지식 저장소에 외부 데이터 저장
(기존 LLM모델 외에 있는 데이터를 외부 데이터라고 한다)
2. LLM 프롬프트 확장
(사용자가 원하는 정보를 정확하게 찾기 위하여 프롬프트를 확장하여 커스터마아징 작업을 진행)

일단 이정도로만 알아보고.... RAG를 직접 사용해보자.
RAG 생성
Bedrock > 오케스트레이션 > 지식 기반 > 지식 기반 생성

지식 기반 세부 정보 작성


데이터 소스 설정
앞에서 다양한 데이터소스를 설정할 수 있지만 나는 s3를 사용해서 작업하기로함
정적 소스들이 많이 올라가기도 하고, 벡터 DB는 아직 셋팅되지 않았고, PDF로만 우선 진행해볼 예정
s3 버킷은 기본으로 설정해서 진행 (기본 S3는 여기로)


임베딩 모델 선택 및 벡터 저장소 구성
내가 제공할 언어 및 입출력들을 한국어로 할 예정이기 때문에 Embed Multilingual v3로 선택

검토 및 생성
최종적으로 본인이 입력한 정보들이 맞는지 확인 및 생성
생성 완료
무수히 많은 권한의 반발과 싸워서 이겨냈다..

조금만 기다리면 아래와같은 지식 기반 영역이 나오게 된다.

마치며
일전에 S3작업을 진행하면서 AWS 권한을 살짝 건드려본 적이 있다.
그 당시에도 해당 작업을 하려면 어떤 권한들이 필요한지에 대한 정보를 찾는게 너무 방대하였었다.
(aws에서 사용자가 원하는 정보 검색 및 관련 문서들을 찾아가기 수월하도록 Bedrock 사용해서 만들어줬으면 좋겠다. 이미 있으려나?)
그래서 하나하나 설정하지 않고 S3 FullAccess의 권한을 부여해서 작업을 하였었다.
이번에 Bedrock RAG를 구성하면서도 다시 한번 AWS의 정책을 다시 한번 더 공부해야겠다 는 생각이 든 계기였다.
다음글부터 아래와 같은 작업들을 진행해보면 될 것 같다.
- 외부 데이터 입력(PDF)
- 웹 UI에서 원하는 정보를 잘 찾는지 확인
- AWS CLI를 통하여 로컬 PC에서 CLI로 연동
- python, java SDK를 사용하여 Bedrock 사용
- 프롬프트 튜닝
되도록 작업은 위 내용들까지 다 진행 할 예정이지만 중간에 비용 이슈가 발생하면 고민을 좀 해봐야 할 것 같다...😂
아직 가야할 길이 멀다!!!!! 지치지말고 계속 가서 끝을 봐보자!!!
무수히 많은 권한 실패 (참고)
실패 1

IAM 사용자 계정으로 변경
IAM 사용자 계정을 만들어서 다시 작업을 진행해보자.
2024.07.16 - [infra/AWS] - AWS IAM 사용자 추가
여기서 필요한 부분은 아래와 같다.
- 사용자 계정으로 로그인
- 사용자 계정에 Bedrock, S3 권한 필요
RAG 재생성
사용자 정보를 바꿔서 위에서 진행했던 내용을 동일하게 진행
- 성공적으로 되는 것 같지만, 뒤에 빨간색은 왠지 불안하다..

생성 실패2
내용을 보아하니 해당 사용자에 "CreateAccessPolicy" 가 없는 것 같다. 해당 권한을 부여한 후 다시 진행.

기존에 있던 권한으로 작업을 완료하고 이것저것 추가해봤는데 해결되지 않아서 인라인으로 작성하였다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"aoss:*",
"es:*"
],
"Resource": [
"*",
"arn:aws:iam::032376727164:user/Bedrock"
]
}
]
}
생성 실패 3
"CreateAccessPolicy" 는 해결되었지만 다른 문제가 나왔다.

구글의 힘을 빌려 아래와 같이 코드를 수정하였다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"aoss:*",
"es:*",
"iam:CreateServiceLinkedRole"
],
"Resource": [
"*",
"arn:aws:iam::032376727164:user/Bedrock"
]
}
]
}
생성 실패 4
IAM 권한중에 "CreateRole" 부분이 누락되어 있는 것 같다.
원래는 하나하나 다 주는게 맞을 것 같지만 테스트 용도로 진행할 예정이기 때문에 모든 권한들을 다 부여하였다.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"aoss:*",
"es:*",
"iam:*"
],
"Resource": [
"*",
"arn:aws:iam::032376727164:user/Bedrock"
]
}
]
}
필요한 권한
- OpenSearch Serverless
- OpenSearch Service
- IAM
refs
가이드라인 : https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api-ex-python.html
Run example Amazon Bedrock API requests through the AWS SDK for Python (Boto3) - Amazon Bedrock
Run example Amazon Bedrock API requests through the AWS SDK for Python (Boto3) This section guides you through trying out some common operations in Amazon Bedrock to test that your permissions and authentication are set up properly. Before you run the foll
docs.aws.amazon.com
RAG란? : https://aws.amazon.com/ko/what-is/retrieval-augmented-generation/
RAG란? - 검색 증강 생성 설명 - AWS
검색-증강 생성이란 무엇인가요? RAG(Retrieval-Augmented Generation)는 대규모 언어 모델의 출력을 최적화하여 응답을 생성하기 전에 학습 데이터 소스 외부의 신뢰할 수 있는 지식 베이스를 참조하도록
aws.amazon.com
RAG 기본 설명 : https://docs.aws.amazon.com/ko_kr/bedrock/latest/userguide/knowledge-base.html
Amazon Bedrock용 지식 베이스 - Amazon Bedrock
이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.
docs.aws.amazon.com
IAM 권한 오류 : https://jinmay.github.io/2018/12/26/aws/aws-eb-createservicelinkedrole-error/
CreateServiceLinkedRole 에러 해결하기
eb-cli를 통해 deploy할 때 CreateServiceLinkedRole 에러 해결하기AWS의 웹 콘솔을 벗어나 EB-CLI 환경에서 배포하던 도중에 CreateServiceLinkedRole 이라는 에러가 발생했다. 과정중에 잘못된게 있나 싶어서 테스
jinmay.github.io
'infra > AWS' 카테고리의 다른 글
| 생성형 AI 테스트 (3) - RAG 연동 (1) | 2024.07.25 |
|---|---|
| AWS IAM 사용자 추가 및 AccessKey 발급 (0) | 2024.07.16 |
| AWS CLI 사용자 프로필 등록 (0) | 2024.07.15 |
| AWS S3 버킷 만들기 (0) | 2024.07.15 |
| 생성형 AI 테스트 (1) - Bedrock (0) | 2024.07.15 |