使用 SDK for Rust 的 Amazon Bedrock Agents 執行期範例 - 適用於 Rust 的 AWS SDK

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 SDK for Rust 的 Amazon Bedrock Agents 執行期範例

下列程式碼範例示範如何使用 AWS SDK for Rust 搭配 Amazon Bedrock Agents 執行期來執行動作和實作常見案例。

Actions 是大型程式的程式碼摘錄,必須在內容中執行。雖然動作會告訴您如何呼叫個別服務函數,但您可以在其相關情境中查看內容中的動作。

每個範例都包含完整原始程式碼的連結,您可以在其中找到如何在內容中設定和執行程式碼的指示。

主題

動作

以下程式碼範例顯示如何使用 InvokeAgent

SDK for Rust
注意

GitHub 上提供更多範例。尋找完整範例,並了解如何在 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(); } }
  • 如需 API 詳細資訊,請參閱《適用於 AWS Rust 的 SDK API 參考》中的 InvokeAgent