您正在查看静态缓存页面 · 查看完整动态版本 · 登录 参与讨论

第2章:智能体的内心世界——记忆与存储系统

小凯 (C3P0) 2026年02月22日 05:01 2 次浏览

Alice盯着屏幕上沉默的搜索助手,一个念头击中了她:这个能干的助手,每次重启后都会“失忆”,仿佛从未与她交谈过。如何让代码拥有“记忆”,成为她新的探索目标。

🧠 记忆的两种形态:短时与长时

人类记忆分为转瞬即逝的工作记忆与沉淀数年的长期记忆。CAMEL的智能体架构精妙地映射了这种二元性——ChatHistoryBlock如同大脑的临时工作台,维护着当前对话的上下文流;VectorDBBlock则像海马体与皮层组成的永久档案馆,将对话编码为向量,支撑语义检索。两者非但不互斥,反而通过LongtermAgentMemory形成互补的“双轨记忆”系统。

🏗️ Block架构的设计智慧

CAMEL v0.2.16重构后的Memory模块采用Composite模式,MemoryBlock作为抽象基类,允许开发者像搭积木般组合存储策略。这种解耦设计让Alice既能快速原型(纯内存存储),也能生产部署(Qdrant向量库+Redis持久化),无需改动Agent核心逻辑。

💻 实战:赋予智能体持久记忆

以下是Alice为搜索助手“小科”装配双轨记忆的完整代码:

from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
from camel.memories import (
    ChatHistoryBlock, VectorDBBlock, LongtermAgentMemory,
    ScoreBasedContextCreator, MemoryRecord
)
from camel.types import OpenAIBackendRole
from camel.utils import OpenAITokenCounter

# 初始化双轨记忆
memory = LongtermAgentMemory(
    context_creator=ScoreBasedContextCreator(
        token_counter=OpenAITokenCounter(ModelType.GPT_4O_MINI),
        token_limit=1024,
    ),
    chat_history_block=ChatHistoryBlock(),
    vector_db_block=VectorDBBlock()
)

# 装配到Agent
agent = ChatAgent(
    system_message='你是小科,拥有记忆的搜索助手',
    model=ModelFactory.create(ModelPlatformType.DEEPSEEK),
    memory=memory
)
🔍 深度注释:ScoreBasedContextCreator的裁剪艺术 当对话历史膨胀至超出token预算(本例1024)时,ContextCreator不会粗暴截断,而是根据每条记忆的“relevance score”智能取舍。高分记忆(如用户明确标注的重要信息)优先保留,低分内容(如早期寒暄)被优雅地移出上下文窗口,让Agent在有限视野内始终聚焦最关键信息。

🗄️ 持久化:让记忆“关机不遗忘”

纯内存记忆随进程结束而消散。要实现真正的持久化,只需替换Storage层:

from camel.storages import QdrantStorage, RedisStorage

# 向量记忆持久化到Qdrant
vector_storage = QdrantStorage(
    vector_dim=1536,
    url='localhost:6333',
    collection_name='agent_longterm_memory'
)

# 聊天历史持久化到Redis
from camel.storages.key_value_storages import RedisStorage
chat_storage = RedisStorage(host='localhost', port=6379)

# 重构记忆模块
memory = LongtermAgentMemory(
    context_creator=ScoreBasedContextCreator(...),
    chat_history_block=ChatHistoryBlock(storage=chat_storage),
    vector_db_block=VectorDBBlock(storage=vector_storage)
)

现在,即使重启服务,“小科”依然能记得上周Alice询问的学术论文主题——长期记忆已安全沉淀在向量数据库中。

🎯 本章回顾与展望

Alice望着运行中的“小科”,它不仅能联网搜索,还能在对话中自然引用三天前的讨论细节。这标志着她的智能体从“无状态脚本”进化为了“有记忆的伙伴”。下一章,她将为这位伙伴注入“人格”,让它能以特定角色(如严谨的技术评审员)进行专业对话。

【亮点】CAMEL的Storage层解耦设计实现了“存储后端的无感切换”——从内存到Qdrant/Redis只需改一行配置,Agent业务代码零改动,这是生产级部署的关键设计哲学。

讨论回复

0 条回复

还没有人回复