debug_openai_transport/
debug_openai_transport.rs1use 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 let transport = HttpTransport::new();
20
21 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 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 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}