Ejemplos de Amazon Bedrock Agents Runtime con el SDK para Rust - AWS Ejemplos de código de SDK

Hay más ejemplos de AWS SDK disponibles en el GitHub repositorio de ejemplos de AWS Doc SDK.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejemplos de Amazon Bedrock Agents Runtime con el SDK para Rust

Los siguientes ejemplos de código muestran cómo realizar acciones e implementar escenarios comunes mediante el uso del AWS SDK para Rust con Amazon Bedrock Agents Runtime.

Las acciones son extractos de código de programas más grandes y deben ejecutarse en contexto. Mientras las acciones muestran cómo llamar a las distintas funciones de servicio, es posible ver las acciones en contexto en los escenarios relacionados.

En cada ejemplo se incluye un enlace al código de origen completo, con instrucciones de configuración y ejecución del código en el contexto.

Acciones

En el siguiente ejemplo de código, se muestra cómo utilizar InvokeAgent.

SDK para Rust
nota

Hay más información al respecto. GitHub Busque el ejemplo completo y aprenda a configurar y ejecutar en el Repositorio de ejemplos de código de AWS.

use aws_config::{BehaviorVersion, SdkConfig}; use aws_sdk_bedrockagentruntime::{ self as bedrockagentruntime, types::{error::ResponseStreamError, ResponseStream}, }; #[allow(unused_imports)] use mockall::automock; const BEDROCK_AGENT_ID: &str = "AJBHXXILZN"; const BEDROCK_AGENT_ALIAS_ID: &str = "AVKP1ITZAA"; const BEDROCK_AGENT_REGION: &str = "us-east-1"; #[cfg(not(test))] pub use EventReceiverImpl as EventReceiver; #[cfg(test)] pub use MockEventReceiverImpl as EventReceiver; pub struct EventReceiverImpl { inner: aws_sdk_bedrockagentruntime::primitives::event_stream::EventReceiver< ResponseStream, ResponseStreamError, >, } #[cfg_attr(test, automock)] impl EventReceiverImpl { #[allow(dead_code)] pub fn new( inner: aws_sdk_bedrockagentruntime::primitives::event_stream::EventReceiver< ResponseStream, ResponseStreamError, >, ) -> Self { Self { inner } } pub async fn recv( &mut self, ) -> Result< Option<ResponseStream>, aws_sdk_bedrockagentruntime::error::SdkError< ResponseStreamError, aws_smithy_types::event_stream::RawMessage, >, > { self.inner.recv().await } } #[tokio::main] async fn main() -> Result<(), Box<bedrockagentruntime::Error>> { let result = invoke_bedrock_agent("I need help.".to_string(), "123".to_string()).await?; println!("{}", result); Ok(()) } async fn invoke_bedrock_agent( prompt: String, session_id: String, ) -> Result<String, bedrockagentruntime::Error> { let sdk_config: SdkConfig = aws_config::defaults(BehaviorVersion::latest()) .region(BEDROCK_AGENT_REGION) .load() .await; let bedrock_client = bedrockagentruntime::Client::new(&sdk_config); let command_builder = bedrock_client .invoke_agent() .agent_id(BEDROCK_AGENT_ID) .agent_alias_id(BEDROCK_AGENT_ALIAS_ID) .session_id(session_id) .input_text(prompt); let response = command_builder.send().await?; let response_stream = response.completion; let event_receiver = EventReceiver::new(response_stream); process_agent_response_stream(event_receiver).await } async fn process_agent_response_stream( mut event_receiver: EventReceiver, ) -> Result<String, bedrockagentruntime::Error> { let mut full_agent_text_response = String::new(); while let Some(event_result) = event_receiver.recv().await? { match event_result { ResponseStream::Chunk(chunk) => { if let Some(bytes) = chunk.bytes { match String::from_utf8(bytes.into_inner()) { Ok(text_chunk) => { full_agent_text_response.push_str(&text_chunk); } Err(e) => { eprintln!("UTF-8 decoding error for chunk: {}", e); } } } } _ => { panic!("received an unhandled event type from Bedrock stream",); } } } Ok(full_agent_text_response) } #[cfg(test)] mod test { use super::*; #[tokio::test] async fn test_process_agent_response_stream() { let mut mock = MockEventReceiverImpl::default(); mock.expect_recv().times(1).returning(|| { Ok(Some( aws_sdk_bedrockagentruntime::types::ResponseStream::Chunk( aws_sdk_bedrockagentruntime::types::PayloadPart::builder() .set_bytes(Some(aws_smithy_types::Blob::new(vec![ 116, 101, 115, 116, 32, 99, 111, 109, 112, 108, 101, 116, 105, 111, 110, ]))) .build(), ), )) }); // end the stream mock.expect_recv().times(1).returning(|| Ok(None)); let response = process_agent_response_stream(mock).await.unwrap(); assert_eq!("test completion", response); } #[tokio::test] #[should_panic(expected = "received an unhandled event type from Bedrock stream")] async fn test_process_agent_response_stream_error() { let mut mock = MockEventReceiverImpl::default(); mock.expect_recv().times(1).returning(|| { Ok(Some( aws_sdk_bedrockagentruntime::types::ResponseStream::Trace( aws_sdk_bedrockagentruntime::types::TracePart::builder().build(), ), )) }); let _ = process_agent_response_stream(mock).await.unwrap(); } }
  • Para obtener más información sobre la API, consulta InvokeAgentla referencia sobre la API de AWS SDK para Rust.