Agents
매니지드 에이전트로 고객센터 봇 빠르게 구축
Bedrock Agents
매니지드 에이전트로 고객센터 봇 빠르게 구축
완전관리형 에이전트 오케스트레이션
코드 없이 에이전트를 구축·배포·운영하는 관리형 서비스
개요와 포지셔닝
3요소 구성 · ReAct 오케스트레이션 · AgentCore 비교
Bedrock Agents 3요소
코드 없이 선언만으로 에이전트를 구성하는 관리형 서비스
Action Group
Lambda 또는 Return Control로 외부 시스템 연동. API 스키마 기반 도구 정의
Knowledge Base
RAG 파이프라인 자동 연결. 검색→증강→생성을 선언만으로 구성
프롬프트 4단계
Pre/Orchestration/Knowledge Base/Post — 각 단계를 독립 오버라이드하여 행동 제어
행동은 Action Group, 지식은 Knowledge Base, 통제는 프롬프트 4단계가 맡습니다 — 이 3요소 선언이 에이전트의 전부입니다.
ReAct 오케스트레이션 흐름
입력 검증 → ReAct 루프 → 응답 후처리로 이어지는 3단계 파이프라인
-
1
Pre-processing
사용자 입력 검증 · 카테고리 분류 · 안전성 판단
-
2
Orchestration
모델이 Action Group 또는 Knowledge Base를 선택하여 실행 (ReAct 루프)
-
3
Post-processing
최종 응답 포맷팅 · 필터링 · Citation 추가
가운데 Orchestration이 ReAct 루프의 본체입니다 — 도구 선택과 반복 판단이 모두 이 단계에서 일어납니다.
Classic vs AgentCore
Bedrock Agents Classic은 유지보수 모드 — 새 프로젝트는 AgentCore
Bedrock Agents Classic
- 콘솔/API로 선언적 구성
- Action Group + Knowledge Base 기반
- 코드 작성 불필요
- 2026-07-30부터 신규 고객 차단
기존 서비스를 유지보수할 때. 신규 기능 추가 없음.
AgentCore Harness
- Classic의 1:1 대체 (GA)
- CreateHarness + InvokeHarness 2 API
- 모델·도구·메모리·가드레일 선언적
- agentcore export → Strands 코드 전환
새 프로젝트에 권장. 모든 AgentCore GA 리전에서 사용 가능.
2026-07-30부터 Classic은 신규 고객이 차단됩니다 — 새 프로젝트는 AgentCore Harness로 시작합니다.
Action Group
Lambda · Return Control · 스키마 설계 · description 패턴
Action Group
에이전트가 외부 시스템과 연결되는 통로
세 가지 선택으로 완성된다
어디서 실행할지, 어떤 스키마로 정의할지, 설명을 어떻게 쓸지 — Action Group 설계의 전부입니다.
- 실행 유형 — Lambda vs Return Control
- 스키마 — Function Detail vs OpenAPI
- description — 언제 · 무엇을 · 무엇이
에이전트의 행동 반경은 Action Group이 결정합니다 — 실행 위치와 스키마를 먼저 선택하고, 설명 문장으로 라우팅 품질을 끌어올립니다.
실행 유형 2가지
서버에서 실행할지, 클라이언트로 제어를 반환할지 선택
Lambda 실행
- 에이전트가 Lambda를 직접 호출
- IAM 역할로 격리
- 서버사이드 처리 — 백엔드 API/DB에 적합
- 약간의 콜드스타트 지연
Bedrock이 연결된 Lambda를 자동 호출하고 결과를 컨텍스트에 통합합니다.
Return Control
- 에이전트는 "결정"만, "실행"은 앱이
- invocationInputs를 호출 앱에 전달
- 클라이언트 SDK/UI 액션에 적합
- 앱이 결과를 returnControlResults로 반환
에이전트의 판단력은 쓰되, 실행 권한은 앱이 유지합니다.
기준은 실행 권한의 위치입니다 — 백엔드 API·DB 처리는 Lambda, 앱이 실행을 쥐어야 하면 Return Control을 선택합니다.
스키마 2종 선택
Function Detail(단순) vs OpenAPI(대규모) — 규모에 따른 선택 기준
| 기준 | Function Detail | OpenAPI Schema |
|---|---|---|
| 형식 | Bedrock 전용 (name/desc/params) | 업계 표준 Swagger |
| 편집 | ✓ 콘솔에서 직접 | JSON/YAML 파일 업로드 |
| 규모 | 소규모 도구 (1~5개) | ✓ 대규모 REST API |
| API GW 연동 | 별도 구현 | ✓ API Gateway 직접 매핑 |
도구 1~5개의 소규모는 Function Detail로 충분하고, 대규모 REST API는 OpenAPI Schema로 관리합니다.
좋은 description 패턴
description 품질이 도구 라우팅 정확도를 결정 — 3요소 명시
필수 3요소
정의
- 언제 — 이 도구를 호출해야 하는 조건
- 무엇을 — 입력 파라미터가 뭔지
- 무엇이 — 반환되는 결과가 뭔지
예시로 대응해 보기
get_order_status
- 언제 — "사용자의 주문 상태를 조회합니다"
- 무엇을 — "주문번호(order_id)가 주어지면"
- 무엇이 — "배송 상태·예상 도착일·현재 위치를 반환"
{
"name": "get_order_status",
"description": "사용자의 주문 상태를 조회합니다. 주문번호(order_id)가 주어지면 배송 상태, 예상 도착일, 현재 위치를 반환합니다."
}
Knowledge Bases와 프롬프트
GENERATE · RETRIEVE · 4단계 프롬프트 · 역할 정의
Knowledge Base와 프롬프트
지식은 선언으로 연결하고, 행동은 프롬프트로 제어
연결은 선언, 제어는 프롬프트
Knowledge Base를 연결하면 RAG 파이프라인이 자동으로 동작하고, 세밀한 행동은 4단계 프롬프트 오버라이드로 다듬습니다.
- Knowledge Base 모드 — GENERATE vs RETRIEVE
- 자동 RAG — 쿼리 생성 → 검색 → 답변
- 프롬프트 4단계 — Pre · Orchestration · Knowledge Base · Post
Knowledge Base 연결은 선언 한 번으로 끝나고, 에이전트의 역할·규칙·톤은 4단계 프롬프트에서 정의합니다.
Knowledge Base 연동 모드 2가지
답변을 생성할지, 원문만 반환할지 — 후처리 방식에 따라 선택
GENERATE (기본)
- Knowledge Base 검색 → LLM이 답변 생성
- 사용자에게 자연어 답변 전달
- Citation 자동 포함
- 일반적인 Q&A에 적합
에이전트가 Knowledge Base를 검색하고 답변까지 완성합니다.
RETRIEVE
- Knowledge Base 검색 결과만 반환 (원문)
- LLM 생성 없음
- 앱이 직접 결과 가공
- 커스텀 후처리에 적합
앱이 검색 결과를 직접 가공하거나 다른 시스템에 전달할 때.
답변까지 맡기려면 GENERATE, 검색 결과를 앱이 직접 가공하려면 RETRIEVE를 선택합니다.
Knowledge Base 연동 시 자동 RAG 구성
Knowledge Base를 연결하면 쿼리 생성→벡터 검색→답변 생성이 자동으로 동작
-
1
사용자 질문
에이전트가 Knowledge Base 호출 필요 여부 판단
-
2
쿼리 생성
대화 맥락에서 검색 쿼리 자동 생성 (원문 그대로 검색하지 않음)
-
3
벡터 검색
Knowledge Base의 벡터 스토어에서 관련 청크 검색
-
4
답변 생성
검색 결과 + 시스템 프롬프트로 최종 답변 (Citation 포함)
검색 쿼리는 원문 그대로가 아니라 대화 맥락에서 자동 생성됩니다 — 선언만으로 검색·증강·생성 파이프라인이 완성됩니다.
4단계 프롬프트 오버라이드
각 단계를 개별적으로 커스터마이징하여 에이전트 행동 제어
-
1
Pre-processing
입력 분류·안전 검사. "이 질문이 범위 안인가?" — 커스텀 분류 로직 삽입
-
2
Orchestration
도구 선택·실행 판단. 역할·페르소나·규칙·도구 우선순위 정의 — ReAct 루프의 핵심
-
3
Knowledge Base
Knowledge Base 검색 시 사용. 검색 쿼리 스타일과 답변 톤 제어
-
4
Post-processing
최종 응답 포맷팅·필터링·요약 — 출력 형식 강제
역할·페르소나·도구 우선순위는 Orchestration 프롬프트에서 정의합니다 — ReAct 루프를 움직이는 핵심 단계입니다.
세션과 Trace 디버깅
sessionId · Attributes · Trace 주요 4종 · 오류 진단
세션과 Trace
대화는 세션으로 잇고, 판단 과정은 Trace로 열어보기
"왜 이 도구를 선택했나"에 Trace가 답한다
sessionId가 멀티턴 대화를 유지하고, Trace가 에이전트 실행의 각 단계를 보여줍니다.
- sessionId — 멀티턴 컨텍스트 유지
- sessionAttributes — 턴 간 상태 전달
- Trace 주요 4종 — Pre · Orchestration · Post · Failure
도구 선택의 이유는 추측하지 않습니다 — OrchestrationTrace의 modelInvocationInput에서 모델에 전달된 실제 프롬프트를 확인합니다.
세션 기반 대화 관리
sessionId로 멀티턴 컨텍스트를 유지하고, Attributes로 상태를 전달
sessionId
동일 ID = 동일 대화. 새 ID = 새 대화. TTL 기반 자동 만료
sessionAttributes
키-값 상태를 세션에 저장 — 프롬프트 템플릿에서 참조 가능, 턴 간 유지
한계와 대안
세션 내 단기 기억에 한정 — 세션 간 장기 기억은 AgentCore Memory로 해결
멀티턴은 sessionId 재사용으로, 턴 간 상태는 sessionAttributes로 유지합니다 — 세션을 넘는 장기 기억은 AgentCore Memory의 영역입니다.
Trace 주요 4종
에이전트 실행 단계를 추적하는 트레이스 — "왜 이 도구를 선택했는지" 확인
콘솔 Test 창 · Show trace — OrchestrationTrace 페이로드
-
1
PreProcessingTrace
입력 분류 결과 · 안전 판단 · 카테고리 태그
-
2
OrchestrationTrace
모델 추론 · 도구 선택 이유 · 실행 결과 · modelInvocationInput
-
3
PostProcessingTrace
최종 응답 가공 과정 · 필터링 결과
-
4
FailureTrace
오류 발생 시 원인 · 위치 · 에러 메시지
디버깅의 중심은 OrchestrationTrace입니다 — 모델 추론과 도구 선택 이유가 전부 이 단계에 기록됩니다. Guardrails 연결 시 guardrailTrace 같은 추가 유형도 반환됩니다.
도구 선택 오류 진단
OrchestrationTrace의 modelInvocationInput으로 실제 프롬프트를 확인하여 진단
| 증상 | 원인 | 해결 |
|---|---|---|
| 엉뚱한 도구 호출 | description이 비슷함 | 차별화된 설명 작성 ("언제" 조건 명시) |
| 도구 미호출 | description에 트리거 키워드 부재 | 사용자 의도 키워드 추가 |
| 파라미터 누락 | required 미설정 | 필수 파라미터에 required: true 명시 |
| 무한 루프 | 종료 조건 없음 | 프롬프트에 종료 조건 명시 + Trace로 반복 감시 |
네 가지 증상 중 셋의 해결책이 스키마 설명 개선입니다 — 도구 오류의 대부분은 description에서 시작됩니다.
멀티에이전트와 마이그레이션
Supervisor · 네이티브 한계 · Alias · AgentCore 전환
멀티에이전트와 마이그레이션
협업의 가능성과 한계, 그리고 AgentCore 전환 경로
Supervisor에서 AgentCore까지
Supervisor 모드로 협업을 구성하되 한계를 확인하고, Alias 배포를 거쳐 AgentCore Harness 전환으로 마무리합니다.
- Supervisor 모드 — 하위 에이전트 위임
- Alias · Versioning — 안전 배포와 롤백
- agentcore export — Strands 코드 전환
Classic은 유지보수 모드입니다 — 복잡한 멀티에이전트와 새 프로젝트는 AgentCore Harness가 다음 단계입니다.
Supervisor 모드
상위 에이전트가 하위 협력 에이전트에 태스크를 위임
Supervisor가 태스크를 분해·위임·통합합니다 — 하위 협력 에이전트는 사전 등록이 필요합니다.
네이티브 멀티에이전트 한계
복잡한 멀티에이전트는 AgentCore Runtime + Strands Graph/Swarm 권장
| 항목 | 지원 | 한계 |
|---|---|---|
| Supervisor 모드 | ✓ | 고정된 위임 구조 — 유연한 토폴로지 불가 |
| 협력 에이전트 | ✓ 사전 등록 | 동적 추가 불가 |
| 복잡한 오케스트레이션 | △ | 조건 분기·루프 등 세밀한 제어 어려움 |
| 에이전트 간 상태 공유 | ✗ | sessionAttributes로 우회 |
| 신규 기능 업데이트 | ✗ | Classic은 신규 고객 차단 — 투자 중단 |
유연한 토폴로지·동적 구성·상태 공유가 필요하면 AgentCore Runtime + Strands Graph/Swarm으로 넘어갑니다.
배포와 마이그레이션
Alias·Versioning으로 안전 배포, AgentCore Harness로 전환
-
1
Draft 편집
에이전트 설정 변경 (프롬프트, Action Group)
-
2
Version 생성
현재 Draft를 스냅샷으로 고정
-
3
Alias 연결
프로덕션 Alias가 특정 Version을 가리킴 — 롤백 가능
-
4
AgentCore 전환
agentcore export → Strands 코드. Harness가 1:1 대체
Draft → Version → Alias로 롤백 가능한 배포를 유지하고, 전환은 agentcore export 한 번으로 Strands 코드를 얻습니다.
Classic에서 AgentCore로
선언적 구조는 그대로 — 새 프로젝트는 AgentCore Harness 시작
Classic을 이해하면, AgentCore 전환이 명확해진다
Action Group + Knowledge Base + 프롬프트 4단계 — 선언적 에이전트의 구조는 그대로, 새 프로젝트는 AgentCore Harness로 시작합니다.
- 3요소 선언 구성
- Trace로 디버깅
- agentcore export → Strands 전환
기존 Bedrock Agent 분석과 AgentCore 전환
기존 Classic 에이전트 구성을 분석하고 AgentCore로 전환합니다 (신규 구축은 AgentCore 사용)
학습 목표
- 기존 에이전트의 Action Group·Knowledge Base 구성 분석
- Trace로 오케스트레이션 과정 이해
- agentcore export로 Strands 코드 전환
- Harness로 배포해 동일 동작 확인
Action Group + Knowledge Base + 프롬프트 = 선언적 에이전트. 다음 단계는 AgentCore Harness.