proxy_example/
proxy_example.rs

1use ai_lib::types::common::Content;
2use ai_lib::{AiClient, ChatCompletionRequest, Message, Provider, Role};
3
4#[tokio::main]
5async fn main() -> Result<(), Box<dyn std::error::Error>> {
6    println!("🌐 AI-lib 代理服务器支持示例");
7    println!("============================");
8
9    // 检查代理配置
10    match std::env::var("AI_PROXY_URL") {
11        Ok(proxy_url) => {
12            println!("✅ 检测到代理配置: {}", proxy_url);
13            println!("   所有HTTP请求将通过此代理服务器");
14        }
15        Err(_) => {
16            println!("ℹ️  未设置AI_PROXY_URL环境变量");
17            println!("   如需使用代理,请设置: export AI_PROXY_URL=http://proxy.example.com:8080");
18        }
19    }
20
21    println!("\n🚀 创建AI客户端...");
22    let client = AiClient::new(Provider::Groq)?;
23    println!("✅ 客户端创建成功,提供商: {:?}", client.current_provider());
24
25    // 创建测试请求
26    let request = ChatCompletionRequest::new(
27        "llama3-8b-8192".to_string(),
28        vec![Message {
29            role: Role::User,
30            content: Content::Text("Hello! This request may go through a proxy.".to_string()),
31            function_call: None,
32        }],
33    );
34
35    println!("\n📤 准备发送请求...");
36    println!("   模型: {}", request.model);
37    println!("   消息: {}", request.messages[0].content.as_text());
38
39    // 获取模型列表(这个请求也会通过代理)
40    match client.list_models().await {
41        Ok(models) => {
42            println!("\n📋 通过代理获取到的模型列表:");
43            for model in models {
44                println!("   • {}", model);
45            }
46        }
47        Err(e) => {
48            println!("\n⚠️  获取模型列表失败: {}", e);
49            println!("   这可能是由于:");
50            println!("   • 未设置GROQ_API_KEY环境变量");
51            println!("   • 代理服务器配置错误");
52            println!("   • 网络连接问题");
53        }
54    }
55
56    println!("\n💡 代理配置说明:");
57    println!("   • 设置环境变量: AI_PROXY_URL=http://your-proxy:port");
58    println!("   • 支持HTTP和HTTPS代理");
59    println!("   • 支持带认证的代理: http://user:pass@proxy:port");
60    println!("   • 所有AI提供商都会自动使用此代理配置");
61
62    Ok(())
63}