19. 학습의 단계_AWS Bedrock_ 두번째 강의 -14일차 (끝) -
2025년 4월 29일
- Bedrock 두번째 강의 수강 시작.
-------
1단계. 학습의 단계
1. AWS Bedrock
첫번째 강의) Building Multi-Agentic AI Workflows on AWS Bedrock: 수강완료 (2025/4/13~04/16)
두번째 강의) Learn Agentic AI Basics, Amazon Bedrock Multi-Agent Framework, Build 2 Use Cases- Hotel Booking & Multi-Agent Travel App: 수강시작 (2025/4/29~)
I. 수강 전 기대
첫번째 강의에서 아쉬웠던 Hands-on을 조금 더 해볼 수 있을 것으로 기대함. 커리큘럼을 보니 간단하지만 Bedrock에서 만든 multi agent를 프론트로 배포하는 것도 배울 수 있는 것으로 보임.
II. 수업내용
1일차(4/29): 앞으로 배울 내용 개괄 + AI Agent 5가지 요소 (Planning, Tools & Actions, Memory, Guardrails, Agent Communication)
2일차(4/30): 어제 배운 AI Agent의 기능 중 첫번째 Planning에 관한 Demo ~ Agent Communication
3일차(5/1): Deep dive - Amazon Bedrock Agents (Agent creation 및 setting)
4일차(5/6): How do Agents work? ~ Use Case 1 - Hotel Booking Agent
[Use Case 1 - Single Agent]
5일차(5/7): Use Case 1 - Hotel Booking Agent ~ Agent Creation
6일차(5/14): Agent Integration with Knowledge Bases for Room Information ~ Hotel Room Availability
7일차(5/19): Hotel Room Booking - DynamoDB ~ Hotel Room Booking - Agent & Lambda & Action Group Integration
8일차(5/20): Hotel Room Booking - Agent & Lambda & Action Group Integration ~ Final Demo
8일차(5/20): Hotel Room Booking - Agent & Lambda & Action Group Integration ~ Final Demo
9일차(5/22): Frontend Deployment to EC2 Server ~ Adding application load balancer to EC2
[Use Case 2 - Multi-Agent]
10일차(6/2): Business Use Case 2 (Multi Agent Orchestration)
11일차(6/3): Business Use Case 2 (Multi Agent Orchestration) - 마무리 -
[CrewAI]
12일차(6/5): CrewAI
[Refresher]
13일차(6/6): Generative AI, Bedrock, Prompt Engineering (Basics, Advanced), RAG and Bedrock Knowledge Bases
14일차(6/7-6/11): Prompt Engineering Techniques, Python, Lambda, Boto3 - 끝 -
1) 내가 사용하려는 FM에 대한 이해도가 높아야 하고
2) FM별로 대표적으로 사용하는 Template을 숙지하고 있어야 하고
마지막으로 3) 목적과 작업의 난이도에 따라 프롬프트를 잘 작성해야한다.
일반적으로 알고 있는 프롬프트 기술은 Zero-Shot 프롬프트로서, 한 줄 정도의 간단한 작업을 요청할 때 주로 사용하는 프롬프트이다. 예를 들어, 고객사에 신규 부품 xxx를 100개 주문하기 위한 이메일을 비즈니스 이메일 문체로 작성해줘.와 같이 단순한 요청이다.
이 외에도 One-Shot Prompt와 Few-Shot Prompt 기술이 있는데,
먼저 One-Shot Prompt는 명확한 예시를 제시하고, AI가 해당 예시를 참조하여 답을 제시하도록 하는 것이다. 이렇게 되면 AI는 사용자가 원하는 답변의 문체와 길이, 성격을 더 잘 이해할 수 있다.
Few-Shot Prompt는 원샷과 비슷하지만 더 많은 예시들을 제공함으로써 결과물의 퀄리티를 더 잘 통제할 수 있도록 하는 방식이다. AI가 생성해야하는 결과물의 스펙트럼이 너무 창의적이지 않고 기존에 존재하는 답변들과 최대한 유사한 틀 안에서 결과를 도출하도록 하는데 이점이 있는 방식이다.
두번째는 Python 에 간략한 강의다. *강의에서는 이처럼 짤막한 강의를 refresher라고 한다.
Bedrock을 배우는 과정에서 막혔던 부분은 코딩이다. Bedrock Agent가 Tool을 활용하기 위해서는 거의 대부분 Lambda를 다룰 수 있어야 하고, 이 때 필요한 부분이 코딩이다. 두 개의 강의 모두 Lambda 작성 시 파이썬을 활용하였다. 곧장 Bedrock을 활용하지 못하게끔 하는 장벽 역시 코딩이다. 이번 섹션은 내가 어렵게 느끼고 있는 파이썬, 즉 코딩에 관한 내용이다.
파이썬에서 흥미로운 Data Type 중 하나는 Dictionary 이었다.
x={"name": "John", "age":36) 과 같은 형식이 Dictionary Type이다.
이와 유사한 타입으로 Array 타입과 같은 List가 있지만, Dictionary는 각 항목의 제목과 값을 Array 형식으로 지정할 수 있다는 차이점이 존재한다.
Dictionary Type에서 또 흥미로운 점은 Nest가 가능하다는 부분이다. 예를 들어, response = {1:'Python', 2:{'books':'arch', 'aws':'Lambda'}}와 같이 Dictionary 안에 또 다른 Dictionary가 포함될 수 있다는 것을 의미한다.
Dictionary의 값을 출력하는 방법은 다음과 같다.
response = {1: 'Rahul', 2: 'John', 3: 'Joy'} 의 경우, print(response[2]) 와 같이 출력한다. (출력 값은 John)
Nested Dictionary의 경우, response = {1:'Python', 2:{'books':'arch', 'aws':'Lambda'}}의 경우, print(response[2]['aws'])로 출력할 수 있다. (출력 값은 Lambda)
List Type을 출력하는 방식도 낯설다.
list = [1, 4, 'For', 6, 'Anisha'] 의 경우, print(list[0:3:1])와 같이 print(list[start:stop:step]) 형태로 list type의 값을 출력할 수 있다. (출력 값은 [1, 4, 'For'])
세번째는 Lambda에 관한 내용이다.
Lambda는 내가 작성한 코드에 대해 server를 할당하거나 관리하지 않고도 코드를 수행할 수 있도록 한 compute service이다. (server 뿐 아니라, OS management, capacity provisioning 그리고 자동 스케일 업/다운, 로그 기록을 남기는 등의 작업이 가능하다.)
Lambda를 사용하는 방식에는 총 3가지가 있다.
1. 동기 (push): API 콜을 통해서 Lambda가 동작하도록 하는 방식
2. 비동기 (event): 특정 이벤트가 발생했을 때 비동기적으로 (즉, 사용자가 호출한 값을 대기하지 않고 백단에서) 동작하도록 하는 방식
3. Stream (poll-based): 실시간 데이터를 다루는 방식으로 Lambda 함수가 스트리밍 데이터 소스 (DynamoDB 등)에서 데이터를 주기적으로 가져와서 처리하는 방식
- 스트림 방식은 주로 이벤트 데이터가 지속적으로 생성되는 환경에서 사용됨.
- Lambda가 비동기적으로 데이터를 polling 하여 처리함.
- 데이터가 스트림에 추가될 때마다 Lambda가 이를 감지하고 처리함. 이러한 부분은 event-driven과 유사함.
- Stream 방식이 Event-driven과 다른 부분은, Event-driven은 이벤트가 발생하게 되면 AWS가 Lambda에게 즉각적으로 Push하여 동작하도록 하는데 반해서, Stream은 Lambda가 주기적으로 데이터 스트림을 Pull해서 보다 적극적으로 데이터를 확인하는 방식이라는 것이다. 그러나 Stream 방식은 일종의 Event-driven 방식으로 볼 수 있으며, AWS 문서에서도 Stream 모델을 Event-driven 아키텍터의 일부로서 분류한다.
Boto3는 AWS의 다양한 서비스들을 Python 코드를 사용하여 쉽게 조작할 수 있도록 도와주는 라이브러리이다. (Python SDK)
Boto3가 없다면 Python 개발자는 복잡한 HTTP 요청 및 인증 과정을 계속 거쳐야하는데 boto3를 통해서 간단한 코드 몇줄로 AWS 리소스를 관리, 생성, 삭제할 수 있게 된다.
Boto3의 주요 인터페이스 두 가지는 Client와 Resourse이다.
1. 클라이언트: AWS API와 직접적으로 상호작용하는 인터페이스이며, 예를 들어 s3_client = boto3.client('s3')로 S3 버킷 파일을 가져올 수 있다.
2. 리소스: 객체 지향적으로 AWS 리소스를 다루는 인터페이스이며 예를 들어 s3_resource = boto3.resource('s3')로 버킷 객체를 컨트롤 할 수 있다.
이로써 두번째 Bedrock Agent 강의를 모두 수강했다. 생각보다 더 오랜 시간이 걸린 강의였지만, 단순히 practice만 있는 강의가 아니라, Multi Agent를 이해하기 위한 여러 이론적인 배경, 연관 개념들을 두루 섭렵하도록 도와준 좋은 강의였다.
이제 배움과 학습 그 자체에 목적을 두기보다는, 무언가를 만드는 단계로 넘어가야 겠다는 생각이 든다.
무언가를 더 만들기 위해서는 다음 주제 n8n, mcp를 톺아볼 필요가 있겠다. 비록 Bedrock 강의만으로는 의미있는 Multi Agent를 만들어낼 능력치를 얻지 못했지만, 이제 multi agent를 다룰 수 있는 시점이 머지 않았다는 것을 느낀다.
댓글
댓글 쓰기