修复: system 锚点避让悬空 tool 调用头防 400
- df-ai 新增 ContextManager::push_system_anchor 统一出口:末条为悬空 ToolCallHead 时插其前,否则尾部追加(不位移前缀) - 5 处 system 尾部 push 全量收口(压缩成功/兜底提交、警示单点、主题标记、续轮 nudge),从源头杜绝后台压缩摘要/警示楔入工具三元组致上游 400 insufficient tool messages - 单测 push_system_anchor 两态锁定;cargo test -p df-ai --lib context 155 passed / cargo check -p devflow EXIT 0 - 看板归档:全量完成态条目与段落迁 docs/07-项目管理/todo归档/2026-10-10.md(零措辞改动机械搬运,未完成项110条零丢失/完成项37条全入归档/行数守恒)
This commit is contained in:
@@ -266,7 +266,7 @@ pub(super) async fn maybe_auto_compress(
|
||||
// 前缀字节,使 DeepSeek 等自动前缀缓存的 provider 全部缓存失效
|
||||
// (命中率掉到个位数)。尾部追加紧邻本轮内容 LLM 仍可见,前缀稳定
|
||||
// 命中率最大化。JSON 卡片回填 WorkingContext,决策随压缩重锚定。
|
||||
conv.messages.push(ChatMessage::system(&summary.nl_summary));
|
||||
conv.messages.push_system_anchor(ChatMessage::system(&summary.nl_summary));
|
||||
conv.messages.set_compressing(false);
|
||||
conv.working_context.sync_after_compress(&summary.json_card);
|
||||
}
|
||||
@@ -369,7 +369,7 @@ async fn keyword_fallback_commit(
|
||||
// 尾部追加(而非 insert_at(0) 头部插入):头部插入位移整条前缀字节,
|
||||
// 使 DeepSeek 等自动前缀缓存 provider 全部缓存失效(命中率掉到个位数)。
|
||||
// 尾部追加紧邻本轮内容 LLM 仍可见,前缀稳定命中率最大化。
|
||||
conv.messages.push(ChatMessage::system(keyword_fallback));
|
||||
conv.messages.push_system_anchor(ChatMessage::system(keyword_fallback));
|
||||
true
|
||||
}
|
||||
};
|
||||
|
||||
@@ -41,7 +41,7 @@ pub(crate) async fn insert_system_notice(
|
||||
let mut session = session_arc.lock().await;
|
||||
if session.per_conv.contains_key(conv_id) {
|
||||
let conv = session.conv(conv_id);
|
||||
conv.messages.push(ChatMessage::system(text));
|
||||
conv.messages.push_system_anchor(ChatMessage::system(text));
|
||||
tracing::info!(conv_id = %conv_id, "[ai] {}", log_tag);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1801,7 +1801,7 @@ async fn prepare_round_inputs(
|
||||
let mut session = session_arc.lock().await;
|
||||
if session.per_conv.contains_key(conv_id) {
|
||||
let conv = session.conv(conv_id);
|
||||
conv.messages.push(ChatMessage::system(&marker_text));
|
||||
conv.messages.push_system_anchor(ChatMessage::system(&marker_text));
|
||||
tracing::info!(
|
||||
conv_id = %conv_id,
|
||||
iteration,
|
||||
@@ -2396,7 +2396,7 @@ async fn insert_goal_verify_nudge(
|
||||
let conv = session.conv(conv_id);
|
||||
// 尾部追加而非 insert_at(0):nudge 紧邻本轮内容语义不变,且不位移既有前缀字节
|
||||
// (insert_at(0) 会把整条历史后移,自动前缀缓存/Anthropic 显式缓存全失效)。
|
||||
conv.messages.push(ChatMessage::system(&nudge_text));
|
||||
conv.messages.push_system_anchor(ChatMessage::system(&nudge_text));
|
||||
tracing::info!(
|
||||
conv_id = %conv_id, iteration, verify_rounds,
|
||||
"[GOAL-VERIFY] 目标未验证,注入续轮 nudge(强制续轮)"
|
||||
|
||||
Reference in New Issue
Block a user