diff --git a/apps/desktop/src-tauri/src/data/repositories/conversation_repository.rs b/apps/desktop/src-tauri/src/data/repositories/conversation_repository.rs index cb4f005..1e55474 100644 --- a/apps/desktop/src-tauri/src/data/repositories/conversation_repository.rs +++ b/apps/desktop/src-tauri/src/data/repositories/conversation_repository.rs @@ -145,8 +145,26 @@ impl ConversationRepository { let conn = self.connection.lock().unwrap(); // 获取会话信息 - let session = self.get_session(&query.session_id)? - .ok_or_else(|| anyhow::anyhow!("Session not found: {}", query.session_id))?; + let session = match self.get_session(&query.session_id)? { + Some(s) => s, + None => { + // 如果会话不存在,创建一个临时会话对象并返回空消息列表 + println!("⚠️ 会话不存在: {},返回空历史", query.session_id); + let empty_session = ConversationSession { + id: query.session_id.clone(), + title: Some("临时会话".to_string()), + created_at: chrono::Utc::now(), + updated_at: chrono::Utc::now(), + is_active: true, + metadata: None, + }; + return Ok(ConversationHistory { + session: empty_session, + messages: Vec::new(), + total_count: 0, + }); + } + }; // 构建消息查询 let mut sql = "SELECT id, session_id, role, content, timestamp, metadata diff --git a/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs b/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs index 3810d39..730d2f5 100644 --- a/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs +++ b/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs @@ -1058,17 +1058,8 @@ impl GeminiService { println!("✅ 会话已存在"); } Ok(None) => { - println!("🆕 会话不存在,创建新会话..."); - // 创建新会话 - use crate::data::models::conversation::CreateConversationSessionRequest; - let create_request = CreateConversationSessionRequest { - title: Some("RAG对话会话".to_string()), - metadata: None, - }; - match repo.create_session(create_request) { - Ok(_) => println!("✅ 新会话创建成功"), - Err(e) => println!("⚠️ 创建会话失败: {}", e), - } + println!("🆕 会话不存在,跳过历史消息获取..."); + // 对于新会话,没有历史消息,直接跳过 } Err(e) => { println!("⚠️ 检查会话失败: {}", e); @@ -1084,7 +1075,13 @@ impl GeminiService { context_length: 0, }; + println!("🔍 检查是否需要获取历史消息..."); + println!(" - 会话仓库存在: {}", conversation_repo.is_some()); + println!(" - 包含历史消息: {}", request.include_history.unwrap_or(false)); + if let (Some(repo), true) = (&conversation_repo, request.include_history.unwrap_or(false)) { + println!("📚 开始获取历史消息..."); + println!("🔄 调用get_conversation_history方法..."); match self.get_conversation_history(&repo, &session_id, request.max_history_messages.unwrap_or(10)).await { Ok(history_messages) => { conversation_context.total_messages = history_messages.len() as u32; @@ -1166,6 +1163,10 @@ impl GeminiService { session_id: &str, max_messages: u32, ) -> Result> { + println!("📋 构建历史查询参数..."); + println!(" - session_id: {}", session_id); + println!(" - max_messages: {}", max_messages); + let query = ConversationHistoryQuery { session_id: session_id.to_string(), limit: Some(max_messages), @@ -1173,9 +1174,16 @@ impl GeminiService { include_system_messages: Some(false), }; + println!("🔍 调用repo.get_conversation_history..."); match repo.get_conversation_history(query) { - Ok(history) => Ok(history.messages), - Err(e) => Err(anyhow!("获取会话历史失败: {}", e)), + Ok(history) => { + println!("✅ 历史查询成功,获取到 {} 条消息", history.messages.len()); + Ok(history.messages) + }, + Err(e) => { + println!("❌ 历史查询失败: {}", e); + Err(anyhow!("获取会话历史失败: {}", e)) + }, } }