콘텐츠로 이동

에이전트형 AI 던전 게임

스토리 에이전트는 Strands 에이전트로, Game과 컨텍스트용 Action 목록을 입력받아 스토리를 진행합니다. 인벤토리 MCP 서버와 상호작용하여 플레이어의 보유 아이템을 관리하도록 에이전트를 구성할 것입니다.

에이전트를 구현해 보겠습니다. packages/story/dungeon_adventure_story/agent 경로의 다음 파일들을 업데이트하세요:

import os
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from .agent import get_agent
app = BedrockAgentCoreApp()
PORT = int(os.environ.get("PORT", "8080"))
@app.entrypoint
async def invoke(payload, context):
"""Handler for agent invocation"""
player_name = payload.get("playerName")
genre = payload.get("genre")
actions = payload.get("actions")
messages = [{"role": "user", "content": [{"text": "Continue or create a new story..."}]}]
for action in actions:
messages.append({"role": action["role"], "content": [{"text": action["content"]}]})
with get_agent(player_name, genre, session_id=context.session_id) as agent:
stream = agent.stream_async(messages)
async for event in stream:
print(event)
yield (event)
if __name__ == "__main__":
app.run(port=PORT)

이 구성은 다음을 설정합니다:

  • 에이전트 페이로드에서 플레이어, 장르, 액션 추출
  • SigV4 인증으로 MCP 서버를 호출할 수 있는 클라이언트 구성
  • 시스템 프롬프트와 MCP 서버 도구를 가진 에이전트 생성

먼저 코드베이스를 빌드합니다:

Terminal window
pnpm nx run-many --target build --all

이제 다음 명령어로 애플리케이션을 배포할 수 있습니다:

Terminal window
pnpm nx deploy infra dungeon-adventure-infra-sandbox/*

배포는 약 2분 정도 소요됩니다.

배포가 완료되면 다음과 유사한 출력을 확인할 수 있습니다(일부 값은 편집됨):

Terminal window
dungeon-adventure-infra-sandbox-Application
dungeon-adventure-infra-sandbox-Application: deploying... [2/2]
dungeon-adventure-infra-sandbox-Application
Deployment time: 354s
Outputs:
dungeon-adventure-infra-sandbox-Application.ElectroDbTableTableNameXXX = dungeon-adventure-infra-sandbox-Application-ElectroDbTableXXX-YYY
dungeon-adventure-infra-sandbox-Application.GameApiEndpointXXX = https://xxx.execute-api.region.amazonaws.com/prod/
dungeon-adventure-infra-sandbox-Application.GameUIDistributionDomainNameXXX = xxx.cloudfront.net
dungeon-adventure-infra-sandbox-Application.InventoryMcpArn = arn:aws:bedrock-agentcore:region:xxxxxxx:runtime/dungeonadventureventoryMcpServerXXXX-YYYY
dungeon-adventure-infra-sandbox-Application.StoryAgentArn = arn:aws:bedrock-agentcore:region:xxxxxxx:runtime/dungeonadventurecationStoryAgentXXXX-YYYY
dungeon-adventure-infra-sandbox-Application.UserIdentityUserIdentityIdentityPoolIdXXX = region:xxx
dungeon-adventure-infra-sandbox-Application.UserIdentityUserIdentityUserPoolIdXXX = region_xxx

다음 방법으로 API를 테스트할 수 있습니다:

  • 에이전트 서버 로컬 인스턴스를 시작하고 curl로 호출
  • JWT 토큰을 사용하여 배포된 API를 curl로 호출

다음 명령어로 로컬 에이전트 서버를 시작하세요:

Terminal window
PORT=9999 INVENTORY_MCP_ARN=arn:aws:bedrock-agentcore:region:xxxxxxx:runtime/dungeonadventureventoryMcpServerXXXX-YYYY AWS_REGION=<region> pnpm nx run dungeon_adventure.story:agent-serve

에이전트 서버가 실행되면(콘솔 출력 없음) 다음 명령어로 호출하세요:

Terminal window
curl -N -X POST http://127.0.0.1:9999/invocations \
-d '{"genre":"superhero", "actions":[], "playerName":"UnnamedHero"}' \
-H "Content-Type: application/json" \
-H "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: abcdefghijklmnopqrstuvwxyz-123456789"

명령어가 성공적으로 실행되면 다음과 유사한 스트리밍 이벤트를 볼 수 있습니다:

data: {"init_event_loop": true}
data: {"start": true}
data: {"start_event_loop": true}
data: {"event": {"messageStart": {"role": "assistant"}}}
data: {"event": {"contentBlockDelta": {"delta": {"text": "Welcome"}, "contentBlockIndex": 0}}}
...

축하합니다. Bedrock AgentCore 런타임에 첫 번째 Strands 에이전트를 구축하고 배포했습니다! 🎉🎉🎉