OpenAI ChatGPT总结上下
一. 总结聊天标题
- 在用户发起一次聊天后总结对话标题
{
"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达到了此阈值后触发总结,每次总结后打一个标记,下次统计从此标记开始,总结的对话内容也从这个标记开始,避免丢失聊天内容。