

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 애플리케이션에서 에이전트 간접 호출
<a name="agents-invoke-agent"></a>

[Amazon Bedrock Agents 런타임 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#bra-rt)로 [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html)를 요청하여 애플리케이션에서 에이전트를 사용합니다.

기본적으로 `InvokeAgent`의 응답에는 에이전트의 전체 응답이 포함된 청크가 포함되며, 완료하는 데 시간이 걸릴 수 있습니다. 대안적인 방법으로 응답을 여러 개의 작은 청크로 스트리밍하도록 `InvokeAgent`를 구성할 수 있습니다. 이렇게 하면 에이전트의 초기 응답 지연 시간이 줄어듭니다.

**스트리밍 응답**

필요에 따라 스트리밍 구성([StreamingConfigurations](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_StreamingConfigurations.html))에서 `streamFinalResponse`를 `true`로 설정하여 응답 스트리밍을 활성화할 수 있습니다. 응답 스트림에는 응답의 각 부분에 대해 청크가 있는 여러 이벤트가 순서대로 포함됩니다.

응답을 스트리밍하려면 에이전트 실행 역할에 구성된 에이전트 모델에 대한 `bedrock:InvokeModelWithResponseStream` 권한이 포함되어 있는지 확인합니다. 자세한 내용은 [에이전트 서비스 역할에 대한 자격 증명 기반 권한](agents-permissions.md#agents-permissions-identity) 단원을 참조하십시오.

에이전트가 가드레일로 구성된 경우 `StreamingConfigurations`에서 `applyGuardrailInterval`을 지정하여 발신 응답 문자에 대한 `ApplyGuardrail` 직접 호출 빈도(예: 50자마다)를 제어할 수도 있습니다.

기본적으로 가드레일 간격은 50자로 설정됩니다. 더 큰 간격을 지정하면 `ApplyGuardrail` 직접 호출 수가 적은 더 큰 청크로 응답이 생성됩니다. 다음 예제에서는 *Hello, I am an agent* 입력 문자열에 대해 생성된 응답을 보여줍니다.

**청크 단위의 응답 예제: 간격을 3자로 설정**

```
'Hel', 'lo, ', 'I am', ' an', ' Age', 'nt'
```

각 청크에는 마지막 청크를 제외하고 3자 이상이 있습니다.

**청크 단위의 응답 예제: 간격을 20자 이상으로 설정**

```
'Hello, I am an Agent'
```

## 에이전트 간접 호출
<a name="invoke-agent-example"></a>

다음 Python 예제에서는 [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html) 작업을 직접 호출하고 에이전트의 출력과 직접 호출이 생성하는 [추적](trace-events.md) 정보를 표시하는 방법을 보여줍니다.

**에이전트를 간접 호출하려면**

1. [에이전트를 수동으로 생성 및 구성](agents-create.md)의 지침에 따라 에이전트를 생성합니다. 에이전트의 ID를 기록해 둡니다. 필요한 경우 나중에 ID를 가져올 수 있습니다. 자세한 내용은 [에이전트 정보 확인](agents-view.md) 단원을 참조하십시오.

1. [에이전트 별칭 생성](deploy-agent-proc.md)의 지침에 따라 에이전트의 별칭을 생성합니다. 별칭의 ID를 기록해 둡니다. 필요한 경우 나중에 ID를 가져올 수 있습니다. 자세한 내용은 [Amazon Bedrock에서 에이전트의 별칭에 대한 정보 확인](agents-alias-view.md) 단원을 참조하십시오.

1. 다음 코드를 실행합니다. `agent_id`의 값을 에이전트의 ID로 업데이트하고 `alias_id`의 값을 에이전트의 별칭 ID로 업데이트합니다. 에이전트에서 응답을 스트리밍하려면 `streamFinalResponse` 값을 `True`로 변경합니다. `applyGuardrailInterval`의 값을 변경하여 가드레일 간격을 변경할 수도 있습니다.

   ```
   import boto3
   import logging
   
   from botocore.exceptions import ClientError
   
   
   logging.basicConfig(level=logging.INFO)
   logger = logging.getLogger(__name__)
   
   def invoke_agent(client, agent_id, alias_id, prompt, session_id):
           response = client.invoke_agent(
               agentId=agent_id,
               agentAliasId=alias_id,
               enableTrace=True,
               sessionId = session_id,
               inputText=prompt,
               streamingConfigurations = { 
       "applyGuardrailInterval" : {{20}},
         "streamFinalResponse" : {{False}}
               }
           )
           completion = ""
           for event in response.get("completion"):
               #Collect agent output.
               if 'chunk' in event:
                   chunk = event["chunk"]
                   completion += chunk["bytes"].decode()
               
               # Log trace output.
               if 'trace' in event:
                   trace_event = event.get("trace")
                   trace = trace_event['trace']
                   for key, value in trace.items():
                       logging.info("%s: %s",key,value)
   
           print(f"Agent response: {completion}")
   
   
   if __name__ == "__main__":
   
       client=boto3.client(
               service_name="bedrock-agent-runtime"
           )
       
       agent_id = "{{AGENT_ID}}"
       alias_id = "{{ALIAS_ID}}"
       session_id = "{{MY_SESSION_ID}}"
       prompt = "{{Prompt to send to agent}}"
   
       try:
   
           invoke_agent(client, agent_id, alias_id, prompt, session_id)
   
       except ClientError as e:
           print(f"Client error: {str(e)}")
           logger.error("Client error: %s", {str(e)})
   ```