AI Agent的记忆系统实现:从短期对话到长期知识

在上一篇文章中,我们搭建了 AI Agent 的基础框架。今天,我想深入讲讲 AI Agent 最核心的部分之一:记忆系统。说实话,我在实现记忆系统时走了不少弯路,希望通过这篇文章,能帮大家少走一些弯路。

从一个bug说起

还记得在开发知识助手的过程中,我遇到了一个很有意思的问题。一天我正在测试多轮对话功能:

我:Python的装饰器是什么?
助手:装饰器是Python中用于修改函数或类行为的一种设计模式...(省略具体解释)

我:能给个例子吗?
助手:抱歉,你想要什么的例子?

我:...(扶额)

这个对话看起来很搞笑,但实际上反映了一个严重的问题:AI Agent 没有"记忆",它不记得上一轮谈论的是什么。这让我开始思考:如何给 AI Agent 实现一个真正好用的记忆系统?

记忆的层次

经过研究和实践,我把 AI Agent 的记忆分成了三个层次:

  1. 短期记忆:对话上下文
  2. 工作记忆:当前任务相关的信息
  3. 长期记忆:持久化的知识库

就像人类大脑一样,这三种记忆各有特点和用途。

短期记忆:对话上下文

先从最基础的短期记忆开始。实现起来大概是这样的:

class ConversationMemory:
    def __init__(
        self,
        max_turns: int = 5,
        max_tokens: int = 2000
    ):
        self.messages = []
        self.max_turns = max_turns
        self.max_tokens = max_tokens

    def add_message(
        self,
        role: str,
        content: str
    ):
        self.messages.append({
            "role": role,
            "content": content,
            "timestamp": datetime.now()
        })

        # 保持对话长度在限制内
        self._truncate_if_needed()

    def get_context(self) -> List[dict]:
        return [
            {
                "role": msg["role"],
                "content": msg["content"]
            }
            for msg in self.messages
        ]

    def _truncate_if_needed(self):
        # 1. 按对话轮数截断
        if len(self.messages) > self.max_turns * 2:
            self.messages = self.messages[-(self.max_turns * 2):]

        # 2. 按token数截断
        total_tokens = sum(
            len(msg["content"].split())
            for msg in self.messages
        )
        while (
            total_tokens > self.max
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值