debug: 添加详细调试日志定位多轮RAG查询卡住问题

This commit is contained in:
imeepos 2025-07-22 11:09:15 +08:00
parent 25eaed89d8
commit 35b7a489c2
1 changed files with 49 additions and 3 deletions

View File

@ -1039,13 +1039,43 @@ impl GeminiService {
// 1. 确定或创建会话
let session_id = match &request.session_id {
Some(id) => id.clone(),
Some(id) => {
println!("📋 使用现有会话ID: {}", id);
id.clone()
},
None => {
// 如果没有提供session_id生成一个新的
uuid::Uuid::new_v4().to_string()
let new_id = uuid::Uuid::new_v4().to_string();
println!("🆕 生成新会话ID: {}", new_id);
new_id
}
};
// 如果有会话仓库,确保会话存在
if let Some(repo) = &conversation_repo {
println!("🔍 检查会话是否存在...");
match repo.get_session(&session_id) {
Ok(Some(_)) => {
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),
}
}
Err(e) => {
println!("⚠️ 检查会话失败: {}", e);
}
}
}
// 2. 获取历史消息(如果需要且有会话仓库)
let mut contents = Vec::new();
let mut conversation_context = ConversationContext {
@ -1098,7 +1128,9 @@ impl GeminiService {
});
// 4. 执行RAG查询
println!("🚀 准备执行RAG查询contents数量: {}", contents.len());
let response = self.execute_rag_grounding_with_contents(contents, rag_config).await?;
println!("📥 RAG查询响应已收到");
// 5. 保存消息到会话历史(如果有会话仓库)
let message_id = if let Some(repo) = &conversation_repo {
@ -1183,8 +1215,10 @@ impl GeminiService {
contents: Vec<ContentPart>,
rag_config: RagGroundingConfig,
) -> Result<RagGroundingResponse> {
println!("🔑 开始获取访问令牌...");
// 获取访问令牌
let access_token = self.get_access_token().await?;
println!("✅ 访问令牌获取成功");
// 创建客户端配置
let client_config = self.create_gemini_client(&access_token);
@ -1229,10 +1263,13 @@ impl GeminiService {
// 发送请求到Cloudflare Gateway (使用beta API)
let generate_url = format!("{}/{}:generateContent", client_config.gateway_url, rag_config.model_id);
println!("🌐 准备发送请求到: {}", generate_url);
println!("📊 请求数据大小: {} bytes", serde_json::to_string(&request_data).unwrap_or_default().len());
// 重试机制
let mut last_error = None;
for attempt in 0..self.config.max_retries {
println!("🔄 尝试第 {} 次请求...", attempt + 1);
match self.send_rag_grounding_request(&generate_url, &client_config, &request_data).await {
Ok(response) => {
return Ok(RagGroundingResponse {
@ -1293,6 +1330,7 @@ impl GeminiService {
client_config: &ClientConfig,
request_data: &serde_json::Value,
) -> Result<RagGroundingResponse> {
println!("📤 构建HTTP请求...");
let mut request_builder = self.client
.post(url)
.json(request_data);
@ -1302,19 +1340,27 @@ impl GeminiService {
request_builder = request_builder.header(key, value);
}
println!("🚀 发送HTTP请求...");
let response = request_builder
.send()
.await
.map_err(|e| anyhow!("发送RAG请求失败: {}", e))?;
println!("📨 收到HTTP响应状态码: {}", response.status());
let status = response.status();
println!("📖 开始读取响应内容...");
let response_text = response.text().await
.map_err(|e| anyhow!("读取RAG响应失败: {}", e))?;
println!("📄 响应内容长度: {} 字符", response_text.len());
if !status.is_success() {
println!("❌ HTTP请求失败状态码: {}", status);
return Err(anyhow!("RAG请求失败 ({}): {}", status, response_text));
}
println!("🔍 开始解析响应内容...");
// 解析响应
self.parse_rag_grounding_response(&response_text)
}