From e712fd764589bb8b9ad774dc66a916c935e7f9e5 Mon Sep 17 00:00:00 2001 From: oudecheng <13802883547@139.com> Date: Thu, 14 May 2026 11:28:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=8D=E6=B3=A8=E5=85=A5=E9=80=BB=E8=BE=91=EF=BC=8C=E7=A1=AE?= =?UTF-8?q?=E4=BF=9D=E6=AF=8F=E6=AC=A1=E5=A4=84=E7=90=86=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=97=B6=E5=8A=A8=E6=80=81=E6=B3=A8=E5=85=A5?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=8F=90=E7=A4=BA=E8=AF=8D=EF=BC=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=B6=88=E6=81=AF=E5=8E=86=E5=8F=B2=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gateway/agent_prompt_provider.rs | 35 ++++------------------------ src/gateway/execution.rs | 13 +++++++++-- 2 files changed, 15 insertions(+), 33 deletions(-) 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(