use agent::{Message, ModelConfig, ModelProvider};
use agent::provider::{openai::OpenAIProvider, anthropic::AnthropicProvider, google::GoogleProvider};
use std::env;
#[tokio::main]
async fn main() -> agent::Result<()> {
println!("=== AI Provider 示例 ===\n");
let messages = vec![
Message::system("你是一个有用的助手"),
Message::user("你好,请介绍一下你自己"),
];
let config = ModelConfig {
model: "gpt-4".to_string(),
temperature: 0.7,
max_tokens: Some(1000),
..Default::default()
};
if let Ok(api_key) = env::var("OPENAI_API_KEY") {
println!("测试 OpenAI Provider:");
let provider = OpenAIProvider::new(api_key);
match provider.complete(messages.clone(), &config).await {
Ok(response) => {
println!("响应: {}", response.content);
if let Some(usage) = response.usage {
println!("Token 使用: {}/{}", usage.prompt_tokens, usage.completion_tokens);
}
}
Err(e) => println!("错误: {}", e),
}
println!();
}
if let Ok(api_key) = env::var("ANTHROPIC_API_KEY") {
println!("测试 Anthropic Provider:");
let provider = AnthropicProvider::new(api_key);
let config = ModelConfig {
model: "claude-3-sonnet-20240229".to_string(),
..config.clone()
};
match provider.complete(messages.clone(), &config).await {
Ok(response) => {
println!("响应: {}", response.content);
if let Some(usage) = response.usage {
println!("Token 使用: {}/{}", usage.prompt_tokens, usage.completion_tokens);
}
}
Err(e) => println!("错误: {}", e),
}
println!();
}
if let Ok(api_key) = env::var("GOOGLE_API_KEY") {
println!("测试 Google Provider:");
let provider = GoogleProvider::new(api_key);
let config = ModelConfig {
model: "gemini-pro".to_string(),
..config
};
match provider.complete(messages.clone(), &config).await {
Ok(response) => {
println!("响应: {}", response.content);
if let Some(usage) = response.usage {
println!("Token 使用: {}/{}", usage.prompt_tokens, usage.completion_tokens);
}
}
Err(e) => println!("错误: {}", e),
}
}
Ok(())
}