优化: df-ai/df-storage/df-nodes 底层加固: 上下文/模型/节点/仓储

df-ai:
- context/mod.rs + manager_tests.rs: 上下文管理调整 + 测试同步(48 行)
- openai_compat.rs: OpenAI 兼容层增强(+51)
- presets/models.json: 模型预设 +18

df-storage:
- crud/conversation_repo.rs: 会话仓储(loop_state 相关)
- crud/task_repo.rs: 任务仓储
- crud/mod.rs: 导出调整

df-nodes:
- task_advance_node.rs: 任务推进节点

验收: cargo check -p devflow EXIT 0。
This commit is contained in:
lxy
2026-10-09 22:54:25 +08:00
parent d7e626a813
commit f4ca01f2f2
8 changed files with 296 additions and 36 deletions
+11 -9
View File
@@ -246,16 +246,18 @@ impl ContextManager {
.collect();
// 淘汰补偿摘要:视图裁剪无声丢弃被淘汰内容,LLM 从此看不到早期主题,与压缩
// 路径(有摘要补偿)行为不一致。此处把被淘汰文本提炼成一短段摘要插回发送
// 视图最前部(淘汰区头部、保护消息之前)。角色必须 user:role=system 会被
// anthropic_compat 折叠进带 cache_control 的顶层 system 段,而本摘要纯视图
// 每轮即时再生成(淘汰区单调增长致内容逐轮漂移),落 system 即逐轮改写缓存
// 指纹使全部前缀缓存失效;连续 role 由既有 sanitize/协议层自愈兜底。摘要只进
// messages 易变区,严禁拼进 system_prompt/任何稳定段;纯视图语义:不落库、
// 不改 conv.messages 存储、不标记 compressed,被淘汰原文存储态不变。
// 极短/空淘汰文本提炼为空 → 跳过(不值得插)。
// 路径(有摘要补偿)行为不一致。此处把被淘汰文本提炼成一短段摘要插回发送视图。
// **缓存友好修正(2026-10)**:原 insert(0) 头部插入会位移整条前缀字节,使
// DeepSeek 等自动前缀缓存 provider 的稳定前缀(顶层 system + 早期 history)
// 全部缓存失效——命中率掉到个位数。改尾部追加(push):摘要本身每轮即时再生成
// (淘汰区单调增长致内容逐轮漂移)本就无法命中缓存,但放尾部不再拖累稳定前缀,
// 命中率最大化。角色必须 user:role=system 会被 anthropic_compat 折叠进带
// cache_control 的顶层 system 段,落 system 即逐轮改写缓存指纹;user 放尾部
// 由 sanitize/协议层自愈兜底。摘要只进 messages 易变区,严禁拼进 system_prompt/
// 任何稳定段;纯视图语义:不落库、不改 conv.messages 存储、不标记 compressed,
// 被淘汰原文存储态不变。极短/空淘汰文本提炼为空 → 跳过(不值得插)。
if let Some(text) = build_eviction_summary_text(&evicted) {
msgs.insert(0, ChatMessage::user(text));
msgs.push(ChatMessage::user(text));
}
tracing::info!(