

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 자습서: 간단한 Amazon Bedrock 에이전트 구축
<a name="agent-tutorial"></a>

이 자습서에서는 AWS Management Console을 사용하여 간단한 Amazon Bedrock 에이전트를 생성하고 구성하는 방법을 안내합니다. Lambda 함수를 간접 호출하여 현재 날짜 및 시간에 대한 사용자 쿼리에 응답할 수 있는 에이전트를 생성하는 방법을 알아봅니다.

이 자습서에서 배울 내용은 다음과 같습니다.

1. Lambda 함수 생성 - 에이전트가 간접 호출할 때 현재 날짜와 시간을 반환하는 Python 함수를 구축합니다.

1. Amazon Bedrock 에이전트 생성 - Amazon Bedrock 콘솔에서 에이전트를 설정하고 날짜 및 시간 쿼리를 처리하는 지침을 사용하여 에이전트를 구성합니다.

1. 에이전트 테스트 - 내장된 테스트 인터페이스를 사용하여 에이전트가 날짜 및 시간 요청에 올바르게 응답할 수 있는지 확인합니다.

1. 별칭을 사용하여 에이전트 배포 - 에이전트 버전을 생성하고 별칭과 함께 배포하여 사용할 수 있도록 합니다.

1. Python 코드에서 에이전트 직접 호출 - AWS SDK for Python (Boto)을 사용하여 에이전트와 프로그래밍 방식으로 상호 작용하는 방법을 알아봅니다.

1. 리소스 정리 - 불필요한 요금이 발생하지 않도록 이 자습서 중에 생성된 AWS 리소스를 제거합니다.

이 자습서를 마치면 날짜 및 시간 정보에 대한 자연어 요청을 이해하고 Lambda 함수의 정확한 데이터로 응답할 수 있는 Amazon Bedrock 에이전트가 제공됩니다.

이 자습서는 AWS 설명서 [GitHub 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/python/example_code/bedrock-agent/scenario_get_started_with_agents.py)의 에이전트 코드 예제를 기반으로 합니다.

**Topics**
+ [사전 조건](agent-tutorial-prereq.md)
+ [1단계: Lambda 함수 생성](agent-tutorial-step1.md)
+ [2단계: Amazon Bedrock 에이전트 생성](agent-tutorial-step2.md)
+ [3단계: 에이전트 테스트](agent-tutorial-step3.md)
+ [4단계: 별칭을 사용하여 에이전트 배포](agent-tutorial-step4.md)
+ [5단계: Python 코드에서 에이전트 직접 호출](agent-tutorial-step5.md)
+ [6단계: 리소스 정리](agent-tutorial-step6.md)
+ [추가 리소스](agent-tutorial-resources.md)

# 사전 조건
<a name="agent-tutorial-prereq"></a>

이 튜토리얼을 시작하기 전에 다음 사항을 확인해야 합니다.
+ 다음 관리형 정책을 사용하는 AWS 계정:
  + [AmazonBedrockFullAccess](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonBedrockFullAccess)
  + [AWSLambda\$1FullAccess](https://docs.aws.amazon.com/lambda/latest/dg/security-iam-awsmanpol.html#lambda-security-iam-awsmanpol-AWSLambda_FullAccess)
  + [IAMFullAccess](aws-managed-policy/latest/reference/IAMFullAccess.html)
**중요**  
이러한 권한을 통해 이 자습서와 관련이 없는 기타 태스크를 실행할 수 있습니다. 프로덕션 환경에서는 사용자가 애플리케이션을 실행하는 데 필요한 권한만 할당해야 합니다.
+ IAM 역할 및 권한에 대한 기본 이해([IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html))
+ AWS Lambda 함수에 대한 지식([Lambda 개발자 안내서](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html))

# 1단계: Lambda 함수 생성
<a name="agent-tutorial-step1"></a>

먼저 에이전트가 작업을 수행하기 위해 간접 호출할 Lambda 함수를 생성합니다. 이 절차에서는 간접 호출 시 현재 날짜 및 시간을 반환하는 Python Lambda 함수를 생성합니다. 기본 권한으로 함수를 설정하고, Amazon Bedrock 에이전트의 요청을 처리하는 데 필요한 코드를 추가하고, 에이전트에 연결할 준비가 되도록 함수를 배포합니다.

자세한 내용은 *AWS Lambda 개발자 안내서*의 [첫 Lambda 함수 생성](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)을 참조하세요.

**Lambda 함수 생성**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)에서 Lambda 콘솔을 엽니다.

1. **함수 생성**을 선택합니다.

1. **새로 작성**을 선택합니다.

1. **기본 정보** 섹션에서:
   + **함수 이름**에 함수 이름을 입력합니다(예: `DateTimeFunction`). 함수의 이름을 기록해 둡니다. [2단계: Amazon Bedrock 에이전트 생성](agent-tutorial-step2.md)의 15단계에서 필요합니다.
   + **런타임**에서 **Python 3.9**(또는 원하는 버전)를 선택합니다.
   + **아키텍처**의 경우 변경하지 않고 그대로 둡니다.
   + **권한**에서 **기본 실행 역할 변경**을 선택한 다음, **기본 Lambda 권한으로 새 역할 생성**을 선택합니다.

1. **함수 생성**을 선택합니다.

1. **함수 개요**의 **함수 ARN**에서 함수의 Amazon 리소스 이름(ARN)을 기록해 둡니다. [2단계: Amazon Bedrock 에이전트 생성](agent-tutorial-step2.md)의 24단계에 필요합니다.

1. **코드** 탭에서 기존 코드를 다음으로 바꿉니다.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   import datetime
   import json
   
   
   def lambda_handler(event, context):
       now = datetime.datetime.now()
   
       response = {"date": now.strftime("%Y-%m-%d"), "time": now.strftime("%H:%M:%S")}
   
       response_body = {"application/json": {"body": json.dumps(response)}}
   
       action_response = {
           "actionGroup": event["actionGroup"],
           "apiPath": event["apiPath"],
           "httpMethod": event["httpMethod"],
           "httpStatusCode": 200,
           "responseBody": response_body,
       }
   
       session_attributes = event["sessionAttributes"]
       prompt_session_attributes = event["promptSessionAttributes"]
   
       return {
           "messageVersion": "1.0",
           "response": action_response,
           "sessionAttributes": session_attributes,
           "promptSessionAttributes": prompt_session_attributes,
       }
   ```

1. **배포**를 선택하여 함수를 배포합니다.

1. **구성** 탭을 선택합니다.

1. **권한**을 선택합니다.

1. **리소스 기반 정책 문**에서 **권한 추가**를 선택합니다.

1. **정책 문 편집**에서 다음을 수행합니다.

   1. **AWS 서비스**를 선택합니다.

   1. **서비스**에서 **기타**를 선택합니다.

   1. **문 ID**에 고유 식별자(예: `AllowBedrockInvocation`)를 입력합니다.

   1. **보안 주체**에 `bedrock.amazonaws.com`을 입력합니다.

   1. **소스 ARN**에 `arn:aws:bedrock:region:AWS account ID:agent/*`를 입력합니다.

      `region`을 `us-east-1`과 같이 사용 중인 AWS 리전으로 바꿉니다. `AWS account ID`를 AWS 계정 ID로 바꿉니다.

   1. **작업**에 `lambda:InvokeFunction`을 선택합니다.

1. **저장**을 선택합니다.

# 2단계: Amazon Bedrock 에이전트 생성
<a name="agent-tutorial-step2"></a>

다음으로 Amazon Bedrock 에이전트를 생성합니다. 이 절차에서는 Amazon Bedrock 콘솔에서 에이전트를 설정하고, 파운데이션 모델로 구성하고, 해당 동작을 날짜 및 시간 정보를 반환하는 친숙한 챗봇으로 정의하는 지침을 제공합니다. 또한, 에이전트가 직접 호출할 수 있는 API 엔드포인트, 특히 현재 날짜 및 시간을 가져오기 위한 엔드포인트를 정의하는 OpenAPI 스키마를 사용하여 작업 그룹을 생성합니다. 나아가 에이전트의 IAM 역할에 인라인 정책을 추가하여 Lambda 함수를 간접 호출할 수 있도록 합니다. 에이전트는 사용자와 Lambda 함수 간의 인터페이스 역할을 하여 자연어 요청을 해석하고 이를 구조화된 함수 직접 호출로 변환하여 날짜 및 시간 정보를 검색합니다.

자세한 내용은 [에이전트를 수동으로 생성 및 구성](agents-create.md) 단원을 참조하십시오.

**Amazon Bedrock 에이전트 생성**

1. Amazon Bedrock 콘솔을 사용할 권한이 있는 IAM 자격 증명AWS Management Console으로에 로그인합니다. 그 다음 [https://console.aws.amazon.com/bedrock](https://console.aws.amazon.com/bedrock)에서 Amazon Bedrock 콘솔을 엽니다.

1. Amazon Bedrock [에이전트](agents-supported.md)를 지원하는 AWS[리전](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/select-region.html)에 있는지 확인합니다.

1. 탐색 창의 **빌더 도구**에서 **에이전트**를 선택합니다.

1. **Create agent(에이전트 생성)**을 선택합니다.

1. **이름**에 에이전트의 이름을 입력합니다(예: `MyBedrockAgent`).

1. (선택 사항) **설명**에 설명을 입력합니다.

1. **생성(Create)**을 선택합니다. **에이전트 빌더** 창이 열립니다.

1. **에이전트 세부 정보** 섹션에서 다음을 수행합니다.
   + **에이전트 리소스 역할**에서 **새 서비스 역할 생성 및 사용**을 선택합니다.
   + **모델 선택**에서 Claude 3 Haiku와 같은 모델을 선택합니다.
   + **에이전트에 대한 지침** 섹션에서 다음 지침을 입력합니다.

     ```
     You are a friendly chat bot. You have access to a function called that returns
     information about the current date and time. When responding with date or time,
     please make sure to add the timezone UTC.
     ```

1. **저장**을 선택합니다.

1. **작업 그룹** 탭을 선택합니다.

1. **작업 그룹**에서 **추가**를 선택합니다.

1. **작업 그룹 이름 입력**에 작업 그룹의 이름(예: `TimeActions`)을 입력합니다.

1. (선택 사항) **설명**에 작업 그룹에 대한 설명을 입력합니다.

1. **작업 그룹 유형**에서 **API 스키마로 정의**를 선택합니다.

1. **작업 그룹 간접 호출**에서 **기존 Lambda 함수 선택**을 선택합니다.

1. **Lambda 함수 선택**에서 [1단계: Lambda 함수 생성](agent-tutorial-step1.md)에서 생성한 Lambda 함수의 이름을 선택합니다.

1. **작업 그룹 스키마**에서 **인라인 스키마 편집기를 통해 정의**를 선택합니다.

1. **인라인 OpenAPI 스키마** 텍스트 상자에서 기존 스키마를 다음 OpenAPI YAML 스키마로 바꿉니다.

   ```
   openapi: 3.0.0
   info:
     title: Time API
     version: 1.0.0
     description: API to get the current date and time.
   paths:
     /get-current-date-and-time:
       get:
         summary: Gets the current date and time.
         description: Gets the current date and time.
         operationId: getDateAndTime
         responses:
           '200':
             description: Gets the current date and time.
             content:
               'application/json':
                 schema:
                   type: object
                   properties:
                     date:
                       type: string
                       description: The current date
                     time:
                       type: string
                       description: The current time
   ```

1. 작업 그룹 구성을 검토하고 **생성**을 선택합니다.

1. **저장**을 선택하여 변경 사항을 저장합니다.

1. **준비**를 선택하여 에이전트를 준비합니다.

1. **저장 및 종료**를 선택하여 변경 사항을 저장하고 에이전트 빌더를 종료합니다.

1. **에이전트 개요** 섹션의 **권한**에서 IAM 서비스 역할을 선택합니다. 이를 클릭하면 IAM 콘솔에서 역할이 열립니다.

1. IAM 콘솔에서 **권한** 탭을 선택합니다.

1. **권한 추가**를 선택하고 **인라인 정책 추가**를 선택합니다.

1. **JSON**을 선택하고 다음 정책을 붙여넣습니다. `Resource`가 Lambda 함수의 Amazon 리소스 이름(ARN)인지 확인합니다. [1단계: Lambda 함수 생성](agent-tutorial-step1.md)의 6단계에서 ARN을 기록했습니다.

1. **다음**을 선택합니다.

1. 정책의 이름을 입력합니다(예: `BedrockAgentLambdaInvoke`).

1. **정책 생성**을 선택합니다.

# 3단계: 에이전트 테스트
<a name="agent-tutorial-step3"></a>

이 절차에서는 Amazon Bedrock 콘솔의 기본 제공 테스트 인터페이스를 사용하여 에이전트의 규격 초안을 테스트합니다. 현재 날짜와 시간을 묻는 자연어 쿼리를 보내고, 에이전트가 이러한 요청을 처리하고 Lambda 함수를 간접 호출하고 형식이 지정된 응답을 반환하는 방법을 관찰합니다. 이 테스트 단계를 통해 에이전트가 사용자 의도를 올바르게 이해하고, Lambda 함수를 올바르게 직접 호출하고, 사용자 친화적인 방식으로 정보를 제공하는지 확인할 수 있습니다.

자세한 내용은 [에이전트 동작 테스트 및 문제 해결](agents-test.md) 섹션을 참조하세요.

**에이전트를 테스트하려면 다음을 수행하세요.**

1. Amazon Bedrock 콘솔에서 [2단계: Amazon Bedrock 에이전트 생성](agent-tutorial-step2.md)에서 생성한 에이전트를 엽니다.

1. **테스트**를 선택하여 **테스트** 패널을 엽니다.

1. **별칭** 드롭다운에서 별칭 **TestAlias: Working draft**를 선택합니다.

1. 채팅 인터페이스에 다음과 같이 에이전트의 작업 중 하나를 트리거하는 프롬프트를 입력합니다.
   + **What time is it?**
   + **Can you tell me today's date?**

1. 에이전트는 프롬프트를 처리하고, 필요한 경우 Lambda 함수를 간접 호출하고, 응답을 반환합니다.

1. (선택 사항) **추적 표시**를 선택하여 모델로 전송한 프롬프트의 [추적](trace-events.md) 단계를 확인합니다. 추적에는 모델이 Lambda 함수를 직접 호출하여 날짜와 시간을 가져올 시기를 결정하는 데 사용하는 추론이 표시됩니다.

# 4단계: 별칭을 사용하여 에이전트 배포
<a name="agent-tutorial-step4"></a>

에이전트를 구성한 후 별칭과 함께 배포하여 사용할 수 있도록 해야 합니다. 이 절차에서는 에이전트의 별칭 및 버전을 생성하여 배포를 준비합니다. 별칭은 버전을 가리키므로 기본 구현을 업데이트하는 기능을 유지하면서 안정적인 엔드포인트를 통해 에이전트를 간접 호출할 수 있습니다.

자세한 내용은 [애플리케이션에서 Amazon Bedrock 에이전트 배포 및 사용](agents-deploy.md) 섹션을 참조하세요.

**별칭을 사용하여 에이전트 배포**

1. Amazon Bedrock 콘솔에서 [2단계: Amazon Bedrock 에이전트 생성](agent-tutorial-step2.md)에서 생성한 에이전트를 엽니다.

1. **별칭 생성**을 선택합니다.

1. **별칭 이름**에 별칭의 이름을 입력합니다. 예: **DateTimeAliasAgentAlias**.

1. (선택 사항) **설명**에 설명을 입력합니다.

1. **버전 연결**에서 **새 버전 생성 및 이 별칭에 연결**을 선택합니다.

1. **별칭 생성**을 선택합니다.

1. [3단계: 에이전트 테스트](agent-tutorial-step3.md)의 지침에 따라 별칭을 테스트합니다. 6단계에서 방금 생성한 별칭을 선택합니다.

# 5단계: Python 코드에서 에이전트 직접 호출
<a name="agent-tutorial-step5"></a>

이 단계에서는 AWS SDK for Python (Boto)을 사용하여 에이전트와 프로그래밍 방식으로 상호 작용하는 방법을 알아봅니다. 예제 코드는 에이전트를 직접 호출하기 위한 파라미터로 AGENT ID와 ALIAS ID가 모두 필요한 [InvokeAgent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html) 작업을 사용하는 방법을 보여줍니다. 이 코드는 에이전트에 프롬프트를 보내고, 응답을 처리하고, 스트리밍 및 비스트리밍 응답 모드를 모두 처리하는 방법을 보여줍니다. 이를 통해 Bedrock 에이전트를 자체 Python 애플리케이션에 통합할 수 있습니다.

자세한 내용은 [애플리케이션에서 에이전트 간접 호출](agents-invoke-agent.md) 단원을 참조하십시오.

**Python 코드에서 에이전트를 직접 호출하려면**

1. 에이전트의 ID를 가져옵니다. 자세한 내용은 [에이전트 정보 확인](agents-view.md) 단원을 참조하십시오.

1. 에이전트 별칭의 ID를 가져옵니다. 자세한 내용은 [Amazon Bedrock에서 에이전트의 별칭에 대한 정보 확인](agents-alias-view.md) 단원을 참조하십시오.

1. 다음 코드를 실행합니다. 다음을 업데이트하세요.
   + **AGENT\$1ID** - 에이전트의 ID로 업데이트합니다.
   + **ALIAS\$1ID** - 에이전트의 별칭 ID로 업데이트합니다.
   + **리전** -와 같이 에이전트를 생성한 AWS 리전으로`us-east-1`.

   에이전트에서 응답을 스트리밍하려면 `streamFinalResponse` 값을 `True`로 변경합니다.

   ```
   import boto3
   import logging
   
   from botocore.exceptions import ClientError
   
   
   logging.basicConfig(level=logging.INFO)
   logger = logging.getLogger(__name__)
   
   def invoke_agent(client, agent_id, alias_id, prompt, session_id):
           response = client.invoke_agent(
               agentId=agent_id,
               agentAliasId=alias_id,
               enableTrace=True,
               sessionId = session_id,
               inputText=prompt,
               streamingConfigurations = { 
       "applyGuardrailInterval" : 20,
         "streamFinalResponse" : False
               }
           )
           completion = ""
           for event in response.get("completion"):
               #Collect agent output.
               if 'chunk' in event:
                   chunk = event["chunk"]
                   completion += chunk["bytes"].decode()
               
               # Log trace output.
               if 'trace' in event:
                   trace_event = event.get("trace")
                   trace = trace_event['trace']
                   for key, value in trace.items():
                       logging.info("%s: %s",key,value)
   
           print(f"Agent response: {completion}")
   
   
   if __name__ == "__main__":
   
       client=boto3.client(
               service_name="bedrock-agent-runtime",
               region_name="REGION") 
       
       agent_id = "AGENT_ID"
       alias_id = "ALIAS_ID"
       session_id = "123456"
       prompt = "What's the current time?"
   
       try:
   
           invoke_agent(client, agent_id, alias_id, prompt, session_id)
   
       except ClientError as e:
           print(f"Client error: {str(e)}")
           logger.error("Client error: %s", {str(e)})
   ```

# 6단계: 리소스 정리
<a name="agent-tutorial-step6"></a>

Amazon Bedrock 에이전트 사용을 마친 후에는 불필요한 요금이 발생하지 않도록 리소스를 정리해야 합니다. 이 최종 절차에서는 Bedrock 에이전트, Lambda 함수 및 관련 \$1IAM 역할을 포함하여이 자습서 중에 생성된 모든 AWS 리소스를 체계적으로 삭제합니다. 이 정리 프로세스는 더 이상 사용하지 않는 리소스에 지속적으로 요금이 발생하지 않도록 방지하므로 비용 관리에 중요합니다. 이 절차는 에이전트 삭제, Lambda 함수 제거, 이러한 서비스를 지원하기 위해 생성된 IAM 역할 지우기라는 세 부분으로 구성됩니다.

**Topics**
+ [에이전트 삭제](#agent-tutorial-step6-console-agent)
+ [Lambda 함수 삭제](#agent-tutorial-step6-console-lambda)
+ [IAM 역할 삭제](#agent-tutorial-step6-console-iam)

## 에이전트 삭제
<a name="agent-tutorial-step6-console-agent"></a>

**에이전트 삭제**

1. Amazon Bedrock 콘솔에서 [2단계: Amazon Bedrock 에이전트 생성](agent-tutorial-step2.md)에서 생성한 에이전트를 엽니다.

1. 생성한 에이전트를 선택합니다.

1. **삭제**를 선택합니다.

1. 삭제를 확인합니다.

## Lambda 함수 삭제
<a name="agent-tutorial-step6-console-lambda"></a>

**Lambda 함수 삭제**

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) AWS Lambda 콘솔을 엽니다.

1. 생성한 Lambda 함수를 선택합니다.

1. **작업**을 선택한 다음 **삭제**를 선택합니다.

1. 삭제를 확인합니다.

## IAM 역할 삭제
<a name="agent-tutorial-step6-console-iam"></a>

**IAM 역할 삭제**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

1. 생성한 에이전트 서비스 역할을 선택합니다.

1. **삭제**를 선택합니다.

1. 삭제를 확인합니다.

1. Lambda 실행 역할에 대해 반복합니다.

# 추가 리소스
<a name="agent-tutorial-resources"></a>
+ [Amazon Bedrock 사용 설명서](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Amazon Bedrock API 참조](https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html)
+ [AWS Lambda 개발자 안내서](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)
+ [Amazon Bedrock Agents 설명서](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
+ [OpenAPI 사양](https://swagger.io/specification/)