135 lines
3.4 KiB
JavaScript
135 lines
3.4 KiB
JavaScript
|
|
// src/routes/hli/brain/index.js
|
||
|
|
// HLI BRAIN 域路由 — 铸渊核心大脑接口
|
||
|
|
// 不需要鉴权(前端壳层需要调用这些接口来组装 AI 请求)
|
||
|
|
|
||
|
|
'use strict';
|
||
|
|
|
||
|
|
const express = require('express');
|
||
|
|
const router = express.Router();
|
||
|
|
const brain = require('../../../brain');
|
||
|
|
|
||
|
|
// POST /hli/brain/prompt — 组装系统提示词
|
||
|
|
router.post('/prompt', (req, res) => {
|
||
|
|
const { userName, ghUser, role, mode, devStatus } = req.body;
|
||
|
|
|
||
|
|
if (!userName) {
|
||
|
|
return res.status(400).json({
|
||
|
|
error: true,
|
||
|
|
code: 'MISSING_USERNAME',
|
||
|
|
message: '缺少 userName 参数',
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
const detectedMode = mode || brain.detectMode(req.body.text || '').mode;
|
||
|
|
const prompt = brain.assemblePrompt({
|
||
|
|
userName,
|
||
|
|
ghUser: ghUser || '',
|
||
|
|
role: role || 'guest',
|
||
|
|
mode: detectedMode,
|
||
|
|
brain: brain.loadLongTermMemory() || brain.FALLBACK_BRAIN,
|
||
|
|
devStatus: devStatus || null,
|
||
|
|
userMeta: brain.ROLE_MAP[userName] || null,
|
||
|
|
});
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
hli_id: 'HLI-BRAIN-001',
|
||
|
|
prompt,
|
||
|
|
brain_version: brain.BRAIN_VERSION,
|
||
|
|
mode: detectedMode,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// POST /hli/brain/route — 任务型模型路由
|
||
|
|
router.post('/route', (req, res) => {
|
||
|
|
const { text, contextLength, isGuest } = req.body;
|
||
|
|
|
||
|
|
if (!text) {
|
||
|
|
return res.status(400).json({
|
||
|
|
error: true,
|
||
|
|
code: 'MISSING_TEXT',
|
||
|
|
message: '缺少 text 参数',
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
const modeResult = brain.detectMode(text);
|
||
|
|
const modelResult = brain.selectModel(modeResult.mode, {
|
||
|
|
contextLength: contextLength || 0,
|
||
|
|
isGuest: isGuest || false,
|
||
|
|
});
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
hli_id: 'HLI-BRAIN-002',
|
||
|
|
mode: modeResult,
|
||
|
|
model: modelResult,
|
||
|
|
routing_table: brain.getRoutingTable(),
|
||
|
|
failure_status: brain.getFailureStatus(),
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// POST /hli/brain/context — 上下文裁剪
|
||
|
|
router.post('/context', (req, res) => {
|
||
|
|
const { messages, systemMessages, isGuest, contextBudget } = req.body;
|
||
|
|
|
||
|
|
if (!messages || !Array.isArray(messages)) {
|
||
|
|
return res.status(400).json({
|
||
|
|
error: true,
|
||
|
|
code: 'MISSING_MESSAGES',
|
||
|
|
message: '缺少 messages 参数',
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
const result = brain.trimMessages(
|
||
|
|
systemMessages || [],
|
||
|
|
messages,
|
||
|
|
{ isGuest: isGuest || false, contextBudget: contextBudget || 0 },
|
||
|
|
);
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
hli_id: 'HLI-BRAIN-003',
|
||
|
|
messages: result.messages,
|
||
|
|
trimmed: result.trimmed,
|
||
|
|
totalTokens: result.totalTokens,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// POST /hli/brain/memory — 记忆分析与候选生成
|
||
|
|
router.post('/memory', (req, res) => {
|
||
|
|
const { text, source } = req.body;
|
||
|
|
|
||
|
|
if (!text) {
|
||
|
|
return res.status(400).json({
|
||
|
|
error: true,
|
||
|
|
code: 'MISSING_TEXT',
|
||
|
|
message: '缺少 text 参数',
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
const candidates = brain.generateCandidates(text, source || 'user');
|
||
|
|
const memoryStatus = brain.getMemoryStatus();
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
hli_id: 'HLI-BRAIN-004',
|
||
|
|
candidates,
|
||
|
|
memory_status: memoryStatus,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// GET /hli/brain/status — 大脑状态概览
|
||
|
|
router.get('/status', (req, res) => {
|
||
|
|
const longTermMemory = brain.loadLongTermMemory();
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
hli_id: 'HLI-BRAIN-STATUS',
|
||
|
|
brain_version: brain.BRAIN_VERSION,
|
||
|
|
modes: brain.MODES,
|
||
|
|
routing_table: brain.getRoutingTable(),
|
||
|
|
failure_status: brain.getFailureStatus(),
|
||
|
|
context_config: brain.CONTEXT_CONFIG,
|
||
|
|
memory_status: brain.getMemoryStatus(),
|
||
|
|
long_term_loaded: !!longTermMemory,
|
||
|
|
role_map: Object.keys(brain.ROLE_MAP),
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
module.exports = router;
|