feat: 改用调接口拿聊天记录,不用自己记录了

This commit is contained in:
ikechan8370 2023-03-26 23:23:37 +08:00
parent 3885527a7d
commit 1c79ff00b7
3 changed files with 17 additions and 74 deletions

View file

@ -1015,6 +1015,16 @@ export class chatgpt extends plugin {
opt.qq = e.sender.user_id
opt.nickname = e.sender.card
opt.groupName = e.group.name
let latestChat = await e.group.getChatHistory(0, 1)
let seq = latestChat[0].seq
let chats = []
while (chats.length < Config.groupContextLength) {
let chatHistory = await e.group.getChatHistory(seq, 20)
chats.push(...chatHistory)
}
chats = chats.slice(0, Config.groupContextLength)
console.log(chats)
opt.chats = chats
}
response = await bingAIClient.sendMessage(prompt, opt, (token) => {
reply += token

View file

@ -1,52 +0,0 @@
import plugin from '../../../lib/plugins/plugin.js'
import { Config } from '../utils/config.js'
import { formatDate } from '../utils/common.js'
export class intercepter extends plugin {
constructor () {
super({
/** 功能名称 */
name: 'ChatGPT-Plugin 监听群聊对话',
/** 功能描述 */
dsc: 'ChatGPT-Plugin 监听群聊对话,以便了解上下文',
event: 'message',
/** 优先级,数字越小等级越高 */
priority: 1,
rule: [
{
/** 学习群友聊天 **/
reg: '^[^#][sS]*',
fnc: 'recordChat',
log: false
}
]
})
}
async recordChat (e) {
// let gl = await this.e.group.getMemberMap()
if (!e.raw_message) {
if (e.img && e.img.length > 0) {
e.msg = '[图片]'
}
}
if (e.isGroup && e.raw_message) {
const chat = {
sender: e.sender.card,
senderId: e.sender.user_id,
senderSex: e.sender.sex,
msg: e.raw_message,
role: e.sender.role,
area: e.sender.area,
age: e.sender.age,
time: formatDate(new Date())
}
// console.log(chat)
await redis.rPush('CHATGPT:LATEST_CHAT_RECORD:' + e.group_id, JSON.stringify(chat))
if (await redis.lLen('CHATGPT:LATEST_CHAT_RECORD:' + e.group_id) > Config.groupContextLength) {
await redis.lPop('CHATGPT:LATEST_CHAT_RECORD:' + e.group_id)
}
}
return false
}
}

View file

@ -213,7 +213,7 @@ export default class SydneyAIClient {
abortController = new AbortController(),
timeout = Config.defaultTimeoutMs,
firstMessageTimeout = Config.sydneyFirstMessageTimeout,
groupId, nickname, qq, groupName
groupId, nickname, qq, groupName, chats
} = opts
if (typeof onProgress !== 'function') {
onProgress = () => {}
@ -448,15 +448,16 @@ export default class SydneyAIClient {
context += `以下是一段qq群内的对话提供给你作为上下文你在回答所有问题时必须优先考虑这些信息结合这些上下文进行回答这很重要
发言人的格式是"群名片(qq号)[角色owner是群主admin是管理员][地区][年龄]"
`
context += (await redis.lRange('CHATGPT:LATEST_CHAT_RECORD:' + groupId, 0, -1))
.map((item) => item.toString())
context += chats
.map(chat => {
chat = JSON.parse(chat)
return `发言者:${chat.sender} (${chat.senderId}) [${chat.role}] [${chat.area}] (${chat.age}) 性别:${chat.senderSex} 发言内容:${chat.msg} 发言时间:${chat.time}\n`
let sender = chat.sender
return `发言者:${sender.card} (${sender.user_id}) [${sender.role}] [${sender.area}] (${sender.age}) [${sender.title}] 性别:${sender.sex} 发言内容:${chat.raw_message} 发言时间:${formatDate(new Date(chat.time))}\n`
})
.join('\n')
}
logger.info(context)
if (Config.debug) {
logger.info(context)
}
if (context) {
obj.arguments[0].previousMessages.push({
author: 'user',
@ -696,22 +697,6 @@ export default class SydneyAIClient {
conversation.messages.push(userMessage)
conversation.messages.push(replyMessage)
}
if (groupId) {
const chat = {
sender: Config.sydneyBrainWashName || 'Sydney',
senderId: Bot.uin,
msg: reply.text,
role: 'robot',
area: 'Microsoft',
age: 1,
time: formatDate(new Date())
}
// console.log(chat)
await redis.rPush('CHATGPT:LATEST_CHAT_RECORD:' + groupId, JSON.stringify(chat))
if (await redis.lLen('CHATGPT:LATEST_CHAT_RECORD:' + groupId) > Config.groupContextLength) {
await redis.lPop('CHATGPT:LATEST_CHAT_RECORD:' + groupId)
}
}
await this.conversationsCache.set(conversationKey, conversation)
return {
conversationSignature,