debug_openai_transport/
debug_openai_transport.rs

1use ai_lib::transport::{HttpClient, HttpTransport};
2use serde_json::json;
3use std::collections::HashMap;
4
5#[tokio::main]
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7    println!("🔍 OpenAI传输层调试");
8    println!("===================");
9
10    let api_key = match std::env::var("OPENAI_API_KEY") {
11        Ok(key) => key,
12        Err(_) => {
13            println!("❌ 未设置OPENAI_API_KEY");
14            return Ok(());
15        }
16    };
17
18    // 使用我们的HttpTransport
19    let transport = HttpTransport::new();
20
21    // 测试GET请求 (模型列表) - 我们知道这个工作
22    println!("\n📋 测试GET请求 (模型列表):");
23    let mut headers = HashMap::new();
24    headers.insert("Authorization".to_string(), format!("Bearer {}", api_key));
25
26    match transport
27        .get::<serde_json::Value>("https://api.openai.com/v1/models", Some(headers))
28        .await
29    {
30        Ok(response) => {
31            let model_count = response["data"]
32                .as_array()
33                .map(|arr| arr.len())
34                .unwrap_or(0);
35            println!("✅ GET请求成功,获取到 {} 个模型", model_count);
36        }
37        Err(e) => {
38            println!("❌ GET请求失败: {}", e);
39        }
40    }
41
42    // 测试POST请求 (聊天完成) - 这个有问题
43    println!("\n💬 测试POST请求 (聊天完成):");
44    let mut headers = HashMap::new();
45    headers.insert("Authorization".to_string(), format!("Bearer {}", api_key));
46
47    let request_body = json!({
48        "model": "gpt-3.5-turbo",
49        "messages": [
50            {
51                "role": "user",
52                "content": "Say 'test' in one word."
53            }
54        ],
55        "max_tokens": 5
56    });
57
58    println!("请求体: {}", serde_json::to_string_pretty(&request_body)?);
59
60    match transport
61        .post::<serde_json::Value, serde_json::Value>(
62            "https://api.openai.com/v1/chat/completions",
63            Some(headers),
64            &request_body,
65        )
66        .await
67    {
68        Ok(response) => {
69            println!("✅ POST请求成功!");
70            println!("响应: {}", serde_json::to_string_pretty(&response)?);
71        }
72        Err(e) => {
73            println!("❌ POST请求失败: {}", e);
74
75            // 分析错误类型
76            let error_str = e.to_string();
77            if error_str.contains("you must provide a model parameter") {
78                println!("🔍 这个错误很奇怪,因为我们确实提供了model参数");
79                println!("   可能的原因:");
80                println!("   1. 代理服务器修改了请求体");
81                println!("   2. Content-Type头部问题");
82                println!("   3. JSON序列化问题");
83            }
84        }
85    }
86
87    println!("\n💡 调试结论:");
88    println!("   • GET请求工作正常 → 认证和网络连接OK");
89    println!("   • POST请求失败 → 可能是代理或请求格式问题");
90    println!("   • 建议检查代理服务器的POST请求处理");
91
92    Ok(())
93}