Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

103 lines
2.6 KiB
JavaScript

/**
* persona-studio · 对话路由
* POST /api/ps/chat/message 对话消息
* GET /api/ps/chat/history 对话历史
*/
const express = require('express');
const router = express.Router();
const memoryManager = require('../brain/memory-manager');
const personaEngine = require('../brain/persona-engine');
// 校验开发编号(支持 GUEST 访客模式)
function isValidDevId(id) {
return id && (/^EXP-\d{3,}$/.test(id) || id === 'GUEST');
}
// POST /api/ps/chat/message
router.post('/message', async (req, res) => {
const { dev_id, message, history } = req.body || {};
if (!isValidDevId(dev_id)) {
return res.status(400).json({
error: true,
code: 'INVALID_ID',
message: '无效的开发编号'
});
}
try {
// 读取该体验者的记忆
const memory = memoryManager.loadMemory(dev_id);
// 判断是否是打招呼
const isGreeting = message === '__greeting__';
// 调用人格体引擎获取回复
const result = await personaEngine.respond({
dev_id,
message: isGreeting ? null : message,
history: history || [],
memory,
isGreeting
});
// 保存对话记忆(非打招呼时)
if (!isGreeting && message) {
memoryManager.appendConversation(dev_id, [
{ role: 'user', content: message, timestamp: new Date().toISOString() },
{ role: 'assistant', content: result.reply, timestamp: new Date().toISOString() }
]);
// 更新最后话题
memoryManager.updateLastTopic(dev_id, message);
// 自动更新用户画像
memoryManager.updateProfile(dev_id, message, result.reply);
}
res.json({
error: false,
reply: result.reply,
build_ready: result.build_ready || false
});
} catch (err) {
console.error('Chat error:', err.message);
res.status(500).json({
error: true,
code: 'CHAT_ERROR',
message: '对话服务暂时不可用',
reply: '抱歉,我现在遇到了一些技术问题,暂时无法正常回复。请稍后再试 🙏'
});
}
});
// GET /api/ps/chat/history
router.get('/history', (req, res) => {
const dev_id = req.query.dev_id;
if (!isValidDevId(dev_id)) {
return res.status(400).json({
error: true,
code: 'INVALID_ID',
message: '无效的开发编号'
});
}
try {
const memory = memoryManager.loadMemory(dev_id);
res.json({
error: false,
conversations: memory.conversations || [],
last_topic: memory.last_topic || null
});
} catch {
res.json({
error: false,
conversations: [],
last_topic: null
});
}
});
module.exports = router;