Files
memind/persona-intent-routing.test.mjs
John ce2a4b0e1a
Memind CI / Test, build, and release guards (push) Has been cancelled
feat(intent): 歧义任务走 LLM 路由,并在选中 agent 时离开直聊会话
对比/清单/行程等口吻按人群场景交给分类器;本机 .env 可覆盖 admin-db 的 router 开关。
顺带在 MindSpace MCP token 过期时轮换 Goose 会话,避免旧会话空 Finish。
2026-09-12 11:07:45 +08:00

35 lines
1.3 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { classifyWithRules } from './chat-intent-router.mjs';
import { loadPersonaIntentCases } from './scripts/simulate-persona-intent-routing.mjs';
test('persona intent cases: rule utterances hit rules, llm utterances defer', async () => {
const { cases } = await loadPersonaIntentCases();
assert.ok(cases.length >= 20);
const personas = new Set(cases.map((item) => item.persona));
for (const required of ['青年男性', '青年女性', '中年男性', '中年女性', '老年', '小孩']) {
assert.ok(personas.has(required), `missing persona ${required}`);
}
for (const item of cases) {
const result = classifyWithRules({
text: item.text,
sessionId: 'h5direct_persona_sim',
sessionMessageCount: 3,
userMessage: {
role: 'user',
content: [{ type: 'text', text: item.text }],
metadata: { displayText: item.text },
},
chatSessionDeferEnabled: true,
chatSessionDeferMinTextLength: 12,
});
if (item.expectSource === 'llm') {
assert.equal(result, null, `${item.id} should defer to llm: ${item.text}`);
continue;
}
assert.equal(result?.route, item.expectRoute, `${item.id} route ${item.text}`);
assert.equal(result?.source, 'rule', `${item.id} source ${item.text}`);
}
});