feat: 修改提示词注入逻辑,确保每次处理用户消息时动态注入系统提示词;优化消息历史记录获取顺序

This commit is contained in:
oudecheng 2026-05-14 11:28:53 +08:00
parent 4181253b17
commit e712fd7645
2 changed files with 15 additions and 33 deletions

View File

@ -34,37 +34,10 @@ impl AgentPromptProvider {
/// 判断是否应该注入提示词 /// 判断是否应该注入提示词
/// ///
/// 规则: /// 规则:每次处理用户消息都动态注入系统提示词
/// - 首次对话user_message_count == 0始终注入 fn should_inject(&self, _context: &SystemPromptContext) -> bool {
/// - 如果设置了 reinject_every > 0且满足间隔条件则重新注入 // 每次消息都注入系统提示词
fn should_inject(&self, context: &SystemPromptContext) -> bool { true
// 首次对话始终注入
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
} }
/// 记录注入事件 /// 记录注入事件

View File

@ -163,11 +163,16 @@ impl AgentExecutionService {
} }
let enriched_content = let enriched_content =
enrich_user_content_with_media_refs(request.content, &media_refs)?; 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); let user_message = session_guard.create_user_message(&enriched_content, media_refs);
session_guard.append_persisted_message(request.chat_id, user_message.clone())?; session_guard.append_persisted_message(request.chat_id, user_message.clone())?;
// 再获取包含新消息的完整历史记录
let history = session_guard.get_or_create_history(request.chat_id).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)?; session_guard.record_skill_offer(request.chat_id)?;
let mut agent = session_guard.create_agent( 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()); let user_message = session_guard.create_user_message(request.prompt, Vec::new());
session_guard.append_persisted_message(request.chat_id, user_message.clone())?; session_guard.append_persisted_message(request.chat_id, user_message.clone())?;
// 再获取包含新消息的完整历史记录
let history = session_guard.get_or_create_history(request.chat_id).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)?; session_guard.record_skill_offer(request.chat_id)?;
let agent = session_guard.create_agent_with_provider_config( let agent = session_guard.create_agent_with_provider_config(