use langchainrust::core::batch::{BatchClient, BatchProvider, BatchRequest};
use langchainrust::Message;
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = std::env::var("OPENAI_API_KEY").expect("请设置 OPENAI_API_KEY 环境变量");
let base_url = std::env::var("OPENAI_BASE_URL")
.unwrap_or_else(|_| "https://api.openai.com/v1".to_string());
let client = BatchClient::new(BatchProvider::OpenAI, &api_key).with_base_url(&base_url);
let requests = vec![
BatchRequest {
custom_id: "translate-1".into(),
messages: vec![Message::human("将以下英文翻译为中文: Hello, World!")],
model: "gpt-4o-mini".into(),
temperature: Some(0.3),
max_tokens: None,
},
BatchRequest {
custom_id: "translate-2".into(),
messages: vec![Message::human("将以下英文翻译为中文: Rust is awesome!")],
model: "gpt-4o-mini".into(),
temperature: Some(0.3),
max_tokens: None,
},
BatchRequest {
custom_id: "summarize-1".into(),
messages: vec![Message::human(
"用一句话总结: Rust 是一门系统编程语言,注重内存安全和并发性能。",
)],
model: "gpt-4o-mini".into(),
temperature: Some(0.3),
max_tokens: None,
},
];
println!("提交 {} 个批量请求...", requests.len());
let results = client.submit_and_wait(requests, 5_000, 300_000).await?;
println!("\n=== 批量结果 ===");
for result in &results {
match &result.result {
Ok(llm_result) => {
println!("[{}] {}", result.custom_id, llm_result.content);
}
Err(e) => {
println!("[{}] 错误: {}", result.custom_id, e);
}
}
}
Ok(())
}