// tests/live_llm_test.rs use astroresearch::Config; use astroresearch::clients::llm::{LlmClient, EmbeddingClient}; #[tokio::test] async fn test_live_llm_and_embedding() -> anyhow::Result<()> { let config = Config::from_env(); println!("================= 开始大模型与向量模型真实网络集成测试 ================="); // 1. 测试 LlmClient if config.llm_api_key.is_empty() { println!("警告: 未在环境配置中检测到 LLM_API_KEY,跳过 LlmClient 集成测试。"); } else { println!("测试大模型: {} (API Base: {})", config.llm_model, config.llm_api_base); let llm = LlmClient::new( config.llm_api_key.clone(), config.llm_api_base.clone(), config.llm_model.clone(), ); match llm.chat_completion("You are a helpful assistant.", "Say Hello!").await { Ok(reply) => { println!("LlmClient 响应成功: {}", reply.trim()); assert!(!reply.trim().is_empty(), "错误: 大模型返回了空响应"); } Err(e) => { panic!("LlmClient 接口调用失败: {}", e); } } } // 2. 测试 EmbeddingClient if config.embedding_api_key.is_empty() { println!("警告: 未在环境配置中检测到 EMBEDDING_API_KEY,跳过 EmbeddingClient 集成测试。"); } else { println!("测试向量模型: {} (API Base: {})", config.embedding_model, config.embedding_api_base); let embedding_client = EmbeddingClient::new( config.embedding_api_key.clone(), config.embedding_api_base.clone(), config.embedding_model.clone(), ); let test_text = "active galactic nucleus"; match embedding_client.create_embedding(test_text).await { Ok(vector) => { println!("EmbeddingClient 响应成功!向量维度: {}", vector.len()); assert!(!vector.is_empty(), "错误: 向量数据为空"); let preview_len = std::cmp::min(5, vector.len()); println!("前 {} 个向量数值样例: {:?}", preview_len, &vector[..preview_len]); } Err(e) => { panic!("EmbeddingClient 接口调用失败: {}", e); } } } println!("================= 大模型与向量模型真实网络集成测试完成 ================="); Ok(()) }