Salta al contenuto

Come posso utilizzare AWS CDK per aggiornare un agente Amazon Bedrock?

4 minuti di lettura
0

Desidero utilizzare il Kit di sviluppo per il cloud AWS (AWS CDK) per aggiornare un agente Amazon Bedrock.

Breve descrizione

Per aggiornare un agente Amazon Bedrock esistente utilizzando AWS CDK, devi modificare il codice AWS CDK che definisce l'agente. Quindi distribuisci le modifiche.

Nota: per creare un agente Amazon Bedrock utilizzando AWS CDK, consulta How do I use the AWS CDK to create an Amazon Bedrock Agent? (Come posso utilizzare AWS CDK per creare un agente Amazon Bedrock?)

Risoluzione

Modifica le proprietà dell'agente

Per modificare l'agente, modifica almeno una delle seguenti proprietà dell'agente nel codice AWS CDK:

  • Richiesta di istruzioni: aggiorna le istruzioni dell'agente per perfezionarne il comportamento.
  • Modello di fondazione: modifica il modello di base sottostante utilizzato dall'agente.
  • Gruppi di azione: aggiorna le funzioni Lambda o altre risorse associate per modificare i gruppi di azioni esistenti, aggiungere nuovi gruppi o rimuovere i gruppi non necessari.
  • Knowledge base: collega o scollega le knowledge base o aggiorna le configurazioni della knowledge base.
  • Guardrail: modifica le impostazioni del guardrail.
  • Descrizione: aggiorna la descrizione dell'agente.
  • Impostazioni di configurazione: modifica altri parametri di configurazione dell'agente, ad esempio idleSessionTTLInSeconds o agentResourceRoleArn.

Aggiorna la versione e l'alias dell'agente

Per modificare un agente distribuito, aggiorna l'agente e creane una nuova versione che includa le modifiche. Quando modifichi agente, le modifiche si applicano a una versione bozza. Quando crei una nuova versione dell'agente, la versione mantiene lo stato che aveva la bozza nel momento in cui è stata creata la versione.

Per creare una nuova versione, crea un alias dell'agente associato alla nuova versione.

Di seguito è riportato un esempio di codice AWS CDK con il modello di fondazione, l'istruzione, la descrizione e il parametro idleSessionTTLInSeconds modificati:

from aws_cdk import (
    Stack,
    aws_bedrock as bedrock,
    aws_iam as iam,
    aws_s3 as s3,
    aws_lambda as lambda_,
    CfnOutput,
)
from constructs import Construct
class BedrockAgentCdkStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        # Create Lambda function for action group
        action_lambda = lambda_.Function(
            self,
            "AgentActionFunction",
            runtime=lambda_.Runtime.PYTHON_3_11,
            handler="index.handler",
            code=lambda_.Code.from_inline("""
def handler(event, context):
    import json

    action = event.get('actionGroup', '')
    api_path = event.get('apiPath', '')
    parameters = event.get('parameters', [])

    # Process the action
    if api_path == '/getWeather':
        city = next((p['value'] for p in parameters if p['name'] == 'city'), 'Unknown')
        result = {
            'city': city,
            'temperature': 72,
            'condition': 'Sunny'
        }
    else:
        result = {'error': 'Unknown action'}

    return {
        'messageVersion': '1.0',
        'response': {
            'actionGroup': action,
            'apiPath': api_path,
            'httpMethod': event.get('httpMethod', 'GET'),
            'httpStatusCode': 200,
            'responseBody': {
                'application/json': {
                    'body': json.dumps(result)
                }
            }
        }
    }
            """),
        )
        # IAM role for agent
        agent_role = iam.Role(
            self,
            "BedrockAgentRole",
            assumed_by=iam.ServicePrincipal("bedrock.amazonaws.com"),
        )
        agent_role.add_to_policy(
            iam.PolicyStatement(
                actions=["bedrock:InvokeModel"],
                resources=[
                    f"arn:aws:bedrock:{self.region}::foundation-model/anthropic.claude-v2",
                    f"arn:aws:bedrock:{self.region}::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0"
                ],
            )
        )
        # Allow agent to invoke Lambda
        action_lambda.grant_invoke(agent_role)
        # Create Bedrock Agent
        agent = bedrock.CfnAgent(
            self,
            "BedrockAgent", # ID of your existing agent in CDK
            agent_name="my-bedrock-agent",  # Same name to update
            agent_resource_role_arn=agent_role.role_arn,
            foundation_model="anthropic.claude-v2", # Changed
            instruction="Updated instruction: You are an expert AWS assistant.",  # Changed
            description="Updated description",  # Changed
            idle_session_ttl_in_seconds=1800,  # Changed
        )
        # Create Action Group
        action_group = bedrock.CfnAgent.AgentActionGroupProperty(
            action_group_name="weather-actions",
            description="Actions for getting weather information",
            action_group_state="ENABLED",
            action_group_executor=bedrock.CfnAgent.ActionGroupExecutorProperty(
                lambda_=action_lambda.function_arn
            ),
            api_schema=bedrock.CfnAgent.APISchemaProperty(
                payload="""
{
  "openapi": "3.0.0",
  "info": {
    "title": "Weather API",
    "version": "1.0.0",
    "description": "API for getting weather information"
  },
  "paths": {
    "/getWeather": {
      "get": {
        "summary": "Get weather for a city",
        "description": "Returns current weather information for the specified city",
        "operationId": "getWeather",
        "parameters": [
          {
            "name": "city",
            "in": "query",
            "description": "Name of the city",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "city": {"type": "string"},
                    "temperature": {"type": "number"},
                    "condition": {"type": "string"}
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
                """
            ),
        )
        # Update agent with action groups
        agent.action_groups = [action_group]
        # Create agent version and update alias to point to the new version
        agent_alias = bedrock.CfnAgentAlias(
            self,
            "AgentAlias",
            agent_alias_name="prod",
            agent_id=agent.attr_agent_id,
            description='updated',
        )
        CfnOutput(self, "AgentId", value=agent.attr_agent_id)
        CfnOutput(self, "AgentAliasId", value=agent_alias.attr_agent_alias_id)

Sintetizza e distribuisci

Dopo aver modificato il codice AWS CDK, devi sintetizzare il modello di AWS CloudFormation e distribuire lo stack di CloudFormation.

Per sintetizzare il modello di CloudFormation, esegui questo comando:

cdk synth

Per distribuire lo stack, esegui questo comando:

cdk deploy

AWS CDK è idempotente. Quando esegui il comando cdk deploy più volte, AWS CDK applica le modifiche solo se c'è una differenza tra il codice da distribuire e il codice distribuito.

Risorse aggiuntive

class Agent (construct) (class Agent (costrutto))

CfnAgent

AWS UFFICIALEAggiornata 7 mesi fa