diff --git a/src/gateway/agent_prompt_provider.rs b/src/gateway/agent_prompt_provider.rs index 6f8e857..080c21d 100644 --- a/src/gateway/agent_prompt_provider.rs +++ b/src/gateway/agent_prompt_provider.rs @@ -34,37 +34,10 @@ impl AgentPromptProvider { /// 判断是否应该注入提示词 /// - /// 规则: - /// - 首次对话(user_message_count == 0)始终注入 - /// - 如果设置了 reinject_every > 0,且满足间隔条件,则重新注入 - fn should_inject(&self, context: &SystemPromptContext) -> bool { - // 首次对话始终注入 - if context.user_message_count == 0 { - return true; - } - - // 检查是否需要重新注入 - if self.reinject_every == 0 { - return false; - } - - // 获取会话注入计数 - let session_id = match &context.session_id { - Some(id) => id, - None => return false, - }; - - let reinjection_count = self - .repository - .get_session(session_id) - .ok() - .flatten() - .map(|session| session.agent_prompt_reinjection_count as usize) - .unwrap_or(0); - - let expected_reinjections = context.user_message_count / self.reinject_every; - - expected_reinjections > reinjection_count + /// 规则:每次处理用户消息都动态注入系统提示词 + fn should_inject(&self, _context: &SystemPromptContext) -> bool { + // 每次消息都注入系统提示词 + true } /// 记录注入事件 diff --git a/src/gateway/execution.rs b/src/gateway/execution.rs index f525480..d1624ae 100644 --- a/src/gateway/execution.rs +++ b/src/gateway/execution.rs @@ -163,11 +163,16 @@ impl AgentExecutionService { } let enriched_content = enrich_user_content_with_media_refs(request.content, &media_refs)?; + + // 先计算 user_message_count(在添加新消息之前) + let history_before = session_guard.get_or_create_history(request.chat_id).clone(); + let user_message_count = history_before.iter().filter(|m| m.role == "user").count(); + let user_message = session_guard.create_user_message(&enriched_content, media_refs); session_guard.append_persisted_message(request.chat_id, user_message.clone())?; + // 再获取包含新消息的完整历史记录 let history = session_guard.get_or_create_history(request.chat_id).clone(); - let user_message_count = history.iter().filter(|m| m.role == "user").count(); session_guard.record_skill_offer(request.chat_id)?; let mut agent = session_guard.create_agent( @@ -233,11 +238,15 @@ impl AgentExecutionService { ), )?; + // 先计算 user_message_count(在添加新消息之前) + let history_before = session_guard.get_or_create_history(request.chat_id).clone(); + let user_message_count = history_before.iter().filter(|m| m.role == "user").count(); + let user_message = session_guard.create_user_message(request.prompt, Vec::new()); session_guard.append_persisted_message(request.chat_id, user_message.clone())?; + // 再获取包含新消息的完整历史记录 let history = session_guard.get_or_create_history(request.chat_id).clone(); - let user_message_count = history.iter().filter(|m| m.role == "user").count(); session_guard.record_skill_offer(request.chat_id)?; let agent = session_guard.create_agent_with_provider_config(