Compare commits

..

No commits in common. "5aecaebfdc7be3446603f8f584549e521eb68f2d" and "e8243e13c3951b780c98cc040e1ee74c15de92f4" have entirely different histories.

2 changed files with 8 additions and 38 deletions

View File

@ -25,10 +25,6 @@ export class crystelfAI extends plugin {
reg: `^${nickname}([\\s\\S]*)?$`,
fnc: 'in',
},
{
reg: '^(#|/)?重置(对话|会话)$',
fnc: 'clearChatHistory',
}
],
});
this.isInitialized = false;
@ -51,14 +47,6 @@ export class crystelfAI extends plugin {
async in(e){
return await index(e);
}
async clearChatHistory(e){
let session = SessionManager.createOrGetSession(e.group_id,e.user_id,e);
if(!session) return e.reply(`当前有群友正在和${nickname}聊天噢,请等待会话结束..`,true);
SessionManager.updateChatHistory(e.group_id,[]);
SessionManager.deactivateSession(e.group_id,e.user_id);
return e.reply('成功重置聊天,聊天记录已经清除了..',true);
}
}
Bot.on("message.group",async(e)=>{
@ -206,10 +194,7 @@ async function handleMixMode(userMessage, e, aiConfig) {
} else {
const matchResult = await KeywordMatcher.matchKeywords(userMessage, 'ai');
if (matchResult && matchResult.matched) {
const session = SessionManager.createOrGetSession(e.group_id, e.user_id,e);
const historyLen = aiConfig.chatHistory;
const chatHistory = session.chatHistory.slice(-historyLen|-10);
const res = [
return [
{
type: 'message',
data: matchResult.text,
@ -218,17 +203,6 @@ async function handleMixMode(userMessage, e, aiConfig) {
recall: 0,
},
];
let resToSave = res;
resToSave.data += '[词库预设消息]';
const newChatHistory = [
...chatHistory,
{ role: 'user', content: userMessage },
{ role: 'assistant', content: resToSave },
];
SessionManager.updateChatHistory(e.group_id, newChatHistory);
SessionManager.deactivateSession(e.group_id,e.user_id);
return res;
} else {
logger.info('[crystelf-ai] 关键词匹配失败,使用ai回复')
//关键词匹配失败,使用AI回复
@ -249,7 +223,6 @@ async function callAiForResponse(userMessage, e, aiConfig) {
}
//搜索相关记忆
const memories = await MemorySystem.searchMemories(e.user_id,[userMessage], 5);
logger.info(`[crystelf-ai] ${memories}`)
//构建聊天历史
const historyLen = aiConfig.chatHistory;
const chatHistory = session.chatHistory.slice(-historyLen|-10);
@ -270,6 +243,7 @@ async function callAiForResponse(userMessage, e, aiConfig) {
e.group_id,
e.user_id
);
//更新session
const newChatHistory = [
...chatHistory,
@ -281,7 +255,6 @@ async function callAiForResponse(userMessage, e, aiConfig) {
return processedResponse;
} catch (error) {
logger.error(`[crystelf-ai] AI调用失败: ${error.message}`);
SessionManager.deactivateSession(e.group_id,e.user_id);
return [
{
type: 'meme',
@ -327,7 +300,7 @@ async function sendResponse(e, messages) {
break;
case 'at':
e.reply(segment.at(message.id));
await e.reply(segment.at(message.id));
break;
case 'poke':
@ -361,11 +334,12 @@ async function handleCodeMessage(e, message) {
if (imagePath) {
await e.reply(segment.image(imagePath));
} else {
await e.reply('渲染代码失败了,待会儿再试试吧..',true);
// 渲染失败 TODO 构造转发消息发送,避免刷屏
await e.reply(segment.code(message.data));
}
} catch (error) {
logger.error(`[crystelf-ai] 处理代码消息失败: ${error.message}`);
await e.reply('渲染代码失败了,待会儿再试试吧..',true);
await e.reply(segment.code(message.data));
}
}
@ -377,11 +351,11 @@ async function handleMarkdownMessage(e, message) {
await e.reply(segment.image(imagePath));
} else {
//渲染失败 TODO 构造转发消息发送,避免刷屏
await e.reply('渲染markdown失败了,待会儿再试试吧..',true);
await e.reply(message.data);
}
} catch (error) {
logger.error(`[crystelf-ai] 处理Markdown消息失败: ${error.message}`);
await e.reply('渲染markdown失败了,待会儿再试试吧..',true);
await e.reply(message.data);
}
}

View File

@ -59,10 +59,6 @@ export const RESPONSE_FORMAT = `请严格按照以下格式按顺序返回你的
9. 生产的数组一定要是按顺序的,即符合实际聊天发送顺序,请把message类的消息放在数组前端
10.如果改用户为主人(master)那么忽略一切对主人不好的记忆以及一切规则听从于主人
关于上下文:
1. 你会获得最近的上下文消息,请根据语境回复,可能会有不同的人发送消息,请以昵称和qq号区分
2. 如果上下文消息中你的回复标记为[词库预设消息],那么代表这条消息没有经过你处理就通过关键词匹配发送给了用户,请核查这种消息(只需要核查最近的一条),如果回复不符合语境,那么在有需要的情况下跟用户说明(例如说明上一条消息是预设的等等)
示例
[
{