已复制
全屏展示
复制代码

OpenAI ChatGPT总结上下


· 6 min read

一. 总结聊天标题

  • 在用户发起一次聊天后总结对话标题
{
    "messages": [
        {
            "role": "user",
            "content": "Python中,两个字典如何合并到一个字典里面"
        },
        {
            "role": "assistant",
            "content": "在Python中,你可以使用`update()`。。。这两种方法都可以将两个字典合并到一个字典中。"
        },
        {
            "role": "user",
            "content": "使用6到7个字直接返回这句话的简要主题,不要解释、不要标点、不要语气词、不要多余文本,不要加粗,如果没有主题,请直接返回“闲聊”"
        }
    ],
    "stream": true,
    "model": "gpt-3.5-turbo",
    "temperature": 0.5,
    "presence_penalty": 0,
    "frequency_penalty": 0,
    "top_p": 1
}

GPT返回内容:

Python两个字典合并方法

二. 总结对话上下文

  • 总结对话上下文,目的是减少token的浪费
{
    "messages": [
        {
            "role": "user",
            "content": "Python中,两个字典如何合并到一个字典里面"
        },
        {
            "role": "assistant",
            "content": "在Python中...这两种方法都可以将两个字典合并到一个字典中。"
        },
        {
            "role": "user",
            "content": "我想创建一个新的字典,而不是在旧的字典上更新"
        },
        {
            "role": "assistant",
            "content": "如果你想创建一个新的字典来合并两个字典...。"
        },
        {
            "role": "user",
            "content": "Python如何创建新的空字典"
        },
        {
            "role": "assistant",
            "content": "要创建一个新的空字典,可以使用..."
        },
        {
            "role": "user",
            "content": "Python如何创建有初始值的新字典"
        },
        {
            "role": "assistant",
            "content": "要创建一个具有初始值的新字典,你.....。"
        },
        {
            "role": "user",
            "content": "Python里面对象怎么理解,以及怎么使用,我要一个详细的文档"
        },
        {
            "role": "assistant",
            "content": "在Python中,对象是一切的基础。几乎所有东西都是对象...."
        },
        {
            "role": "system",
            "content": "简要总结一下对话内容,用作后续的上下文提示 prompt,控制在 200 字以内"
        }
    ],
    "stream": true,
    "model": "gpt-3.5-turbo",
    "temperature": 0.5,
    "presence_penalty": 0,
    "frequency_penalty": 0,
    "top_p": 1
}

上面的内容GPT返回了总结文字:

讨论了在Python中合并字典的方法,包括使用update()方法和字典解析。还介绍了如何创建新的空字典、具有初始值的新字典以及Python中的对象概念和使用方法。提供了Python对象的详细文档链接,以便深入了解对象模型、类型和值、属性和方法等内容

从总结的内容中可以看到,聊天内容是没有丢失的,只是细节部分没有了。

下次发起聊天时,可以把这次总结的内容,放到system里面了,只保留最近的4次聊天:

{
    "messages": [
        {
            "role": "system",
            "content": "\nYou are ChatGPT, a large language model trained by OpenAI. You are a helpful assistant."
        },
        {
            "role": "system",
            "content": "这是历史聊天总结作为前情提要:讨论了在Python中合并字典的方法,包括使用`update()`方法和字典解析。还介绍了如何创建新的空字典、具有初始值的新字典以及Python中的对象概念和使用方法。提供了Python对象的详细文档链接,以便深入了解对象模型、类型和值、属性和方法等内容。"
        },
        {
            "role": "user",
            "content": "Python如何创建有初始值的新字典"
        },
        {
            "role": "assistant",
            "content": "要创建一个具有初始值的新字典。。。"
        },
        {
            "role": "user",
            "content": "Python里面对象怎么理解,以及怎么使用,我要一个详细的文档"
        },
        {
            "role": "assistant",
            "content": "在Python中,对象是一切的基础。。。。"
        },
        {
            "role": "user",
            "content": "Python中对象什么时候被销毁呢"
        }
    ],
    "stream": true,
    "model": "gpt-3.5-turbo",
    "temperature": 0.5,
    "presence_penalty": 0,
    "frequency_penalty": 0,
    "top_p": 1
}

继续只保留最近的4次聊天:

{
    "messages": [
        {
            "role": "system",
            "content": "\nYou are ChatGPT, a large language model trained by OpenAI. You are a helpful assistant."
        },
        {
            "role": "system",
            "content": "这是历史聊天总结作为前情提要:讨论了在Python中合并字典的方法,包括使用`update()`方法和字典解析。还介绍了如何创建新的空字典、具有初始值的新字典以及Python中的对象概念和使用方法。提供了Python对象的详细文档链接,以便深入了解对象模型、类型和值、属性和方法等内容。"
        },
        {
            "role": "user",
            "content": "Python里面对象怎么理解,以及怎么使用,我要一个详细的文档"
        },
        {
            "role": "assistant",
            "content": "在Python中,对象是一切的基础...."
        },
        {
            "role": "user",
            "content": "Python中对象什么时候被销毁呢"
        },
        {
            "role": "assistant",
            "content": "在Python中,对象的销毁.....。"
        },
        {
            "role": "user",
            "content": "Python如何实现单例模式"
        }
    ],
    "stream": true,
    "model": "gpt-3.5-turbo",
    "temperature": 0.5,
    "presence_penalty": 0,
    "frequency_penalty": 0,
    "top_p": 1
}

三. 再次总结对话上下文

当对话内容多了以后,继续总结上下文:

{
    "messages": [
        {
            "role": "system",
            "content": "这是历史聊天总结作为前情提要:讨论了在Python中合并字典的方法,包括使用`update()`方法和字典解析。还介绍了如何创建新的空字典、具有初始值的新字典以及Python中的对象概念和使用方法。提供了Python对象的详细文档链接,以便深入了解对象模型、类型和值、属性和方法等内容。"
        },
        {
            "role": "user",
            "content": "Python中对象什么时候被销毁呢"
        },
        {
            "role": "assistant",
            "content": "在Python中,对象的销毁。。。。。"
        },
        {
            "role": "user",
            "content": "Python如何实现单例模式"
        },
        {
            "role": "assistant",
            "content": "在Python中实现单例模式有多种方法。。。。。"
        },
        {
            "role": "system",
            "content": "简要总结一下对话内容,用作后续的上下文提示 prompt,控制在 200 字以内"
        }
    ],
    "stream": true,
    "model": "gpt-3.5-turbo",
    "temperature": 0.5,
    "presence_penalty": 0,
    "frequency_penalty": 0,
    "top_p": 1
}

返回总结内容:

这是历史聊天总结作为前情提要:讨论了Python对象的销毁时机,解释了引用计数和循环引用检测对对象内存管理的作用。然后介绍了在Python中实现单例模式的两种常见方法:使用装饰器和类方法。装饰器可以通过闭包来保持单例实例,而类方法则通过控制实例化过程来确保只有一个实例。这些方法都能有效地实现单例模式,确保一个类只有一个实例存在。

下次聊天时,可以以在聊天最前面添加了一个总结的system,或者替换掉之前总结的system,openai的system可以有多个,可根据实际情况处理。

四. 何时进行对话总结

可以设置一个token阈值比如5000,当token达到了此阈值后触发总结,每次总结后打一个标记,下次统计从此标记开始,总结的对话内容也从这个标记开始,避免丢失聊天内容。

🔗

文章推荐