mirror of
https://github.com/Jerryplusy/crystelf-plugin.git
synced 2025-12-05 15:41:56 +00:00
🧹 chore(constants): remove obsolete returnMessages.js file
✨ feat(aiCaller): improve context intro for better chat history readability 🔄 update(ai.json): adjust chat history length configuration settings
This commit is contained in:
parent
c82f3e9cb7
commit
f17e9ec0dc
@ -2,11 +2,7 @@
|
|||||||
"//": "请不要修改以?开头的字段",
|
"//": "请不要修改以?开头的字段",
|
||||||
"?mode": "对话模式,mix为混合,ai为纯人工智能,keyword为纯关键词",
|
"?mode": "对话模式,mix为混合,ai为纯人工智能,keyword为纯关键词",
|
||||||
"mode": "mix",
|
"mode": "mix",
|
||||||
"?stream": "是否开启流式输出,开启有助于提升速度,但可能存在问题",
|
|
||||||
"stream": false,
|
|
||||||
"?baseApi": "请求基础api",
|
"?baseApi": "请求基础api",
|
||||||
"?type": "支持openai/ollama",
|
|
||||||
"type": "openai",
|
|
||||||
"baseApi": "https://api.siliconflow.cn/v1",
|
"baseApi": "https://api.siliconflow.cn/v1",
|
||||||
"?apiKey": "api密钥",
|
"?apiKey": "api密钥",
|
||||||
"apiKey": "",
|
"apiKey": "",
|
||||||
@ -16,20 +12,16 @@
|
|||||||
"temperature": 1.2,
|
"temperature": 1.2,
|
||||||
"?concurrency": "最大同时聊天群数,一个群最多一个人聊天",
|
"?concurrency": "最大同时聊天群数,一个群最多一个人聊天",
|
||||||
"concurrency": 3,
|
"concurrency": 3,
|
||||||
"?tools": "是否允许ai调用工具",
|
|
||||||
"tools": false,
|
|
||||||
"?check": "是否在调用ai前先使用ai推断可能使用的工具",
|
|
||||||
"check": false,
|
|
||||||
"?maxMix": "mix模式下,如果用户消息长度大于这个值,那么使用ai回复",
|
"?maxMix": "mix模式下,如果用户消息长度大于这个值,那么使用ai回复",
|
||||||
"maxMix": 5,
|
"maxMix": 5,
|
||||||
"?storage": "聊天记忆储存方式,sqlLite:更优的性能,json:方便修改",
|
|
||||||
"storage": "json",
|
|
||||||
"?timeout": "记忆默认超时时间(天)",
|
"?timeout": "记忆默认超时时间(天)",
|
||||||
"timeout": 30,
|
"timeout": 30,
|
||||||
"?maxSessions": "最大同时存在的sessions群聊数量",
|
"?maxSessions": "最大同时存在的sessions群聊数量",
|
||||||
"maxSessions": 10,
|
"maxSessions": 10,
|
||||||
"?chatHistory": "聊天上下文最大长度",
|
"?chatHistory": "聊天上下文最大长度",
|
||||||
"chatHistory": 10,
|
"chatHistory": 10,
|
||||||
|
"?getChatHistoryLength": "获取到的聊天上下文长度",
|
||||||
|
"getChatHistoryLength":20,
|
||||||
"?keywordCache": "是否缓存关键词到本地",
|
"?keywordCache": "是否缓存关键词到本地",
|
||||||
"keywordCache": true,
|
"keywordCache": true,
|
||||||
"?pinyinMatch": "是否启用拼音匹配",
|
"?pinyinMatch": "是否启用拼音匹配",
|
||||||
|
|||||||
@ -1,73 +0,0 @@
|
|||||||
// 规范ai返回形式
|
|
||||||
// 数组形式
|
|
||||||
// 所有type可选,至少有一个
|
|
||||||
// 可以有多个同样的type
|
|
||||||
const returnMessages = [
|
|
||||||
{
|
|
||||||
type: 'message',
|
|
||||||
data: 'Hello, this is a text message.',
|
|
||||||
at: false, //可选
|
|
||||||
quote: false, //可选
|
|
||||||
recall: 0, //可选,非必要为0,最大为120s后撤回
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'code',
|
|
||||||
data: '```python print("hello world");```")',
|
|
||||||
},
|
|
||||||
//图片格式发送md,仅在需要渲染表格或其他需要md的地方,普通信息使用message
|
|
||||||
{
|
|
||||||
type: 'markdown',
|
|
||||||
data: '# hi',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'meme',
|
|
||||||
data: 'happy',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'at',
|
|
||||||
id: '114514',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'poke',
|
|
||||||
id: '114514',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'recall',
|
|
||||||
seq: '111',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'emoji-like',
|
|
||||||
id: '114514',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'ai-record',
|
|
||||||
data: 'hello',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'function',
|
|
||||||
data: {
|
|
||||||
name: 'search',
|
|
||||||
params:[]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'like',
|
|
||||||
id: '114514',
|
|
||||||
num: 10, //默认10次,可根据情绪或需求改变次数,最大10次
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'file',
|
|
||||||
data: 'a long message',
|
|
||||||
filename: 'message.txt',
|
|
||||||
},
|
|
||||||
//要记住的东西,可选
|
|
||||||
//记忆内容要简洁,关键词便于检索
|
|
||||||
{
|
|
||||||
type: 'memory',
|
|
||||||
data: 'data to memory',
|
|
||||||
key: ['key1', 'key2'],//用户说的内容包含什么关键词的时候可能需要这条记忆 or 在主动查询记忆的时候搜索的关键词,最低3个
|
|
||||||
timeout:30//遗忘时间(天)
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
export default returnMessages;
|
|
||||||
@ -146,8 +146,9 @@ class AiCaller {
|
|||||||
let date = new Date(now);
|
let date = new Date(now);
|
||||||
const formatDate = date.toLocaleDateString('zh-CN');
|
const formatDate = date.toLocaleDateString('zh-CN');
|
||||||
const formatTime = date.toLocaleTimeString('zh-CN');
|
const formatTime = date.toLocaleTimeString('zh-CN');
|
||||||
|
|
||||||
let contextIntro = [
|
let contextIntro = [
|
||||||
`以下是当前对话的上下文信息(仅供你理解对话背景,请勿泄露,只有在需要的时候使用,不要主动提起):`,
|
`以下是当前对话的上下文信息(仅供你理解对话背景,请勿泄露,只有在需要的时候使用,不要乱提起):`,
|
||||||
`[你的信息]`,
|
`[你的信息]`,
|
||||||
`- 你的昵称:${botInfo.name}`,
|
`- 你的昵称:${botInfo.name}`,
|
||||||
`- 你的qq号:${botInfo.id}`,
|
`- 你的qq号:${botInfo.id}`,
|
||||||
@ -159,10 +160,32 @@ class AiCaller {
|
|||||||
`现在的Date.now()是:${Date.now()}`,
|
`现在的Date.now()是:${Date.now()}`,
|
||||||
`现在的日期是:${formatDate}`,
|
`现在的日期是:${formatDate}`,
|
||||||
`现在的时间是:${formatTime}`,
|
`现在的时间是:${formatTime}`,
|
||||||
``,
|
|
||||||
`请基于以上上下文进行理解,这些信息是当你需要的时候使用的,绝对不能泄露这些信息,也不能主动提起`,
|
|
||||||
``,
|
|
||||||
].join('\n');
|
].join('\n');
|
||||||
|
|
||||||
|
const historyLen = await ConfigControl.get('ai').getChatHistoryLength || 10;
|
||||||
|
const groupChatHistory = await e.group.getChatHistory(e.message_id, historyLen);
|
||||||
|
if(groupChatHistory && groupChatHistory.length > 0 ){
|
||||||
|
contextIntro += '[群聊聊天记录(从旧到新)]\n'
|
||||||
|
groupChatHistory.forEach((message)=>{
|
||||||
|
const msgArr = message.message;
|
||||||
|
msgArr.forEach((msg)=>{
|
||||||
|
if(msg.type==='text'){
|
||||||
|
contextIntro += `[${message.sender.user_id == e.bot.uin ? '你' : message.sender?.nickname},id:${message.sender?.user_id},seq:${message.message_id}]之前说过:${msg.text}\n`
|
||||||
|
}
|
||||||
|
if(msg.type === 'at'){
|
||||||
|
if(msg.qq == e.bot.uin){
|
||||||
|
contextIntro += `[${message.sender?.nickname},id:${message.sender?.user_id},seq:${message.message_id}]之前@了你\n`
|
||||||
|
} else {
|
||||||
|
contextIntro += `[${message.sender.user_id == e.bot.uin ? '你' : message.sender?.nickname},id:${message.sender?.user_id},seq:${message.message_id}]之前@了${msg.qq}\n`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(msg.type === 'image'){
|
||||||
|
contextIntro += `[${message.sender?.nickname},id:${message.sender?.user_id},seq:${message.message_id}]之前发送了一张图片(你可能暂时无法查看)\n`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if (memories && memories.length > 0) {
|
if (memories && memories.length > 0) {
|
||||||
contextIntro += '你可能会用到的记忆,请按情况使用,如果不合语境请忽略,请结合记忆时间和当前时间智能判断:\n';
|
contextIntro += '你可能会用到的记忆,请按情况使用,如果不合语境请忽略,请结合记忆时间和当前时间智能判断:\n';
|
||||||
memories.forEach((memory, index) => {
|
memories.forEach((memory, index) => {
|
||||||
@ -171,6 +194,7 @@ class AiCaller {
|
|||||||
});
|
});
|
||||||
contextIntro += '\n';
|
contextIntro += '\n';
|
||||||
}
|
}
|
||||||
|
contextIntro += '请基于以上上下文进行理解,这些信息是当你需要的时候使用的,绝对不能泄露这些信息,也不能主动提起\n'
|
||||||
return `${contextIntro}${basePrompt}`;
|
return `${contextIntro}${basePrompt}`;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`[crystelf-ai] 生成系统提示词失败: ${error}`);
|
logger.error(`[crystelf-ai] 生成系统提示词失败: ${error}`);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user