修复: namespace 占位符发 LLM 前未展开 + key 含斜杠丢原文

This commit is contained in:
lxy
2026-08-01 10:42:09 +08:00
parent bd9031d35d
commit 468950616b
3 changed files with 55 additions and 6 deletions
+15 -1
View File
@@ -1209,7 +1209,21 @@ pub(crate) async fn run_agentic_loop(
return;
}
};
let (history_msgs, _trimmed) = conv.messages.build_for_request(sys_tokens);
let (mut history_msgs, _trimmed) = conv.messages.build_for_request(sys_tokens);
// T2-修复(方案A):发 LLM 前展开 namespace 引用为真实内容(view-only,仅本轮请求视图)。
// push 时(audit/mod.rs)read_file/list_directory/grep/diff_files 等大结果被
// namespace_store 引用化进 messages;持久化(conversation.rs)已展开写 DB,但发 LLM 的
// 实时请求此前未展开 → LLM 每轮只看到 "namespace://..." 占位符,AI 实际拿不到工具结果。
// 此处展开,namespace 退化为内存/持久化层优化,LLM 永远看真实内容。
// read_only None(重启后 namespace 清空 / 跨会话残留引用)→ 保留占位符降级,非崩溃。
for m in &mut history_msgs {
if df_ai::namespace_store::is_namespace_ref(&m.content) {
let path = m.content.clone();
if let Some(original) = session.namespace_store.read_only(&path) {
m.content = original.to_string();
}
}
}
let mut msgs = vec![ChatMessage::system(&system_prompt)];
msgs.extend(history_msgs);
msgs