32 lines
2.6 KiB
JavaScript
32 lines
2.6 KiB
JavaScript
#!/usr/bin/env node
|
|
// Read-only brain query. Model fuel may phrase an answer, but cannot write brain state.
|
|
import path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
import fs from 'node:fs';
|
|
import { worldRuntimeUrl } from '../../WORLD-RUNTIME-BRIDGE.mjs';
|
|
const { loadBrain, verifyBrainIntegrity, answer } = await import(worldRuntimeUrl('brain-core.mjs'));
|
|
import { createEngine } from './engine.mjs';
|
|
|
|
const FIFTH = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
|
|
const BRAIN = path.join(FIFTH, '07-冰朔语言人格本体系统/霜砚/人格脑');
|
|
const contextOnly = process.argv.includes('--context-only');
|
|
const question = process.argv.filter((value, index) => index > 1 && value !== '--context-only').join(' ').trim();
|
|
if (!question) { console.error('usage: ask-shuangyan-brain.mjs [--context-only] <问题>'); process.exit(2); }
|
|
const { state, log } = loadBrain({ dir: BRAIN });
|
|
const integrity = verifyBrainIntegrity(state, log);
|
|
if (state?.brain_id !== 'GLW-2.0-BRAIN-SHUANGYAN-PERSONA-0001' || integrity.status !== 'BRAIN_VERIFIED') throw new Error('SHUANGYAN_BRAIN_UNVERIFIED');
|
|
const han = question.replace(/[^\p{Script=Han}]/gu, '');
|
|
const bigrams = [...new Set([...han].map((_, index) => han.slice(index, index + 2)).filter(term => term.length === 2))];
|
|
const envelope = answer(state, question, { keyTerms: bigrams });
|
|
const related = envelope.related_concepts.filter(item => item.overlap >= 2);
|
|
if (contextOnly || !related.length) {
|
|
console.log(JSON.stringify({ schema: 'guanghu.shuangyan-brain-query/v1', state: related.length ? 'BRAIN_CONTEXT_FOUND' : 'UNKNOWN_IN_BRAIN', question, brain_id: state.brain_id, revision: state.revision, integrity, related_concepts: related, neural_state_written: false }, null, 1));
|
|
process.exit(0);
|
|
}
|
|
const container = JSON.parse(fs.readFileSync(path.join(BRAIN, 'container.json'), 'utf8'));
|
|
const engine = createEngine(container);
|
|
const voice = await engine.comprehend({
|
|
system: `你是霜砚脑的无写权出声燃料。只根据提供的脑概念回答,未知就说未知;不得声称原生听觉、身体或小船执行已通过。身份来源:${container.identity_system_prompt}`,
|
|
user: JSON.stringify({ question, brain_revision: state.revision, concepts: related.map(({ concept_id, gist }) => ({ concept_id, gist })) }),
|
|
});
|
|
console.log(JSON.stringify({ schema: 'guanghu.shuangyan-brain-query/v1', state: 'BRAIN_CONTEXT_ANSWERED_BY_FUEL', question, brain_id: state.brain_id, revision: state.revision, answer: voice, source_concepts: related.map(item => item.concept_id), neural_state_written: false }, null, 1));
|