在上一篇文章中,我们搭建了 AI Agent 的基础框架。今天,我想深入讲讲 AI Agent 最核心的部分之一:记忆系统。说实话,我在实现记忆系统时走了不少弯路,希望通过这篇文章,能帮大家少走一些弯路。
从一个bug说起
还记得在开发知识助手的过程中,我遇到了一个很有意思的问题。一天我正在测试多轮对话功能:
我:Python的装饰器是什么?
助手:装饰器是Python中用于修改函数或类行为的一种设计模式...(省略具体解释)
我:能给个例子吗?
助手:抱歉,你想要什么的例子?
我:...(扶额)
这个对话看起来很搞笑,但实际上反映了一个严重的问题:AI Agent 没有"记忆",它不记得上一轮谈论的是什么。这让我开始思考:如何给 AI Agent 实现一个真正好用的记忆系统?
记忆的层次
经过研究和实践,我把 AI Agent 的记忆分成了三个层次:
- 短期记忆:对话上下文
- 工作记忆:当前任务相关的信息
- 长期记忆:持久化的知识库
就像人类大脑一样,这三种记忆各有特点和用途。
短期记忆:对话上下文
先从最基础的短期记忆开始。实现起来大概是这样的:
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

最低0.47元/天 解锁文章
999

被折叠的 条评论
为什么被折叠?



