fix: 修复多轮RAG查询卡住问题

This commit is contained in:
imeepos 2025-07-22 11:16:30 +08:00
parent 35b7a489c2
commit dca2c15bb9
2 changed files with 41 additions and 15 deletions

View File

@ -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

View File

@ -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<Vec<ConversationMessage>> {
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))
},
}
}