View a markdown version of this page

Implemente AG-UI servidores no AgentCore Runtime - Amazon Bedrock AgentCore

Implemente AG-UI servidores no AgentCore Runtime

O Amazon Bedrock AgentCore Runtime permite que você implante e execute servidores Agent User Interface (AG-UI) no AgentCore Runtime. Este guia explica como criar, testar e implantar seu primeiro AG-UI servidor.

Nesta seção, você aprende:

  • Como o Amazon Bedrock oferece suporte AgentCore AG-UI

  • Como criar um AG-UI servidor

  • Como testar seu servidor localmente

  • Como implantar seu servidor em AWS

  • Como invocar seu servidor implantado

Para obter mais informações sobre AG-UI, consulte contrato de AG-UI protocolo.

Como o Amazon Bedrock oferece suporte AgentCore AG-UI

O suporte ao AG-UI protocolo AgentCore do Amazon Bedrock permite a integração com servidores de interface de usuário do agente, atuando como uma camada de proxy. Quando configurado para AG-UI, o Amazon Bedrock AgentCore espera que os contêineres executem servidores 8080 na porta do /invocations caminho para HTTP/SSE ou /ws para WebSocket as conexões. Embora AG-UI use a mesma porta e os mesmos caminhos do protocolo HTTP, o tempo de execução os distingue com base no --protocol sinalizador especificado durante a configuração da implantação.

O Amazon Bedrock AgentCore atua como um proxy entre os clientes e seu AG-UI contêiner. As solicitações da InvokeAgentRuntimeAPI são passadas para seu contêiner sem modificação. O Amazon Bedrock AgentCore lida com autenticação (SigV4/OAuth 2.0), isolamento de sessão e escalabilidade.

Principais diferenças em relação a outros protocolos:

Porta

AG-UI servidores executados na porta 8080 (igual a HTTP, versus 8000 para MCP, 9000 para A2A)

Path

AG-UI servidores usam /invocations para HTTP/SSE e /ws para WebSocket (o mesmo que o protocolo HTTP)

Formato da mensagem

Usa fluxos de Server-Sent eventos via Eventos (SSE) para streaming ou comunicação WebSocket bidirecional

Foco do protocolo

Agent-to-User interação (versus MCP para ferramentas, A2A para agente a agente)

Autenticação

Suporta esquemas de autenticação SigV4 e OAuth 2.0

Para obter mais informações, consulte https://docs.ag-ui.com/introduction.

Usando AG-UI com o AgentCore Runtime

Neste tutorial, você cria, testa e implanta um AG-UI servidor.

Para exemplos completos e implementações específicas da estrutura, consulte a documentação de início AG-UI rápido e o Dojo. AG-UI

Pré-requisitos

  • Python 3.12 ou superior, ou versão Node.js 18+ TypeScript, instalado com uma compreensão básica do idioma escolhido

  • Uma AWS conta com permissões apropriadas e credenciais locais configuradas

  • Compreensão do AG-UI protocolo e dos conceitos de comunicação entre agente e usuário baseados em eventos

Etapa 1: Crie seu AG-UI servidor

AG-UI é suportado por várias estruturas de agentes. Escolha a estrutura que melhor atenda às suas necessidades. AWS Strands fornece AG-UI integrações primárias para Python e. TypeScript

Instalar os pacotes obrigatórios

Instale pacotes para AWS Strands com AG-UI suporte:

exemplo
Python
  1. pip install fastapi pip install uvicorn pip install ag-ui-strands
TypeScript
  1. Crie um package.json primeiro:

    { "name": "my-agui-server", "type": "module", "scripts": { "build": "tsc" }, "dependencies": { "@ag-ui/aws-strands": "^0.1.0", "@strands-agents/sdk": "^1.1.0" }, "devDependencies": { "@types/express": "^5.0.0", "@types/node": "^22.0.0", "tsx": "^4.0.0", "typescript": "^5.0.0" } }

    Em seguida, instale as dependências:

    npm install

Para outras estruturas, consulte as integrações da AG-UI estrutura.

Crie seu primeiro AG-UI servidor

Crie seu arquivo de AG-UI servidor no idioma de sua escolha. Os dois exemplos abaixo produzem um servidor que escuta na porta8080, expõe /invocations o AG-UI tráfego e /ping as verificações de integridade — o contrato que o AgentCore Runtime espera dos AG-UI contêineres.

exemplo
Python
  1. Crie um novo arquivo chamadomy_agui_server.py. Este exemplo usa AWS Strands com AG-UI:

    # my_agui_server.py import uvicorn from fastapi import FastAPI, Request from fastapi.responses import StreamingResponse, JSONResponse from ag_ui_strands import StrandsAgent from ag_ui.core import RunAgentInput from ag_ui.encoder import EventEncoder from strands import Agent # Create a simple Strands agent strands_agent = Agent( system_prompt="You are a helpful assistant.", ) # Wrap with AG-UI protocol support agui_agent = StrandsAgent( agent=strands_agent, name="my_agent", description="A helpful assistant", ) # FastAPI server app = FastAPI() @app.post("/invocations") async def invocations(input_data: dict, request: Request): """Main AG-UI endpoint that returns event streams.""" accept_header = request.headers.get("accept") encoder = EventEncoder(accept=accept_header) async def event_generator(): run_input = RunAgentInput(**input_data) async for event in agui_agent.run(run_input): yield encoder.encode(event) return StreamingResponse( event_generator(), media_type=encoder.get_content_type() ) @app.get("/ping") async def ping(): return JSONResponse({"status": "Healthy"}) if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8080)
TypeScript
  1. Crie um novo arquivo chamadomy-agui-server.ts. Este exemplo usa AWS Strands com AG-UI:

    // my-agui-server.ts import { Agent } from "@strands-agents/sdk"; import { StrandsAgent } from "@ag-ui/aws-strands"; import { createStrandsApp } from "@ag-ui/aws-strands/server"; async function main(): Promise<void> { // Create a simple Strands agent const strandsAgent = new Agent({ systemPrompt: "You are a helpful assistant.", }); // Wrap with AG-UI protocol support const aguiAgent = new StrandsAgent({ agent: strandsAgent, name: "my_agent", description: "A helpful assistant", }); // Express app exposing the AgentCore-required paths on port 8080 const app = await createStrandsApp(aguiAgent, { path: "/invocations", pingPath: "/ping", }); app.listen(8080, () => { console.log("AG-UI server running on port 8080"); }); } void main();

Para obter exemplos completos e específicos da estrutura, consulte:

Entendendo o código

Streams de eventos

AG-UI usa Server-Sent Eventos (SSE) para transmitir eventos digitados para o cliente

/invocations Endpoint

Endpoint primário para HTTP/SSE comunicação (o mesmo que o protocolo HTTP)

Porta 8080

AG-UI servidores executados na porta 8080 por padrão no AgentCore Runtime

Etapa 2: testar seu AG-UI servidor localmente

Execute e teste seu AG-UI servidor em um ambiente de desenvolvimento local.

Inicie seu AG-UI servidor

Execute seu AG-UI servidor localmente:

exemplo
Python
  1. python my_agui_server.py
TypeScript
  1. npx tsx my-agui-server.ts

Você deve ver a saída indicando que o servidor está sendo executado na porta8080.

Testar o endpoint

Teste o endpoint SSE com uma solicitação formatada AG-UI corretamente:

curl -N -X POST http://localhost:8080/invocations \ -H "Content-Type: application/json" \ -d '{ "threadId": "test-123", "runId": "run-456", "state": {}, "messages": [{"role": "user", "content": "Hello, agent!", "id": "msg-1"}], "tools": [], "context": [], "forwardedProps": {} }'

Você deve ver os fluxos de AG-UI eventos retornados no formato SSE, incluindo RUN_STARTEDTEXT_MESSAGE_CONTENT, e RUN_FINISHED eventos.

Etapa 3: Implantar seu AG-UI servidor no Bedrock AgentCore Runtime

Implante seu AG-UI servidor AWS usando o kit de ferramentas para AgentCore iniciantes do Amazon Bedrock.

Instalar ferramentas de implantação

Instale o kit de ferramentas para AgentCore iniciantes do Amazon Bedrock:

pip install bedrock-agentcore-starter-toolkit

Comece criando uma pasta de projeto com a seguinte estrutura:

exemplo
Python
  1. ## Project Folder Structure your_project_directory/ ├── my_agui_server.py # Your main agent code ├── requirements.txt # Dependencies for your agent

    Crie um novo arquivo chamado requirements.txt com suas dependências:

    fastapi uvicorn ag-ui-strands
TypeScript
  1. ## Project Folder Structure your_project_directory/ ├── my-agui-server.ts # Your main agent code ├── package.json # Dependencies for your agent └── tsconfig.json # TypeScript compiler configuration

    Crie umtsconfig.json:

    { "compilerOptions": { "target": "ES2022", "lib": ["ES2022", "DOM"], "module": "NodeNext", "moduleResolution": "NodeNext", "outDir": "./dist", "strict": true, "esModuleInterop": true }, "include": ["*.ts"] }

Configurar o grupo de usuários do Cognito para autenticação

Configure a autenticação para acesso seguro ao seu servidor implantado. Para obter instruções detalhadas de configuração do Cognito, consulte Configurar o grupo de usuários do Cognito para autenticação. Isso fornece os tokens OAuth necessários para acesso seguro ao seu servidor implantado.

Configure seu AG-UI servidor para implantação

Depois de configurar a autenticação, crie a configuração de implantação. Passe o ponto de entrada que corresponde ao idioma que você usou:

exemplo
Python
  1. agentcore configure -e my_agui_server.py --protocol AGUI
TypeScript
  1. agentcore configure -e my-agui-server.ts --protocol AGUI
  • Selecione o protocolo como AGUI

  • Configure com a configuração OAuth conforme configurado na etapa anterior

Implemente em AWS

Implante seu agente:

agentcore deploy

Após a implantação, você receberá um ARN de tempo de execução do agente que se parece com:

arn:aws:bedrock-agentcore:us-west-2:accountId:runtime/my_agui_server-xyz123

Etapa 4: invocar seu servidor implantado AG-UI

Invoque seu AgentCore AG-UI servidor Amazon Bedrock implantado e interaja com os streams de eventos.

Configurar variáveis de ambiente

Configurar variáveis de ambiente

  1. Exporte o token do portador como uma variável de ambiente. Para a configuração do token do portador, consulte Configurar o grupo de usuários do Cognito para autenticação.

    export BEARER_TOKEN="<BEARER_TOKEN>"
  2. Exporte o ARN do agente.

    export AGENT_ARN="arn:aws:bedrock-agentcore:us-west-2:accountId:runtime/my_agui_server-xyz123"

Invocar o servidor AG-UI

Para invocar o AG-UI servidor programaticamente, escolha o idioma que corresponde ao seu cliente:

exemplo
Python
  1. Instale os pacotes obrigatórios:

    pip install httpx httpx-sse

    Em seguida, use o seguinte código de cliente:

    import asyncio import json import os from urllib.parse import quote from uuid import uuid4 import httpx from httpx_sse import aconnect_sse async def invoke_agui_agent(message: str): agent_arn = os.environ.get('AGENT_ARN') bearer_token = os.environ.get('BEARER_TOKEN') escaped_arn = quote(agent_arn, safe='') url = f"https://bedrock-agentcore.us-west-2.amazonaws.com/runtimes/{escaped_arn}/invocations?qualifier=DEFAULT" headers = { "Authorization": f"Bearer {bearer_token}", "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id": str(uuid4()), } payload = { "threadId": str(uuid4()), "runId": str(uuid4()), "messages": [{"id": str(uuid4()), "role": "user", "content": message}], "state": {}, "tools": [], "context": [], "forwardedProps": {}, } async with httpx.AsyncClient(timeout=300) as client: async with aconnect_sse(client, "POST", url, headers=headers, json=payload) as sse: async for event in sse.aiter_sse(): data = json.loads(event.data) event_type = data.get("type") if event_type == "TEXT_MESSAGE_CONTENT": print(data.get("delta", ""), end="", flush=True) elif event_type == "RUN_ERROR": print(f"Error: {data.get('code')} - {data.get('message')}") asyncio.run(invoke_agui_agent("Hello!"))
TypeScript
  1. Instale os pacotes obrigatórios:

    npm install @ag-ui/client

    Em seguida, use o seguinte código de cliente:

    import { HttpAgent, AgentSubscriber } from "@ag-ui/client"; import { randomUUID } from "crypto"; async function invokeAguiAgent(message: string): Promise<void> { const agentArn = process.env.AGENT_ARN!; const bearerToken = process.env.BEARER_TOKEN!; const escapedArn = encodeURIComponent(agentArn); const agent = new HttpAgent({ url: `https://bedrock-agentcore.us-west-2.amazonaws.com/runtimes/${escapedArn}/invocations?qualifier=DEFAULT`, headers: { Authorization: `Bearer ${bearerToken}`, "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id": randomUUID(), }, }); agent.messages = [{ id: randomUUID(), role: "user", content: message }]; const subscriber: AgentSubscriber = { onTextMessageContentEvent: ({ event }) => { process.stdout.write(event.delta); }, onRunErrorEvent: ({ event }) => { console.error(`Error: ${event.code ?? "RUN_ERROR"} - ${event.message}`); }, }; await agent.runAgent({}, subscriber); } void invokeAguiAgent("Hello!");

Para criar aplicativos de interface de usuário completos, consulte CopilotKitou o SDK AG-UI TypeScript do cliente.

Apêndice

Configurar o grupo de usuários do Cognito para autenticação

Para obter instruções detalhadas de configuração do Cognito, consulte Configurar o grupo de usuários do Cognito para autenticação na documentação do MCP. O processo de configuração é idêntico para AG-UI servidores.

Solução de problemas

AG-UI-specific Problemas comuns

A seguir estão os problemas comuns que você pode encontrar:

Conflitos portuários

AG-UI os servidores devem ser executados na porta 8080 no AgentCore ambiente Runtime

Incompatibilidade do método de autorização

Certifique-se de que sua solicitação use o mesmo método de autenticação (OAuth ou SigV4) com o qual o agente foi configurado

Erros no formato do evento

Garanta que seus eventos sigam a especificação do AG-UI protocolo. Veja a documentação de AG-UI eventos