feat: 修改提示词注入逻辑,确保每次处理用户消息时动态注入系统提示词;优化消息历史记录获取顺序
This commit is contained in:
parent
4181253b17
commit
e712fd7645
@ -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
|
||||
}
|
||||
|
||||
/// 记录注入事件
|
||||
|
||||
@ -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(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user