View a markdown version of this page

AgentCore 런타임 에이전트 호출 - Amazon Bedrock AgentCore

AgentCore 런타임 에이전트 호출

InvokeAgentRuntime 작업을 사용하면 Amazon 리소스 이름(ARN)으로 식별되는 특정 AgentCore 런타임 엔드포인트에 요청을 보내고 에이전트의 출력이 포함된 스트리밍 응답을 수신할 수 있습니다. API는 세션 식별자를 통한 세션 관리를 지원하므로 여러 상호 작용에서 대화 컨텍스트를 유지할 수 있습니다. 선택적 한정자를 사용하여 특정 에이전트 엔드포인트를 대상으로 지정할 수 있습니다.

InvokeAgentRuntime를 호출하려면 bedrock-agentcore:InvokeAgentRuntime 권한이 필요합니다. 호출 시 에이전트가 사용자 인증에 사용할 수 있는 보유자 토큰을 전달할 수도 있습니다.

InvokeAgentRuntime 작업은 요청 페이로드를 최대 100MB 크기의 바이너리 데이터로 수락하고 에이전트가 요청을 처리할 때 실시간으로 데이터 청크를 전달하는 스트리밍 응답을 반환합니다. 이 스트리밍 접근 방식을 사용하면 완전한 응답을 기다리지 않고 즉시 부분적인 결과를 수신할 수 있으므로 대화형 애플리케이션에 적합합니다.

동일한 세션에서 쉘 명령(예: 테스트 실행, git 작업 또는 환경 설정)을 실행하려면 AgentCore 런타임 세션 작업에서 쉘 실행 명령을 사용합니다. 두 작업 모두 동일한 에이전트 런타임 및 세션에서 작동합니다.

에이전트를 OAuth와 통합하려는 경우 AWS SDK를 사용하여 InvokeAgentRuntime를 호출할 수 없습니다. 대신 InvokeAgentRuntime에 HTTPS를 요청합니다. 자세한 내용은 Authenticate and authorize with Inbound Auth and Outbound Auth를 참조하세요.

스트리밍 에이전트 호출

다음 예제에서는 boto3를 사용하여 에이전트 런타임을 호출하는 방법을 보여줍니다.

import boto3 import json # Initialize the Bedrock AgentCore client agent_core_client = boto3.client('bedrock-agentcore') # Prepare the payload payload = json.dumps({"prompt": prompt}).encode() # Invoke the agent response = agent_core_client.invoke_agent_runtime( agentRuntimeArn=agent_arn, runtimeSessionId=session_id, payload=payload ) # Process and print the response if "text/event-stream" in response.get("contentType", ""): # Handle streaming response content = [] for line in response["response"].iter_lines(chunk_size=10): if line: line = line.decode("utf-8") if line.startswith("data: "): line = line[6:] print(line) content.append(line) print("\nComplete response:", "\n".join(content)) elif response.get("contentType") == "application/json": # Handle standard JSON response content = [] for chunk in response.get("response", []): content.append(chunk.decode('utf-8')) print(json.loads(''.join(content))) else: # Print raw response for other content types print(response)

다중 모달 에이전트 호출

InvokeAgentRuntime 작업을 사용하여 텍스트와 이미지를 모두 포함하는 다중 모달 요청을 보낼 수 있습니다. 다음 예제에서는 다중 모달 에이전트를 호출하는 방법을 보여줍니다.

import boto3 import json import base64 # Read and encode image with open("image.jpg", "rb") as image_file: image_data = base64.b64encode(image_file.read()).decode('utf-8') # Prepare multi-modal payload payload = json.dumps({ "prompt": "Describe what you see in this image", "media": { "type": "image", "format": "jpeg", "data": image_data } }).encode() # Invoke the agent response = agent_core_client.invoke_agent_runtime( agentRuntimeArn=agent_arn, runtimeSessionId=session_id, payload=payload )

세션 관리

InvokeAgentRuntime 작업은 runtimeSessionId 파라미터를 통한 세션 관리를 지원합니다. 여러 요청에 동일한 세션 식별자를 제공하여 에이전트가 이전 상호 작용을 참조할 수 있도록 대화 컨텍스트를 유지할 수 있습니다.

새 대화를 시작하려면 고유한 세션 식별자를 생성합니다. 기존 대화를 계속하려면 이전 요청과 동일한 세션 식별자를 사용합니다. 이 접근 방식을 사용하면 시간이 지남에 따라 컨텍스트를 유지하는 대화형 애플리케이션을 구축할 수 있습니다.

작은 정보

최상의 결과를 얻으려면 세션 IDs를 사용하여 다른 사용자 또는 대화 간의 충돌을 방지합니다.

오류 처리

InvokeAgentRuntime 작업을 사용할 때 다양한 오류가 발생할 수 있습니다. 다음은 몇 가지 일반적인 오류와 이를 처리하는 방법입니다.

ValidationException

요청 파라미터가 유효하지 않을 때 발생합니다. 에이전트 ARN, 세션 ID 및 페이로드의 형식이 올바른지 확인합니다.

ResourceNotFoundException

지정된 에이전트 런타임을 찾을 수 없을 때 발생합니다. 에이전트 ARN이 올바르고 에이전트가 AWS 계정에 있는지 확인합니다.

AccessDeniedException

필요한 권한이 없을 때 발생합니다. IAM 정책에 bedrock-agentcore:InvokeAgentRuntime 권한이 포함되어 있는지 확인합니다.

ThrottlingException

요청 속도 제한을 초과할 때 발생합니다. 애플리케이션에서 지수 백오프 및 재시도 로직을 구현합니다.

애플리케이션에서 적절한 오류 처리를 구현하여 더 나은 사용자 경험을 제공하고 문제를 효과적으로 해결합니다.

모범 사례

InvokeAgentRuntime 작업을 사용할 때는 다음 모범 사례를 따르세요.

  • 세션 관리를 사용하여 더 나은 사용자 경험을 위해 대화 컨텍스트를 유지합니다.

  • 스트리밍 응답을 점진적으로 처리하여 사용자에게 실시간 피드백을 제공합니다.

  • 강력한 애플리케이션을 위해 적절한 오류 처리 및 재시도 로직을 구현합니다.

  • 특히 다중 모달 콘텐츠의 경우 요청을 보낼 때 페이로드 크기 제한(100MB)을 고려하세요.

  • 적절한 한정자를 사용하여 특정 에이전트 버전 또는 엔드포인트를 대상으로 지정합니다.

  • 필요한 경우 보유자 토큰을 사용하여 인증 메커니즘을 구현합니다.

  • 에이전트의 LLMInvokeAgentRuntimeCommand을 통해 라우팅하는 대신 결정적 작업(테스트, git, 빌드)에를 사용합니다. AgentCore 런타임 세션에서 셸 명령 실행을 참조하세요.