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