Initial commit: Natural Memory Agent Lab:模型服务 + TypeScript agent + 记忆能力场景评测(冲突更新、跨会话回忆、遗忘撤回、多跳、未知拒答)
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* 验证「会话卫生」所依赖的机制是否真的有效 —— 不需要模型、不需要显卡。
|
||||
*
|
||||
* 背景:熔断中止后,我用 `agent.state.messages = [...]` 把被污染的尾巴换成一句干净的说明。
|
||||
* 但实测里下一轮仍在复读旧对话,我当时记为"卫生没生效"。这里直接验证机制本身:
|
||||
* 1) `agent.state.messages` 赋值是否被采纳?
|
||||
* 2) 赋值是否复制数组(Pi 的注释声称会复制)?
|
||||
* 3) 赋值后 `get messages` 读回来的是不是新内容?
|
||||
*/
|
||||
|
||||
import { Agent } from "@earendil-works/pi-agent-core";
|
||||
|
||||
const agent = new Agent({
|
||||
initialState: {
|
||||
systemPrompt: "test",
|
||||
model: {} as never,
|
||||
tools: [],
|
||||
messages: [],
|
||||
thinkingLevel: "off",
|
||||
},
|
||||
streamFn: (() => {
|
||||
throw new Error("not used");
|
||||
}) as never,
|
||||
sessionId: "hygiene-check",
|
||||
});
|
||||
|
||||
const before = agent.state.messages.length;
|
||||
console.log(`初始 messages 长度 = ${before}`);
|
||||
|
||||
const replacement = [
|
||||
{ role: "user", content: [{ type: "text", text: "原始问题" }] },
|
||||
{ role: "assistant", content: [{ type: "text", text: "(本轮中止说明)" }] },
|
||||
];
|
||||
|
||||
agent.state.messages = replacement as never;
|
||||
const after = agent.state.messages;
|
||||
console.log(`赋值后 messages 长度 = ${after.length}`);
|
||||
console.log(`内容与预期一致 = ${JSON.stringify(after) === JSON.stringify(replacement)}`);
|
||||
|
||||
// 复制语义:改原数组不应影响内部状态
|
||||
replacement.push({ role: "user", content: [{ type: "text", text: "事后追加" }] } as never);
|
||||
console.log(`改动源数组后内部长度 = ${agent.state.messages.length}(若仍为 2,说明是复制)`);
|
||||
|
||||
// 读回来的对象是不是同一引用(对象字面量 getter 每次返回同一个数组)
|
||||
const first = agent.state.messages;
|
||||
const second = agent.state.messages;
|
||||
console.log(`两次读取是同一引用 = ${first === second}`);
|
||||
|
||||
console.log(
|
||||
after.length === 2 && agent.state.messages.length === 2
|
||||
? "结论:赋值机制有效 —— 会话卫生的失败不能归因于此"
|
||||
: "结论:赋值机制无效 —— 这就是会话卫生失败的原因",
|
||||
);
|
||||
Reference in New Issue
Block a user