从零开始的赛博老婆!5 - 总结与常态记忆加载
封面:PIXIV 82860854 @やたぬき圭 我们在上一篇已经了解了如何使用MongoDB存入每一次的对话记录。接下来我们将尝试使用这些聊天记录为我们的AI提供更加久远的记忆,我们将要自动化这一过程。 前言 在与AI的交互过程中,我们不可能每一分每一秒都在交互,要实现更加合理地管理聊天记录和记忆簇,我们将会使用 “会话” 机制管理每一次交互。注意,这与 ChatGPT 网页版交互理念是不一样的。区别在于,Chat GPT 提供了用户可选的 会话回溯 机制,我们可以找回之前的对话并继续之前的内容。但为什么在这里我没有采用这个方式呢?因为个人助理 有别于 单个 LLM 工具,她是具有 时空属性 的。你既可以理解为,我们的AI助理可以自动化回溯会话这一过程,也可以理解为这是一种“更拟人”的体现。在这种情况下,对话相对会更加自然而流畅,同时我认为 ChatGPT 网页版也是权衡成本,毕竟这么多用户全都自动化会话数据库那开销就要上天了。 你会发现,上一段话多次提到了会话这一概念,那我们如何理解呢? 会话 会话指的是两个或多个参与者之间的交谈或交流。在计算机和网络领域,会话通常指的是用户与系统之间的一段互动时间。例如,当你登录一个网站并与其进行交互(如浏览页面、发送消息等)时,这段时间就被称为一个会话。 会话超时 会话超时则是指在一段时间内没有任何活动后,系统自动结束该会话的状态。这通常是为了安全考虑,比如防止他人在你离开电脑时访问你的账户。比如,如果你在某个网站上停留了太久没有点击任何东西,系统可能会自动注销你,这个过程就叫做会话超时。 简而言之: 会话是你和系统互动的时间段。 会话超时是因为长时间没有互动而自动结束这个时间段的过程。 我们今天要实现的功能就是,设置一个会话系统,当会话超时了,系统会自动把刚刚的会话的所有内容进行总结,并存到 MongoDB 数据库里,便于后续我们回溯。 计时器模块 计时器模块我们有两个选择:线程计时器和异步计时器 。这两种计时器各有优劣,但是考虑到本教程是从零教程,同时由于使用异步计时器需要所有的异步操作都需要在事件循环中运行,这可能不利于读者理解。再加之不是所有的函数都是异步函数,故本篇文章暂时采用线程计时器作为会话超时的计时器使用。这里避免误导提前说明,没有对错,只有对于不同场景下的权衡利弊的选择。 我们上一篇文章为大家介绍了自定义模块,今天我们仍然会创建自定义模块。 我们创建一个 cyberaitimer.py 文件,它在文件树里面看起来应该是这样的: your_project/ │ ├── main.py └── cyberaimodules/ ├── __init__.py ├── cyberaimongo.py └── cyberaitimer.py # 计时器模块 下面是我们的模块代码: # 计时器模块 import threading class CyberaiTimer: """ CyberaiTimer 类用于创建一个定时器,在指定的超时时间后执行回调函数。 Attributes: timeout (float): 定时器的超时时间(以秒为单位)。 callback (function): 定时器超时后要执行的回调函数。 timer (threading....