콘텐츠로 이동

Python Agent

Filter this guidePick generator option values to hide sections that don't apply.

도구를 사용하는 에이전트를 구축하기 위한 Python AI 에이전트를 생성하고, 선택적으로 Amazon Bedrock AgentCore Runtime에 배포합니다. framework 옵션으로 에이전트 프레임워크를 선택하세요: Strands (기본값) 또는 LangChain (LangGraph 기반).

생성기는 서버 protocol을 통해 에이전트를 노출합니다. 두 프레임워크 모두 HTTP (기본값), 다른 A2A 호환 에이전트와의 상호 운용성을 위한 Agent-to-Agent (A2A) 프로토콜, 그리고 CopilotKit을 통한 직접 프론트엔드 통합을 위한 AG-UI 프로토콜을 지원합니다.

Python Agent는 두 가지 방법으로 생성할 수 있습니다:

Terminal window
pnpm nx g @aws/nx-plugin:py#agent
어떤 파일이 변경될지 확인하기 위해 드라이 런을 수행할 수도 있습니다
Terminal window
pnpm nx g @aws/nx-plugin:py#agent --dry-run
매개변수타입기본값설명
project 필수string-Agent를 추가할 프로젝트
framework strands | langchainstrands사용할 에이전트 SDK입니다.
name string-Agent의 이름 (기본값: agent)
auth iam | cognitoiam에이전트 인증에 사용되는 방법입니다. infra가 설정된 경우에만 적용됩니다 (infra가 none일 때는 무시됨).
protocol http | a2a | ag-uihttpAgent의 서버 프로토콜입니다. HTTP는 FastAPI HTTP 서버를 노출합니다. A2A는 Agent-to-Agent 프로토콜 서버를 노출합니다. AG-UI는 프론트엔드와 직접 통합하기 위한 Agent-User Interaction 프로토콜 서버를 노출합니다.
iac inherit | cdk | terraforminherit선호하는 IaC 공급자입니다. 기본적으로 초기 선택에서 상속됩니다.
infra agentcore | noneagentcore에이전트를 호스팅할 인프라 유형입니다.
session s3 | dynamodb-s3 | in-memorys3Agent의 세션을 유지하는 데 사용되는 스토리지입니다. LangChain은 's3' 또는 'dynamodb-s3'를 지원하고, Strands는 's3'를 지원하며, 'in-memory'는 둘 다에서 유효합니다.
preferInstallDependencies booleantrue생성기 실행 후 의존성 설치를 선호할지 여부입니다. 여러 생성기를 일괄 처리할 때 설치를 연기하려면 false로 설정하세요 (후속 생성기가 Nx 프로젝트 그래프를 계산할 수 있도록 필요한 경우 설치는 여전히 실행됩니다); 마지막에 한 번 설치합니다.

생성기는 기존 Python 프로젝트에 다음 파일을 추가합니다. 생성되는 파일은 선택한 protocol에 따라 다릅니다:

protocol = http
  • 디렉터리your-project/
    • 디렉터리your_module/
      • 디렉터리agent/ (or custom name if specified)
        • __init__.py Python package initialization
        • init.py FastAPI application setup with CORS and error handling middleware
        • agent.py Main agent definition with sample tools
        • session.py Resolves the framework-specific session persistence implementation
        • main.py FastAPI entry point for Bedrock AgentCore Runtime
        • Dockerfile Entry point for hosting your agent (excluded when infra is set to None)
    • pyproject.toml Updated with Strands dependencies
    • project.json Updated with agent serve targets
protocol = a2a

진입점은 A2A 프로토콜을 통해 에이전트를 노출합니다 (Strands는 Strands A2A Server를 사용하고, LangChain은 그래프를 a2a-sdk 실행기로 래핑합니다), FastAPI 앱에 마운트됩니다:

  • 디렉터리your-project/
    • 디렉터리your_module/
      • 디렉터리agent/ (or custom name if specified)
        • __init__.py Python package initialization
        • agent.py Main agent definition with sample tools
        • session.py Resolves the framework-specific session persistence implementation
        • main.py A2A server entry point
        • Dockerfile Entry point for hosting your agent (excluded when infra is set to None)
    • pyproject.toml Updated with framework and A2A dependencies
    • project.json Updated with agent serve targets
protocol = ag-ui

진입점은 CopilotKit과의 직접 프론트엔드 통합을 위해 AG-UI 프로토콜을 통해 에이전트를 노출합니다. Strands 에이전트는 ag-ui-strands 통합을 사용하고, LangChain 에이전트는 ag-ui-langgraph를 사용합니다:

  • 디렉터리your-project/
    • 디렉터리your_module/
      • 디렉터리agent/ (or custom name if specified)
        • __init__.py Python package initialization
        • agent.py Main agent definition with sample tools
        • session.py Resolves the framework-specific session persistence implementation
        • main.py AG-UI server entry point
        • Dockerfile Entry point for hosting your agent (excluded when infra is set to None)
    • pyproject.toml Updated with framework and AG-UI dependencies
    • project.json Updated with agent serve targets
infra = agentcore

이 생성기는 선택한 iac를 기반으로 코드형 인프라를 제공하므로, 관련 CDK constructs 또는 Terraform 모듈을 포함하는 packages/common에 프로젝트를 생성합니다.

공통 코드형 인프라 프로젝트는 다음과 같이 구성됩니다:

  • 디렉터리packages/common/constructs
    • 디렉터리src
      • 디렉터리app/ 프로젝트/생성기에 특정한 인프라를 위한 Constructs
      • 디렉터리core/ app의 constructs에서 재사용되는 일반 constructs
      • index.ts app에서 constructs를 내보내는 진입점
    • project.json 프로젝트 빌드 타겟 및 구성

Agent를 배포하기 위해 다음 파일이 생성됩니다:

  • 디렉터리packages/common/constructs/src
    • 디렉터리app
      • 디렉터리agents
        • 디렉터리<project-name>
          • <project-name>.ts CDK construct for deploying your agent
infra = none

infranone을 선택한 경우, CDK 구성 또는 Terraform 모듈이 생성되지 않으며 Agent는 로컬에서만 실행할 수 있습니다. 인증할 호스팅 엔드포인트가 없으므로 이 모드에서는 auth 옵션이 무시됩니다.

Bedrock AgentCore Runtime에 배포되면, 에이전트는 컨테이너 이미지로 빌드되어 Amazon ECR에 푸시되고 AgentCore Runtime에서 실행됩니다. 클라이언트는 AgentCore Runtime 데이터 플레인 엔드포인트를 호출하며, 이는 요청을 에이전트로 전달합니다. 에이전트는 모델 추론을 위해 Amazon Bedrock을 호출하고 도구, MCP 서버 또는 다운스트림 API를 호출할 수 있습니다.

ClientECRStrands Agent(AgentCore Runtime)Bedrock(Model Inference)CloudWatch(Logs, Metrics) Containerimage InvokeModel

agent.py를 편집하여 도구를 추가하고, 모델을 구성하고, 시스템 프롬프트를 사용자 정의할 수 있습니다. API는 선택한 프레임워크에 따라 다릅니다.

도구는 AI 에이전트가 작업을 수행하기 위해 호출할 수 있는 함수입니다. 두 프레임워크 모두 도구를 정의하기 위해 데코레이터 기반 접근 방식을 사용하며, 함수 이름과 docstring에서 도구 이름과 설명을 파생하고, 타입 힌트에서 입력 스키마를 생성합니다.

from strands import Agent, tool
@tool
def calculate_sum(numbers: list[int]) -> int:
"""Calculate the sum of a list of numbers"""
return sum(numbers)
@tool
def get_weather(city: str) -> str:
"""Get weather information for a city"""
# Your weather API integration here
return f"Weather in {city}: Sunny, 25°C"
# Add tools to your agent
agent = Agent(
system_prompt="You are a helpful assistant with access to various tools.",
tools=[calculate_sum, get_weather],
)

Strands는 strands-tools 패키지를 통해 사전 구축된 도구 모음을 제공합니다:

from strands_tools import current_time, http_request, file_read
agent = Agent(
system_prompt="You are a helpful assistant.",
tools=[current_time, http_request, file_read],
)

기본적으로 Strands 에이전트는 Claude 4 Sonnet을 사용하지만, 모델 제공자를 사용자 정의할 수 있습니다. 구성 옵션은 모델 제공자에 대한 Strands 문서를 참조하세요:

from strands import Agent
from strands.models import BedrockModel
# Create a BedrockModel
bedrock_model = BedrockModel(
model_id="anthropic.claude-sonnet-4-20250514-v1:0",
region_name="us-west-2",
temperature=0.3,
)
agent = Agent(model=bedrock_model)

py#mcp-server 또는 ts#mcp-server 생성기를 사용하여 생성한 MCP 서버를 사용하려면 connection 생성기를 사용할 수 있으며, 이는 두 프레임워크 모두에 대해 MCP 서버의 도구를 에이전트에 연결합니다.

Terminal window
pnpm nx g @aws/nx-plugin:connection
어떤 파일이 변경될지 확인하기 위해 드라이 런을 수행할 수도 있습니다
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

연결 설정 방법에 대한 자세한 내용은 connection 생성기 가이드를 참조하세요.

다른 MCP 서버의 경우 Strands 또는 LangChain MCP 문서를 참조하세요.

에이전트 작성에 대한 더 심층적인 가이드는 Strands 또는 LangChain 문서를 참조하세요.

에이전트의 서버 프로토콜은 통신 방식을 결정합니다. 모든 옵션은 FastAPI로 제공되며 진입점이 다릅니다:

  • HTTP (기본값): 사용자 정의 /invocations 엔드포인트, CORS 및 스트리밍을 갖춘 표준 FastAPI 서버입니다. 사용자 정의 클라이언트 통합에 가장 적합합니다.
  • A2A: FastAPI 앱에 마운트된 Agent-to-Agent 서버입니다 (Strands는 Strands A2A Server를 사용하고, LangChain은 프레임워크에 구애받지 않는 a2a-sdk를 사용합니다). 에이전트가 다른 A2A 호환 에이전트에 의해 검색 및 호출 가능해야 할 때 가장 적합합니다.
  • AG-UI: SSE를 통한 AG-UI 프로토콜입니다 (Strands는 ag-ui-strands를 사용하고, LangChain은 ag-ui-langgraph를 사용합니다). React 웹사이트에서 CopilotKit과의 직접 프론트엔드 통합에 가장 적합합니다.

서버 진입점은 프레임워크에 따라 다르지만 (Strands는 컨텍스트 관리 Agent를 생성하고, LangChain은 컴파일된 create_agent 그래프를 구동합니다), 각 프로토콜의 외부 계약은 동일합니다.

모든 프로토콜은 AgentCore 런타임 상태 확인 계약을 위해 /ping을 노출합니다. A2A 에이전트는 포트 9000에서 수신하고, HTTP 및 AG-UI 에이전트는 포트 8080에서 수신합니다. 생성된 Dockerfile 및 인프라는 자동으로 구성됩니다.

protocol = http

생성된 HTTP 서버에는 다음이 포함됩니다:

  • CORS 미들웨어를 사용한 FastAPI 애플리케이션 설정
  • 오류 처리 미들웨어
  • OpenAPI 스키마 생성
  • 상태 확인 엔드포인트 (/ping)
  • 에이전트 호출 엔드포인트 (/invocations)

Pydantic으로 호출 입력 및 출력 사용자 정의

섹션 제목: “Pydantic으로 호출 입력 및 출력 사용자 정의”

에이전트의 호출 엔드포인트는 Pydantic 모델을 사용하여 요청 및 응답 스키마를 정의하고 검증합니다. main.py에서 이러한 모델을 사용자 정의하여 에이전트의 요구 사항에 맞출 수 있습니다.

기본 InvokeInput 모델은 프롬프트를 받습니다.

from pydantic import BaseModel
class InvokeInput(BaseModel):
prompt: str

에이전트에 필요한 추가 필드를 포함하도록 이 모델을 확장할 수 있습니다.

세션 ID는 Bedrock AgentCore Runtime 세션 계약과 일치하는 x-amzn-bedrock-agentcore-runtime-session-id HTTP 헤더에서 추출됩니다. 헤더가 제공되지 않으면 임의의 UUID가 대체로 생성됩니다.

스트리밍 응답의 경우, 생성기는 Pydantic 모델을 JSON Lines 형식(application/jsonl)으로 자동 직렬화하는 JsonStreamingResponse를 제공합니다. 이 형식은 OpenAPI 3.2의 스트리밍 사양과 호환되며 생성된 TypeScript 클라이언트와 원활하게 작동합니다.

기본적으로 에이전트는 에이전트의 응답 텍스트를 포함하는 StreamChunk 객체를 생성합니다:

class StreamChunk(BaseModel):
content: str

필요에 맞게 StreamChunk 모델을 사용자 정의할 수 있습니다:

from pydantic import BaseModel
class StreamChunk(BaseModel):
content: str
timestamp: str
token_count: int

FastAPI의 네이티브 지원을 위한 기능 요청이 열려 있습니다.

생성기는 PingStatus 상수를 위해 Bedrock AgentCore Python SDK에 대한 종속성을 포함합니다. 원하는 경우 FastAPI 대신 BedrockAgentCoreApp을 사용하는 것이 간단하지만, 타입 안전성이 손실됩니다.

SDK의 기능에 대한 자세한 내용은 여기 문서에서 확인할 수 있습니다.

protocol = a2a

생성된 main.py/ping도 노출하는 상위 FastAPI 앱에 A2A 서버를 마운트합니다. Strands 에이전트는 Strands A2AServer를 사용하고, LangChain 에이전트는 컴파일된 그래프를 a2a-sdk AgentExecutor로 래핑합니다. AgentCore에 배포되면 진입점은 AppConfig에서 런타임의 공개 ARN을 확인하고 에이전트 카드에 광고합니다.

대부분의 사용자는 이 파일을 수정할 필요가 없습니다. 도구나 시스템 프롬프트를 변경하려면 agent.py를 편집하세요. A2A 서버는 에이전트의 namedescription에서 에이전트 카드(/.well-known/agent-card.json)를 채웁니다.

protocol = ag-ui

생성된 main.py는 Server-Sent Events (SSE)를 통해 AG-UI 이벤트를 스트리밍하는 단일 POST 엔드포인트와 AgentCore 런타임 상태 확인을 위한 /ping을 노출합니다. 연결은 프레임워크에 따라 다릅니다:

  • Strands: Agent를 FastAPI lifespan 핸들러 내부에 구축된 ag_ui_strands.StrandsAgent로 래핑하고 (따라서 구성이 가져오기 시간이 아닌 컨테이너/세션 시작 시 발생), 수동으로 작성된 FastAPI /invocations 루프에서 제공합니다.
  • LangChain: 컴파일된 그래프를 lifespan 내부에서 동일한 방식으로 구축된 ag_ui_langgraph.LangGraphAgent로 래핑하고, 수동으로 작성된 FastAPI /invocations 루프에서 제공합니다.

대부분의 사용자는 이 파일을 수정할 필요가 없습니다. 도구나 시스템 프롬프트를 변경하려면 agent.py를 편집하세요.

Agent(및 연결된 모든 것)를 로컬에서 실행하려면 프로젝트의 dev 대상을 사용하세요:

Terminal window
pnpm nx dev your-project

프로젝트에 여러 컴포넌트(에이전트, MCP 서버 등)를 추가한 경우 모두 시작됩니다. 이 에이전트만 실행하려면 <your-agent-name>-dev 대상을 지정하세요:

Terminal window
pnpm nx agent-dev your-project

이는 uv run을 사용하여 Bedrock AgentCore Python SDK를 사용하여 Agent를 실행합니다.

생성기는 에이전트와 대화형 터미널 채팅을 시작하는 <your-agent-name>-chat Nx 대상을 구성합니다.

채팅 대상은 독립적으로 실행됩니다. 기본적으로 로컬에서 실행 중인 에이전트에 연결되므로 먼저 에이전트의 <your-agent-name>-dev 대상을 시작하세요 (별도의 터미널에서):

Terminal window
pnpm nx agent-dev your-project

그런 다음 다른 터미널에서 채팅을 시작하세요:

Terminal window
pnpm nx run your-project:agent-chat

생성기는 모든 프로토콜에 대해 scripts/<your-agent-name>/chat.ts를 생성합니다. 기본적으로 로컬 에이전트에 연결하거나 RUNTIME_CONFIG_APP_ID가 설정된 경우 배포된 에이전트에 연결합니다 (아래 배포된 에이전트와 채팅 참조).

HTTP 에이전트의 경우 채팅 스크립트는 에이전트의 OpenAPI 사양에서 생성된 타입 안전 TypeScript 클라이언트를 사용합니다. 생성기는 또한 다음을 생성합니다:

  • scripts/<your-agent-name>_openapi.py — 에이전트의 OpenAPI 사양을 내보내는 작은 스크립트
  • 이를 실행하는 <your-agent-name>-openapi Nx 대상
  • scripts/<your-agent-name>/generated/ 아래에 타입 안전 TypeScript 클라이언트를 생성하는 <your-agent-name>-generate-client Nx 대상

에이전트의 입력 형태를 사용자 정의할 때 (예: InvokeInput에 새 필드 추가), 에이전트를 호출할 때 새 필드를 전달하도록 chat.ts를 업데이트하면 나머지는 자동으로 작동합니다.

infra = agentcore

Bedrock AgentCore에 배포된 에이전트와 채팅하려면 RUNTIME_CONFIG_APP_ID 환경 변수를 배포의 AppConfig 애플리케이션 ID(배포된 스택에서 RuntimeConfigApplicationId로 출력됨)로 설정하세요. 채팅 스크립트는 런타임 구성에서 에이전트의 런타임 ARN을 확인하고 배포된 엔드포인트에 연결합니다:

IAM 인증 에이전트의 경우 요청은 기본 AWS 자격 증명을 사용하여 SigV4로 서명됩니다. 환경에 런타임을 호출할 권한이 있는 AWS 자격 증명이 있는지 확인하세요:

Terminal window
RUNTIME_CONFIG_APP_ID=<app-id> pnpm nx run your-project:agent-chat
infra = agentcore

infra에 대해 agentcore를 선택한 경우, 관련 CDK 또는 Terraform 인프라가 생성되며 이를 사용하여 Agent를 Amazon Bedrock AgentCore Runtime에 배포할 수 있습니다.

제너레이터를 실행할 때 선택한 name을 기반으로 하거나 기본적으로 <ProjectName>Agent로 명명된 Agent용 CDK 구성이 생성됩니다.

이 CDK 구성을 CDK 애플리케이션에서 사용할 수 있습니다:

import { MyProjectAgent } from '@my-scope/common-constructs';
export class ExampleStack extends Stack {
constructor(scope: Construct, id: string) {
new MyProjectAgent(this, 'MyProjectAgent');
}
}

제너레이터는 Agent에 대한 인증을 구성하기 위한 auth 옵션을 제공합니다. 에이전트를 생성할 때 IAM(기본값) 또는 Cognito 인증 중에서 선택할 수 있습니다.

기본적으로 Agent는 IAM 인증을 사용하여 보호되며, 인수 없이 배포하면 됩니다:

import { MyProjectAgent } from '@my-scope/common-constructs';
export class ExampleStack extends Stack {
constructor(scope: Construct, id: string) {
new MyProjectAgent(this, 'MyProjectAgent');
}
}

grantInvokeAccess 메서드를 사용하여 Bedrock AgentCore Runtime에서 에이전트를 호출할 수 있는 액세스 권한을 부여할 수 있습니다. 예를 들어:

import { MyProjectAgent } from '@my-scope/common-constructs';
export class ExampleStack extends Stack {
constructor(scope: Construct, id: string) {
const agent = new MyProjectAgent(this, 'MyProjectAgent');
const lambdaFunction = new Function(this, ...);
agent.grantInvokeAccess(lambdaFunction);
}
}

Cognito 인증을 선택하면 제너레이터가 Cognito를 사용하도록 에이전트를 구성합니다.

생성된 구성은 Cognito 인증을 구성하는 identity prop을 허용합니다:

import { MyProjectAgent, UserIdentity } from '@my-scope/common-constructs';
export class ExampleStack extends Stack {
constructor(scope: Construct, id: string) {
const identity = new UserIdentity(this, 'Identity');
new MyProjectAgent(this, 'MyProjectAgent', {
identity,
});
}
}

UserIdentity 구성은 ts#website#auth 제너레이터를 사용하여 생성할 수 있으며, 또는 자체 CDK UserPoolUserPoolClient를 생성할 수 있습니다.

Bedrock AgentCore Runtime용 Agent를 빌드하기 위해 프로젝트에 bundle 대상이 추가되며, 이는:

  • uv export를 사용하여 Python 종속성을 requirements.txt 파일로 내보냅니다
  • uv pip install을 사용하여 대상 플랫폼(aarch64-manylinux_2_28)용 종속성을 설치합니다

Agent에 특정한 docker 대상도 추가되며, 이는 Dockerfile 및 번들된 아티팩트를 docker 컨텍스트 디렉토리에 복사합니다. 이는 Dockerfile을 빌드 출력과 함께 배치하여 CDK가 AgentRuntimeArtifact.fromAsset을 사용하여 Docker 이미지를 직접 빌드할 수 있도록 합니다.

이 프로젝트를 위해 빌드된 Docker 이미지는 ECR 호스팅 Trivy 이미지에서 실행되는 Trivy를 사용하여 취약점을 스캔할 수 있습니다.

trivy 타겟이 프로젝트에 추가되어 빌드된 이미지를 스캔하고 HIGH 또는 CRITICAL 심각도의 취약점이 발견되면 0이 아닌 값으로 종료합니다. 생성된 Dockerfile은 생성 시점에 이러한 심각도의 알려진 수정 가능한 취약점이 없는 베이스 이미지를 사용하며, 번들된 도구(예: npm)를 업그레이드하여 이를 유지합니다.

스캔은 이미지 빌드와 동일한 컨테이너 엔진(docker 또는 finch)을 사용하므로 추가 도구가 필요하지 않습니다. 스캔은 이미지가 변경될 때만 다시 실행되므로 변경되지 않은 이미지는 다시 스캔되지 않습니다. 제공되는 trivy 루트 스크립트는 워크스페이스의 모든 이미지를 스캔합니다:

Terminal window
pnpm trivy

특정 취약점을 억제하고 싶은 경우가 있을 수 있습니다. 예를 들어 아직 수정 사항이 없고 위험을 허용 가능한 것으로 평가한 경우입니다.

프로젝트 루트의 .trivyignore 파일(즉, project.json 옆)에 취약점 ID를 한 줄에 하나씩 추가하세요:

.trivyignore
# node-tar arbitrary file write - not exploitable in our usage
CVE-2024-XXXXX

결과 필터링에 대한 자세한 내용은 Trivy 필터링 문서를 참조하세요.

에이전트는 Dockerfile에서 자동 계측을 구성하여 AWS Distro for Open Telemetry (ADOT)를 사용한 관찰 가능성으로 자동 구성됩니다.

CloudWatch AWS 콘솔에서 메뉴의 “GenAI Observability”를 선택하여 추적을 찾을 수 있습니다. 추적이 채워지려면 Transaction Search를 활성화해야 합니다.

자세한 내용은 관찰 가능성에 대한 AgentCore 문서를 참조하세요.

session 옵션은 선택한 프레임워크에 따라 다른 기본 지속성 개념에 매핑됩니다: strands 프레임워크의 경우 Strands의 세션 관리 개념, langchain 프레임워크의 경우 LangGraph의 checkpointer 개념입니다.

framework = strands

session 옵션은 Strands SDK의 SessionManager를 사용하여 에이전트가 호출 간에 대화 상태(메시지 기록, 도구 상태 등)를 유지하는 방법을 제어합니다:

  • s3 (기본값): CDK/Terraform 인프라는 세션 데이터를 위한 전용 S3 버킷을 프로비저닝하며, 전용 KMS 키로 암호화되고 모든 공개 액세스가 차단됩니다. 서버 액세스 로그는 동일한 키를 통해 CloudWatch Logs 로그 그룹으로 전달됩니다. 에이전트의 IAM 역할에는 버킷에 대한 읽기/쓰기/목록/삭제 액세스 권한과 키에 대한 복호화/데이터 키 생성 액세스 권한이 부여되며, 버킷 이름은 AppConfig 런타임 구성에서 에이전트의 ARN과 함께 등록됩니다.
  • in-memory: 버킷이 프로비저닝되지 않습니다. 대화 상태는 실행 중인 프로세스의 수명 동안만 메모리에 유지되며 재시작이나 스케일 인 시 유지되지 않습니다.

이는 생성된 session.py에 구현되며, 현재 세션에 대한 SessionManager를 확인하는 get_session_manager() 함수를 내보냅니다.

세션 ID 자체는 AgentCore Runtime 세션(x-amzn-bedrock-agentcore-runtime-session-id 헤더를 통해 전파됨)에서 가져오며 contextvars.ContextVar 기반 컨텍스트에 바인딩되므로 get_current_session_id()가 요청의 어디에서나 이를 확인할 수 있습니다. 여기에는 connection 생성기를 통해 연결된 다운스트림 MCP 또는 A2A 클라이언트도 포함되므로 전체 호출 체인이 일관된 세션을 공유합니다.

framework = langchain

session 옵션은 에이전트의 LangGraph checkpointer가 대화 상태를 유지하는 방법을 제어합니다:

  • s3 (기본값): 배포된 에이전트는 프로비저닝된 세션 버킷과 함께 S3CheckpointSaver를 사용하여 checkpoints/ 접두사 아래에 체크포인트 및 보류 중인 쓰기를 저장합니다. 이 클래스는 공유 에이전트 연결 프로젝트의 s3_checkpoint_saver_langchain.py에 있습니다.
  • dynamodb-s3: CDK/Terraform 인프라는 체크포인트를 위한 DynamoDB 테이블을 프로비저닝하며, LangGraph 에이전트의 체크포인트 저장소로 DynamoDB 사용에 대한 AWS 문서에서 권장하는 대로 구성됩니다(통합 PK/SK 스키마, PAY_PER_REQUEST 청구, 특정 시점 복구 및 ttl 속성), 350KB 이상의 체크포인트를 오프로드하기 위한 S3 버킷도 함께 제공됩니다. 둘 다 전용 KMS 키로 암호화됩니다. 버킷의 서버 액세스 로그는 동일한 키를 통해 CloudWatch Logs 로그 그룹으로 전달됩니다. 에이전트의 IAM 역할에는 테이블 및 버킷에 대한 읽기/쓰기 액세스 권한이 부여되며, 테이블/버킷 이름은 AppConfig 런타임 구성에서 에이전트의 ARN과 함께 등록됩니다.
  • in-memory: 테이블이나 버킷이 프로비저닝되지 않습니다. 대화 상태는 실행 중인 프로세스의 수명 동안만 메모리에 유지되며 재시작이나 스케일 인 시 유지되지 않습니다.

이는 생성된 session.py에 구현되며, agent.pycreate_agent(..., checkpointer=get_checkpointer())에서 호출되는 get_checkpointer() 함수를 내보냅니다.

protocol = http

<your-agent-name>-serve 대상을 통해 로컬에서 실행 중인 Agent를 호출하려면 로컬 에이전트가 실행 중인 포트의 /invocations에 간단한 POST 요청을 보낼 수 있습니다. 예를 들어 curl을 사용하면:

Terminal window
curl -N -X POST http://localhost:8081/invocations \
-d '{"prompt": "what is 3 + 5?"}' \
-H "Content-Type: application/json"

Bedrock AgentCore Runtime에 배포된 Agent를 호출하려면 URL 인코딩된 런타임 ARN과 함께 Bedrock AgentCore Runtime 데이터플레인 엔드포인트로 POST 요청을 보낼 수 있습니다.

다음과 같이 인프라에서 런타임 ARN을 얻을 수 있습니다:

import { CfnOutput } from 'aws-cdk-lib';
import { MyProjectAgent } from '@my-scope/common-constructs';
export class ExampleStack extends Stack {
constructor(scope: Construct, id: string) {
const agent = new MyProjectAgent(this, 'MyProjectAgent');
new CfnOutput(this, 'AgentArn', {
value: agent.agentCoreRuntime.agentRuntimeArn,
});
}
}

ARN은 다음 형식을 갖습니다: arn:aws:bedrock-agentcore:<region>:<account>:runtime/<agent-runtime-id>.

그런 다음 :%3A로, /%2F로 바꿔서 ARN을 URL 인코딩할 수 있습니다.

에이전트를 호출하기 위한 Bedrock AgentCore Runtime 데이터플레인 URL은 다음과 같습니다:

https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations

이 URL을 호출하는 정확한 방법은 사용된 인증 방법에 따라 다릅니다.

IAM 인증의 경우 요청은 AWS Signature Version 4 (SigV4)를 사용하여 서명되어야 합니다.

Terminal window
acurl <region> bedrock-agentcore -N -X POST \
'https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations' \
-d '{"prompt": "what is 3 + 5?"}' \
-H 'Content-Type: application/json'
위의 acurl 명령 구성에 대한 자세한 내용을 보려면 여기를 클릭하세요

React 웹사이트에서 Agent를 호출하려면 connection 생성기를 사용할 수 있으며, 이는 올바른 인증(IAM 또는 Cognito)으로 클라이언트를 자동으로 설정합니다.

Terminal window
pnpm nx g @aws/nx-plugin:connection
어떤 파일이 변경될지 확인하기 위해 드라이 런을 수행할 수도 있습니다
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

연결 설정 방법에 대한 자세한 내용은 connection 생성기 가이드를 참조하세요.

protocol = a2a

이 에이전트에서 원격 A2A 에이전트(TypeScript 또는 Python)로 작업을 위임하려면 connection 생성기를 사용하세요. 대상 에이전트에 대한 SigV4 인증 클라이언트를 제공하고 이 에이전트의 agent.py를 AST 변환하여 원격 A2A 에이전트를 @tool 데코레이팅된 위임자로 등록합니다.

Terminal window
pnpm nx g @aws/nx-plugin:connection
어떤 파일이 변경될지 확인하기 위해 드라이 런을 수행할 수도 있습니다
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

연결 설정 방법에 대한 자세한 내용은 connection 생성기 가이드를 참조하세요.

protocol = ag-ui

React 웹사이트에서 AG-UI 에이전트를 호출하려면 connection 생성기를 사용하세요. 이는 올바른 인증(IAM 또는 Cognito)으로 배포된 에이전트에 대해 구성된 CopilotKit 클라이언트를 연결합니다.

Terminal window
pnpm nx g @aws/nx-plugin:connection
어떤 파일이 변경될지 확인하기 위해 드라이 런을 수행할 수도 있습니다
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

연결 설정 방법에 대한 자세한 내용은 connection 생성기 가이드를 참조하세요.

에이전트는 신뢰할 수 없는 입력에 대해 작동하며 도구를 통해 실제 작업을 수행할 수 있으므로, 처음부터 보안을 고려할 가치가 있습니다. 다음 관행은 생성된 에이전트에 적용됩니다.

모델 입력 및 출력을 신뢰할 수 없는 것으로 취급

섹션 제목: “모델 입력 및 출력을 신뢰할 수 없는 것으로 취급”

프롬프트에는 적대적인 지시사항(프롬프트 인젝션)이 포함될 수 있으며, 모델 출력은 비결정적입니다. 따라서 보안에 민감한 로직에서 둘 다 신뢰해서는 안 됩니다:

  • 생성된 예제 도구와 같이 도구에 대해 엄격한 입력 스키마를 정의하세요. 자유 형식 문자열을 허용하는 대신 도구가 실제로 필요로 하는 값(열거형, 길이 제한, 숫자 범위)으로 제한하세요.
  • 모델 출력을 검증이나 인코딩 없이 셸 명령, SQL 쿼리, 코드 평가 또는 렌더링된 HTML에 직접 전달하지 마세요.
  • 도구 및 다운스트림 서비스에 권한 부여 검사를 적용하세요. 모델이 액세스 권한이 있는 도구를 오용하지 못하도록 시스템 프롬프트에만 의존하지 마세요.

Strands의 Prompt EngineeringResponsible AI 가이드는 견고하고 안전을 고려한 시스템 프롬프트 작성을 다룹니다.

도구 권한을 엄격하게 범위 지정

섹션 제목: “도구 권한을 엄격하게 범위 지정”

에이전트의 IAM 역할에 도구가 필요로 하는 권한만 부여하세요. 제공되는 CDK 구성 요소 및 Terraform 모듈은 이러한 목적을 위해 grant* 메서드와 범위가 지정된 정책을 노출합니다. 예를 들어 광범위한 관리형 정책을 연결하는 대신 특정 API를 호출할 수 있는 액세스 권한을 에이전트에 부여합니다. 도구가 사용자를 대신하여 작동하는 경우, 에이전트 자체의 앰비언트 권한보다 호출하는 사용자의 ID(요청 컨텍스트를 통해 전달됨)를 사용하여 작업을 승인하는 것을 선호하세요.

모델 동작이 예상치 못한 방식으로 변경될 수 있으므로, 코드 변경 없이 모델을 신속하게 비활성화하거나 교체할 수 있도록 계획하세요:

  • 운영자가 구성을 업데이트하여 다른 모델로 전환하거나 롤백할 수 있도록 구성에서 모델 ID를 읽으세요(예: MODEL_ID 환경 변수).
  • AI 기능을 완전히 비활성화할 수 있도록 기능 플래그 뒤에 에이전트를 배치하세요. 비활성화된 경우 오류 대신 일반 메시지를 반환하고, 애플리케이션의 나머지 부분이 정상적으로 저하되도록 하세요.

운영 런북에 이러한 제어를 전환하는 방법을 문서화하세요.

  • 사용자 데이터가 포함될 수 있는 프롬프트 및 완료를 로깅하지 마세요. 생성된 에이전트의 모델 오류 로깅 후크는 대화 내용이 아닌 오류 메타데이터만 로깅합니다. 자체 로깅을 추가할 때 이 속성을 유지하세요.
  • 사용자에게 일반적인 오류 메시지를 반환하고, 상세한 오류는 서버 측에서 로깅하세요.
  • 사용자와 세션 간에 대화 상태를 격리하고, 지속된 세션 데이터에 대한 액세스를 승인하세요.
  • 프롬프트 및 출력에서 개인 식별 정보(PII)를 수정하세요. Bedrock Guardrail 민감한 정보 필터(아래 참조) 또는 Strands 에이전트의 경우 PII Redaction 가이드의 접근 방식을 사용하세요.

Amazon Bedrock Guardrails는 모델 입력 및 출력에서 평가되는 구성 가능한 콘텐츠 필터, 거부된 주제 및 민감한 정보(PII) 필터를 제공합니다. 생성된 에이전트가 사용하는 모델에 가드레일을 연결할 수 있습니다:

agent.py
import os
from strands import Agent
from strands.models import BedrockModel
model = BedrockModel(
model_id=os.environ.get("MODEL_ID"),
guardrail_id=os.environ["GUARDRAIL_ID"],
guardrail_version=os.environ.get("GUARDRAIL_VERSION", "DRAFT"),
)
agent = Agent(model=model)

자세한 내용은 Strands Guardrails 가이드를 참조하세요.

connection 생성기를 사용하여 이 프로젝트를 작업 공간의 다른 프로젝트와 통합하세요. 다음 연결에는 이 프로젝트가 포함됩니다:

Strands AgentsPython
React to Python AgentReact 웹사이트에서 Python Agent 호출
CopilotKit
React to AG-UI AgentCopilotKit을 통해 React 웹사이트에서 AG-UI 프로토콜을 노출하는 Agent 호출
Strands AgentsPythonModel Context Protocol
Python Agent to MCPPython Agent를 MCP 서버에 연결
Strands AgentsPythonAgent2Agent
Python Agent to A2A AgentPython Agent를 원격 A2A 에이전트에 연결
Strands AgentsTypeScriptAgent2Agent
TypeScript Agent to A2A AgentTypeScript Agent를 원격 A2A 에이전트에 연결
Strands AgentsPythonAmazon DynamoDBPython
Python Agent to Python DynamoDBPython Agent를 DynamoDB 테이블에 연결
Strands AgentsPythonAmazon Bedrock AgentCore Gateway
Python Agent to AgentCore GatewayPython Agent를 AgentCore Gateway에 연결
Amazon Bedrock AgentCore GatewayStrands Agents
AgentCore Gateway to Agent런타임 대상으로 AgentCore Gateway로 에이전트 프론트