ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI Agent长期记忆系统实战:从向量数据库到个性化对话实现

AI Agent长期记忆系统实战:从向量数据库到个性化对话实现 最近在AI圈子里一个名为“青柳姨姨何时跟我回家”的项目悄然走红。如果你点开它的GitHub仓库可能会被这个充满人情味的标题搞得一头雾水——这到底是AI模型还是什么情感计算的新玩意儿实际上这个项目是wl3World Level 3系列模型中的一个具体实现。它不是一个简单的聊天机器人而是一个旨在构建具备长期记忆、复杂任务规划和多轮对话能力的AI Agent。名字里的“青柳姨姨”更像是一个代号代表了项目希望AI能像一位亲切、可靠、有记忆的长辈一样理解并融入用户的长期生活与对话上下文。为什么一个技术项目要起这么“不技术”的名字这恰恰反映了当前AI发展的一个关键痛点如何让冷冰冰的模型真正理解并记住“你”是谁以及“你”关心什么。大多数现有的对话模型都是“健忘”的每次对话都像初次见面。而“青柳姨姨”项目尝试解决的就是让AI拥有持续的记忆和上下文理解能力实现真正个性化的、连贯的长期交互。本文将为你彻底拆解这个有趣的项目。我们不会停留在概念层面而是从零开始带你理解其核心架构并亲手部署和运行一个具备“记忆”的AI Agent。你会学到wl3框架的核心思想它如何让AI记住过去并基于记忆规划未来项目实战部署从环境准备、模型配置到启动运行一步步跑通整个流程。深度功能体验如何与Agent进行多轮对话观察其记忆的存储与调用背后的技术原理向量数据库、记忆检索、任务分解这些概念是如何落地的避坑指南与最佳实践在部署和调优过程中有哪些常见的“雷区”无论你是对AI Agent开发感兴趣的工程师还是想了解下一代对话AI可能性的技术爱好者这篇文章都将提供一份可落地、可复现的实践指南。我们直接开始。1. 这篇文章真正要解决的问题在深入代码之前我们必须先厘清一个根本问题为什么我们需要一个“有记忆”的AI现有的ChatGPT、Claude等模型能力已经非常强大但它们本质上仍是“无状态”的。每次对话你都需要在提示词中重新交代背景或者依赖有限的上下文窗口如128K Tokens来维持短期记忆。一旦对话轮次增多、时间拉长AI就会“忘记”关键的细节。“青柳姨姨何时跟我回家”以下简称本项目基于wl3框架瞄准的正是这个痛点。它试图构建的是一个具备长期记忆、并能主动利用记忆进行规划和决策的智能体。具体来说它要解决以下几个具体问题身份与关系连续性让AI记住用户的姓名、喜好、习惯甚至在多次交互中构建起一个虚拟的“关系图谱”。例如AI能记得你上周说养的猫叫“元宝”这次你提到“它”时AI能准确关联。任务与承诺的跟踪你让AI“下周提醒我交水电费”传统的Bot需要依赖外部日历系统。而本项目的Agent可以将这个“承诺”作为一条记忆存储并在未来的某个时间点或当你提到相关话题时主动提醒你。复杂对话的上下文维持针对一个复杂项目如策划一次旅行进行长达数天甚至数周的断续讨论。Agent需要记住所有已讨论的细节目的地、预算、人员、已做出的决定和待办事项并在每次新对话中无缝衔接。基于记忆的个性化响应你的回答不仅基于当前问题还综合了你过去表达过的观点、情绪和经历使得交互更加贴切和人性化。因此本项目的价值不在于提供一个“更聪明”的单一回答生成器而在于构建一个可持续进化的数字伴侣或工作协作者的基础设施。理解了这一点我们再看它的技术实现就会清晰很多。2. 基础概念与核心原理要理解本项目需要先掌握几个核心概念。这些概念共同构成了wl3框架的基石。2.1 什么是 AI Agent简单来说Agent智能体是一个能够感知环境、自主决策并执行行动以实现目标的程序。与传统的“一问一答”式聊天机器人不同一个完整的Agent通常包含以下组件记忆Memory存储历史交互、知识、用户偏好等。规划Planning将复杂目标分解为可执行的子任务序列。工具使用Tool Use调用外部API、查询数据库、执行代码等能力。反思Reflection对自身行动和结果进行评估优化后续策略。本项目就是一个具体的Agent实现其重点强化了记忆和基于记忆的规划能力。2.2 记忆Memory系统核心突破记忆是本项目的灵魂。它通常分为几种类型短期记忆即当前的对话上下文存在于大语言模型LLM的上下文窗口中。长期记忆需要持久化存储的信息超出上下文窗口的部分。工作记忆Agent在处理当前任务时从长期记忆中动态检索并加载到上下文中的相关信息。本项目的关键技术在于长期记忆的存储与检索。它并非简单地将所有对话历史存入数据库而是采用了更智能的方式记忆向量化将每一段对话、用户陈述或事件通过嵌入模型Embedding Model转换为一个高维向量。向量数据库存储将这些向量存储在专门的向量数据库如Chroma, Weaviate, Pinecone中。相关性检索当新的用户输入到来时系统将其同样转换为向量然后在向量数据库中搜索语义上最相关的过往记忆并将其作为上下文提供给LLM。这就解决了“大海捞针”的问题即使你有十万条记忆AI也能快速找到与当前对话最相关的几条。2.3 wl3 (World Level 3) 框架简述“wl3”是一个构建高级AI Agent的框架或方法论。我们可以类比“自动驾驶等级”来理解Level 1: 简单指令响应如“打开灯”。Level 2: 多轮对话但无持久状态。Level 3:具备长期记忆和世界模型能够进行基于历史的规划和决策。本项目作为“wl3第四组”的成果正是对Level 3能力的一次工程化实践。它整合了LLM、向量数据库、任务规划器等模块形成了一个可运行的Agent系统。2.4 核心工作流程一次完整的交互流程大致如下graph TD A[用户输入新消息] -- B(将新消息向量化); B -- C{在向量数据库中br进行相似性搜索}; C -- D[检索出最相关的brN条长期记忆]; D -- E[将检索到的记忆 新消息br组合成增强提示词]; E -- F[提交给LLM生成响应]; F -- G{LLM判断此条交互br是否值得存入长期记忆?}; G -- 是 -- H[将重要信息向量化后存入数据库]; G -- 否 -- I[流程结束]; H -- I; I -- J[将响应返回给用户];这个过程使得Agent的每一次回应都建立在对你过往的了解之上。3. 环境准备与前置条件现在我们开始动手部署。首先确保你的开发环境满足以下要求。3.1 硬件与软件环境操作系统: Linux (Ubuntu 20.04 推荐), macOS, 或 Windows (WSL2 强烈推荐)。Python: 版本 3.9 或 3.10。不建议使用3.11可能存在依赖兼容性问题。包管理: 使用pip和venv创建虚拟环境是必须的以避免依赖冲突。内存: 至少8GB RAM。如果本地运行嵌入模型和LLM需要16GB以上。网络: 能够访问互联网以下载模型和依赖。3.2 关键依赖说明本项目依赖于几个核心组件它们的配置选择直接影响体验大语言模型 (LLM): 项目的“大脑”。你可以选择在线API(推荐初学者): OpenAI GPT-3.5/4, Anthropic Claude等。需要相应的API Key。本地模型(追求隐私/可控): 如 Llama 3, Qwen, ChatGLM 等。需要足够的GPU内存或使用CPU推理。嵌入模型 (Embedding Model): 将文本转换为向量的“编码器”。通常使用较小的模型如text-embedding-ada-002(OpenAI) 或bge-small-zh(本地中文)。向量数据库 (Vector Database): 存储和检索向量的“记忆仓库”。本项目常用ChromaDB因为它轻量、易用且无需单独服务。3.3 第一步创建并激活虚拟环境打开你的终端执行以下命令# 1. 克隆项目仓库 (假设仓库地址为 example/repo请替换为实际地址) git clone 项目仓库地址 cd wl3-fourth-group-qingliu-auntie # 2. 创建Python虚拟环境 python -m venv venv # 3. 激活虚拟环境 # Linux/macOS source venv/bin/activate # Windows (CMD) venv\Scripts\activate # Windows (PowerShell) .\venv\Scripts\Activate.ps1 # 激活后命令行提示符前应显示 (venv)4. 核心流程拆解部署与配置项目的运行可以分解为几个清晰的步骤安装依赖、配置模型、初始化数据库、启动服务。4.1 安装项目依赖在激活的虚拟环境中安装所需的Python包。通常项目根目录会有一个requirements.txt文件。# 升级pip pip install --upgrade pip # 安装依赖 pip install -r requirements.txt如果项目没有提供requirements.txt你可能需要根据其文档手动安装。核心依赖通常包括pip install openai chromadb langchain langchain-openai tiktokenopenai: 调用OpenAI API。chromadb: 向量数据库客户端。langchainlangchain-openai: LangChain框架及其OpenAI集成用于构建Agent链。tiktoken: OpenAI模型的Tokenizer用于计算Token数量。4.2 配置模型与API密钥这是最关键的一步。你需要创建一个配置文件如.env文件来管理密钥和模型设置。在项目根目录创建.env文件touch .env编辑.env文件填入你的配置。以下是一个使用OpenAI API的示例配置# .env 配置文件 # OpenAI 配置 OPENAI_API_KEYsk-your-openai-api-key-here OPENAI_API_BASEhttps://api.openai.com/v1 # 如果你使用代理可能需要修改 LLM_MODEL_NAMEgpt-3.5-turbo # 或 gpt-4, gpt-4-turbo-preview EMBEDDING_MODEL_NAMEtext-embedding-ada-002 # 向量数据库配置 (ChromaDB 默认持久化路径) PERSIST_DIRECTORY./chroma_db # Agent 基础配置 AGENT_NAME青柳姨姨 MEMORY_RETRIEVAL_COUNT5 # 每次对话检索多少条相关记忆重要将sk-your-openai-api-key-here替换为你真实的OpenAI API Key。请妥善保管此文件不要将其提交到Git。如果你想使用本地模型配置会复杂很多。你需要安装ollama、transformers等库并修改代码中调用模型的部分。对于初次体验强烈建议先使用OpenAI API确保流程跑通。4.3 初始化记忆存储向量数据库在首次运行前需要初始化ChromaDB。通常项目的主程序或一个初始化脚本会完成这个工作。我们创建一个简单的初始化脚本init_memory.py来理解这个过程# init_memory.py import os from dotenv import load_dotenv import chromadb from chromadb.config import Settings # 加载 .env 中的配置 load_dotenv() # 设置持久化目录 persist_directory os.getenv(PERSIST_DIRECTORY, ./chroma_db) # 创建 Chroma 客户端并指定持久化路径 client chromadb.PersistentClient(pathpersist_directory) # 尝试获取或创建名为 “memories” 的集合Collection # 集合是存储相似向量的容器 try: collection client.get_collection(namememories) print(f✅ 已连接到现有的记忆集合: {collection.name}) except: # 如果集合不存在则创建它 collection client.create_collection(namememories) print(f 已创建新的记忆集合: {collection.name}) # 可以在这里添加一些初始记忆可选 # 例如给Agent一个初始身份设定 initial_memories [ 我是青柳姨姨一个乐于助人且记性很好的AI助手。, 我的目标是了解你记住关于你的重要事情并在长期的交流中为你提供帮助。, 我们的对话会形成记忆帮助我在未来更好地理解你的需求。 ] # 注意实际添加记忆需要先将文本转换为向量这通常由嵌入模型完成。 # 此处仅为演示流程真正的添加操作在主体运行时进行。 print( 记忆系统初始化完成。)运行这个脚本python init_memory.py如果成功你会在项目目录下看到一个chroma_db文件夹里面存储着向量数据库的文件。5. 完整示例与代码实现理解了基础流程后我们来看一个简化的、但功能完整的Agent主循环示例。这个例子涵盖了记忆的存储、检索和对话生成。我们将创建一个qingliu_agent.py文件# qingliu_agent.py import os from dotenv import load_dotenv from typing import List, Dict, Any import openai import chromadb from chromadb.config import Settings import hashlib # 加载环境变量 load_dotenv() class QingLiuAuntieAgent: def __init__(self): # 1. 初始化 OpenAI 客户端 self.openai_api_key os.getenv(OPENAI_API_KEY) self.llm_model os.getenv(LLM_MODEL_NAME, gpt-3.5-turbo) self.embedding_model os.getenv(EMBEDDING_MODEL_NAME, text-embedding-ada-002) self.client openai.OpenAI(api_keyself.openai_api_key) # 2. 初始化 ChromaDB 向量数据库客户端 self.persist_dir os.getenv(PERSIST_DIRECTORY, ./chroma_db) self.chroma_client chromadb.PersistentClient(pathself.persist_dir) self.collection self.chroma_client.get_or_create_collection(namememories) # 3. 配置参数 self.agent_name os.getenv(AGENT_NAME, 青柳姨姨) self.retrieval_count int(os.getenv(MEMORY_RETRIEVAL_COUNT, 5)) self.conversation_history: List[Dict[str, str]] [] # 短期对话历史 print(f{self.agent_name} 已初始化。记忆库位置: {self.persist_dir}) def _get_embedding(self, text: str) - List[float]: 调用 OpenAI 嵌入模型获取文本向量。 response self.client.embeddings.create( modelself.embedding_model, inputtext ) return response.data[0].embedding def _store_memory(self, text: str, metadata: Dict[str, Any] None): 将一段文本作为记忆存储到向量数据库。 if metadata is None: metadata {} # 为这段记忆生成一个唯一的ID这里用文本的MD5 memory_id hashlib.md5(text.encode()).hexdigest() embedding self._get_embedding(text) self.collection.add( embeddings[embedding], documents[text], metadatas[metadata], ids[memory_id] ) # print(f[记忆存储] {text[:50]}...) # 调试时可打开 def _retrieve_related_memories(self, query: str, k: int None) - List[str]: 根据查询文本检索最相关的k条记忆。 if k is None: k self.retrieval_count query_embedding self._get_embedding(query) results self.collection.query( query_embeddings[query_embedding], n_resultsk ) # results[documents] 是一个列表的列表我们取第一个元素 if results[documents]: return results[documents][0] return [] def _generate_response(self, user_input: str, related_memories: List[str]) - str: 结合用户输入和相关记忆调用LLM生成回复。 # 构建系统提示词定义Agent的角色和能力 system_prompt f你是{self.agent_name}一个拥有长期记忆的AI助手。 你的核心能力是记住与用户对话中的重要信息并在后续对话中自然地运用这些记忆。 以下是一些可能与当前对话相关的过往记忆 {chr(10).join([- memory for memory in related_memories]) if related_memories else 暂无相关记忆} 当前对话历史最近几轮 {chr(10).join([f{msg[role]}: {msg[content]} for msg in self.conversation_history[-4:]])} 请根据以上记忆和对话历史友好、自然地回应用户的最新输入。 如果记忆中有相关信息请巧妙地融入回答中不要生硬地复述。 你的回答应该简洁、贴心并有助于推进对话或解决问题。 # 构建消息列表 messages [ {role: system, content: system_prompt}, {role: user, content: user_input} ] try: response self.client.chat.completions.create( modelself.llm_model, messagesmessages, temperature0.7, # 控制创造性0.7比较平衡 max_tokens500 ) ai_response response.choices[0].message.content.strip() return ai_response except Exception as e: return f抱歉我在思考时遇到了点问题{e} def _should_store(self, user_input: str, ai_response: str) - bool: 一个简单的启发式规则判断本轮对话是否值得存入长期记忆。 在实际项目中这个函数可以非常复杂甚至用另一个LLM来判断。 # 示例规则如果用户输入包含关于个人偏好、事实陈述或未来计划的关键词则存储。 store_keywords [喜欢, 讨厌, 习惯, 记得, 下次, 计划, 我的猫, 我的狗, 我叫] input_lower user_input.lower() if any(keyword in input_lower for keyword in store_keywords): return True # 或者如果AI的回应确认或总结了一个重要信息也存储。 if 我会记住 in ai_response or 你提到过 in ai_response: return True return False def chat_loop(self): 启动与Agent的交互循环。 print(f\n{*50}) print(f欢迎与 {self.agent_name} 聊天输入 退出 或 quit 结束对话。) print(f{*50}\n) while True: try: user_input input(\n你: ).strip() if user_input.lower() in [退出, quit, exit]: print(f{self.agent_name}: 再见啦我会记得我们的谈话的) break if not user_input: continue # 1. 检索相关记忆 related_mems self._retrieve_related_memories(user_input) # print(f[调试] 检索到记忆: {related_mems}) # 调试用 # 2. 生成回复 ai_response self._generate_response(user_input, related_mems) # 3. 输出回复 print(f\n{self.agent_name}: {ai_response}) # 4. 更新短期对话历史 self.conversation_history.append({role: user, content: user_input}) self.conversation_history.append({role: assistant, content: ai_response}) # 保持历史长度防止无限增长可选 if len(self.conversation_history) 10: self.conversation_history self.conversation_history[-10:] # 5. 判断并存储重要信息到长期记忆 if self._should_store(user_input, ai_response): # 这里我们存储用户的原始输入。更复杂的实现可以存储提炼后的信息。 self._store_memory( textuser_input, metadata{type: user_preference, turn: len(self.conversation_history)//2} ) # print(f[调试] 已将用户输入存入长期记忆。) # 调试用 except KeyboardInterrupt: print(f\n\n{self.agent_name}: 对话被中断。期待下次再见) break except Exception as e: print(f\n系统错误: {e}) # 可以选择是否继续 continue if __name__ __main__: agent QingLiuAuntieAgent() agent.chat_loop()这个代码示例是一个高度简化的实现但它清晰地展示了核心逻辑流初始化 - 接收输入 - 检索记忆 - 生成回复 - 判断存储。在实际项目中记忆的存储策略、提示词工程和判断逻辑会复杂得多。6. 运行结果与效果验证让我们来实际运行这个Agent并验证其记忆功能。6.1 启动Agent在终端中确保你在项目目录且虚拟环境已激活然后运行python qingliu_agent.py如果一切配置正确你会看到类似以下的输出青柳姨姨 已初始化。记忆库位置: ./chroma_db 欢迎与 青柳姨姨 聊天输入 退出 或 quit 结束对话。 你:6.2 测试对话与记忆现在进行一场多轮对话观察记忆如何起作用。第一轮对话建立记忆你: 我叫小明我最喜欢的水果是芒果。 青柳姨姨: 你好小明很高兴认识你。芒果确实是一种美味又营养的水果我会记住你最喜欢它。后台动作_should_store函数检测到“我叫”和“喜欢”等关键词判定为重要信息。于是将“我叫小明我最喜欢的水果是芒果。”这句话向量化后存入ChromaDB。第二轮对话间隔其他话题你: 今天天气真不错。 青柳姨姨: 是呀阳光好的日子让人心情愉悦。适合出去走走。 你: 你觉得我该吃点什么呢 青柳姨姨: 既然你最喜欢芒果来一份新鲜的芒果沙拉或者芒果奶昔怎么样既应季又合你口味。后台动作当你问“该吃点什么呢”时_retrieve_related_memories函数会将此问句转换为向量并在数据库中搜索。由于“芒果”在语义上与“水果”“喜欢”相关之前存储的记忆被检索出来并放入生成回复的上下文中。因此AI的回复中自然融入了“你最喜欢芒果”这个信息。验证记忆检索你可以在代码中临时取消print(f[调试] 检索到记忆: {related_mems})这行的注释重新运行。在第二轮询问时你会在后台看到类似输出[调试] 检索到记忆: [我叫小明我最喜欢的水果是芒果。]这直观地证明了记忆系统在正常工作。6.3 检查持久化存储退出对话后查看./chroma_db目录。你会看到一些chroma.sqlite3等文件。这证明记忆已经被持久化保存。即使你明天重启程序只要指向同一个PERSIST_DIRECTORYAgent 依然会记得“小明喜欢芒果”。7. 常见问题与排查思路在部署和运行过程中你可能会遇到以下问题。这里提供快速的排查指南。问题现象可能原因排查方式解决方案导入错误No module named openai依赖未正确安装。在虚拟环境中运行pip list | grep openai。确保在虚拟环境中运行pip install -r requirements.txt或手动安装pip install openai。运行时错误AuthenticationError(OpenAI)API Key 错误或未设置。检查.env文件中的OPENAI_API_KEY。1. 确认Key正确且未过期。2. 确认.env文件在项目根目录且已加载 (load_dotenv())。3. 对于某些地区可能需要设置OPENAI_API_BASE。错误chromadb.db.base.UniqueConstraintError尝试插入ID重复的记忆。检查_store_memory函数中ID生成逻辑。确保为每条记忆生成唯一ID。示例中使用MD5哈希基本够用。对于生产环境考虑使用UUID或更复杂的组合键。Agent回复速度很慢1. 网络延迟调用API。2. 本地嵌入模型计算慢。3. 记忆检索数量(k)设置过大。1. 检查网络。2. 如果是本地模型检查CPU/GPU负载。3. 打印每步耗时。1. 使用更快的网络或API节点。2. 考虑使用更小的嵌入模型或启用GPU。3. 将MEMORY_RETRIEVAL_COUNT调小如3。记忆似乎没有起作用1. 记忆未成功存储。2. 检索相关性低。3. 提示词未正确使用记忆。1. 打开调试打印看_store_memory和_retrieve_related_memories是否被调用及返回值。2. 检查向量数据库路径是否正确。1. 确认.env中的PERSIST_DIRECTORY一致。2. 简化_should_store规则确保有记忆被存入。3. 在系统提示词中明确要求AI使用提供的记忆。错误RateLimitErrorOpenAI API 调用频率超限。查看错误信息中的等待时间。1. 增加请求间隔。2. 检查账户用量和限额。3. 对于免费额度用户需严格控制调用频率。本地模型加载失败模型文件损坏、路径错误或内存不足。查看模型加载的具体错误日志。1. 确认模型文件已下载完整。2. 使用transformers或ollama官方示例代码测试模型是否能独立加载。3. 确保有足够的RAM或VRAM。8. 最佳实践与工程建议如果你希望将此类项目用于更严肃的场景或进行二次开发以下建议能帮助你走得更远。8.1 记忆系统的优化记忆的提炼与压缩不要直接存储原始对话文本。可以使用LLM对一段对话进行总结提取核心事实谁、做了什么、偏好什么只存储提炼后的摘要。这能大幅提升存储效率和检索质量。记忆的元数据丰富化为每条记忆添加丰富的元数据如时间戳、记忆类型“用户偏好”、“事实陈述”、“待办任务”、“情感表达”、重要性分数等。检索时不仅可以基于语义还可以基于元数据过滤。分层记忆结构借鉴人类记忆设计短期、中期、长期记忆。高频访问的记忆放在快速存储中低频记忆可归档或总结。8.2 提示词工程系统提示词是灵魂示例中的系统提示词比较简单。一个强大的Agent提示词需要明确定义其人格、职责、能力边界以及如何使用提供的记忆。可以加入示例对话Few-shot Learning来引导其行为。动态上下文管理不要无脑地将所有检索到的记忆和对话历史都塞进上下文。需要设计策略根据当前对话的焦点选择最相关、最精简的信息组合以节省Token并提升模型表现。8.3 工程化与部署配置化管理将所有参数模型名称、温度、检索数量、存储阈值等放入配置文件如config.yaml便于不同环境开发、测试、生产的切换。日志与监控为记忆的存储、检索以及LLM的调用添加详细的日志。这有助于调试和优化Agent的行为。监控API调用成本和延迟。异步处理记忆的存储和检索尤其是调用嵌入模型API可以是异步操作避免阻塞主对话线程提升用户体验。安全与隐私这是重中之重。长期记忆可能包含大量用户隐私。务必告知用户数据如何被存储和使用。提供记忆查看和删除的接口。考虑对存储的记忆进行加密。遵守相关数据保护法规如GDPR。8.4 扩展方向工具调用Tool Use让Agent不仅能说还能做。集成日历、邮件、数据库查询等工具API使其能真正执行“提醒我”、“查询数据”等任务。多模态记忆除了文本是否可以存储和检索图像、音频的描述向量这能构建更丰富的记忆图谱。主动记忆触发不止在用户提问时检索记忆还可以设计定时任务主动扫描记忆库在特定时间或条件下触发提醒例如“你三天前说今天要提交报告”。通过“青柳姨姨何时跟我回家”这个项目我们实践了一个具备长期记忆的AI Agent从概念到跑通的核心流程。它不再是一个科幻概念而是由LLM、向量数据库和精巧的提示词工程组合而成的、可构建的技术方案。这项技术的意义在于它为AI应用开辟了一条通向“个性化”和“连续性”的道路。无论是未来的个人数字助理、沉浸式游戏NPC还是拥有“公司记忆”的智能客服其底层都需要这样的记忆系统作为支撑。当然目前的示例只是一个起点。真实世界的挑战——如记忆的准确性、隐私安全、系统的可扩展性以及如何让AI“遗忘”不重要信息——都等待着更优的解决方案。但理解并亲手实现这个基础框架无疑是迈向未来人机交互新范式的重要一步。建议你将本文的代码作为实验的起点尝试修改记忆策略、集成不同的模型、或者为你的Agent赋予特定的工具能力。真正的“青柳姨姨”或许就在你下一步的代码迭代中诞生。
返回列表