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