You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让msg.content累加字符串而非被替换,满足Discord GPT-3机器人上下文需求

代码修改方案

核心调整逻辑

  • 在collector实例的同级作用域声明上下文存储变量,生命周期和collector保持一致
  • 每次触发消息收集事件时,先将新的用户消息按照GPT要求的对话格式追加到上下文变量中
  • 拿到GPT返回结果后,同步将AI回复追加到上下文,保证后续请求携带完整对话历史
  • collector计时结束/达到最大收集条数时自动清空上下文,避免内存占用

修改后完整代码

// 声明对话上下文存储变量,可根据需求添加初始prompt前缀
let conversationHistory = '';

var collector = new MessageCollector(message.channel, filter, {
    max: 10,
    time: 60000,
})

collector.on("collect", (msg) => {
    console.log(msg.content)
    // 追加用户新消息到上下文,使用固定角色标识方便GPT识别对话角色
    conversationHistory += `\n Human: ${msg.content}`;
            
    openai.Completion.create({
        engine: "davinci",
        prompt: conversationHistory,
        temperature: 0.9,
        max_tokens: 150,
        top_p: 1,
        frequency_penalty: 0.35,
        presence_penalty: 0.6, 
        stop: ["\n", " Human:", " AI:"]  
    }).then((response) => {
        const aiReply = response.choices[0].text.trim();
        // 追加AI回复到上下文,保证后续请求携带全量对话
        conversationHistory += `\n AI: ${aiReply}`;
        message.channel.send(aiReply);
    })
})

// 监听collector结束事件,清空上下文
collector.on('end', () => {
    conversationHistory = '';
})
}

注意事项

davinci模型支持的最大token数为4097,该数值包含prompt的总token数和接口返回设置的max_tokens数,对话过长时需要对历史上下文做截断处理,避免触发接口参数错误。

内容的提问来源于stack exchange,提问作者bruh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:24:02