ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

AI智能体记忆系统实战:从零构建Harness Loop工程化方案

2026/8/14 5:13:34 拓冰建站 浏览量
AI智能体记忆系统实战:从零构建Harness Loop工程化方案 在实际 AI 应用开发中让智能体Agent具备稳定、可靠的记忆能力是迈向实用化的关键一步。很多开发者尝试过简单的上下文拼接但很快就会遇到上下文长度限制、关键信息遗忘、历史对话混乱等问题。Hermes AI 智能体框架提出的 Harness Loop 记忆系统正是为了解决这些痛点而设计的一套工程化方案。它并非简单的聊天记录堆叠而是一个包含记忆提取、存储、检索和刷新的完整闭环。本文将带你深入理解 Harness Loop 记忆系统的核心机制并通过一个从零开始的实测项目展示如何将其集成到你的智能体应用中。无论你是正在评估不同智能体框架的架构师还是希望为现有 AI 应用添加长期记忆功能的开发者这篇文章都将提供一条清晰的实践路径。我们将从概念解析开始逐步完成环境搭建、核心代码编写、系统运行验证并最终梳理出在生产环境中部署时需要注意的常见问题和优化策略。1. 理解 Harness Loop从记忆碎片到系统化工程在讨论具体实现之前我们必须先厘清几个核心概念什么是智能体的“记忆”为什么需要“Loop”“Harness”在这里又扮演什么角色1.1 智能体记忆的本质与挑战智能体的记忆本质上是对历史交互信息用户输入、自身输出、工具调用结果、环境状态等进行结构化存储和高效利用的能力。它与简单的聊天历史记录有本质区别聊天记录是线性的、未经处理的原始信息流包含大量冗余和噪声。智能体记忆是经过提炼、组织、并可与当前任务关联的知识单元。直接使用原始聊天记录作为记忆会面临三大挑战上下文长度限制主流大模型有固定的 Token 窗口无法容纳无限长的历史。信息检索效率低从冗长的历史中快速找到相关片段计算成本高且精度难以保证。记忆干扰与遗忘新旧信息混杂重要信息可能被淹没智能体表现出“健忘”。因此一个工程化的记忆系统需要解决存什么、怎么存、何时存、怎么取这四个核心问题。1.2 Harness Loop 的组成与工作流程Harness Loop 记忆系统为上述问题提供了一套框架级的解决方案。我们可以将其拆解为三个核心部分来理解Harness驾驭/管理这不是一个单独的工具而是一种设计理念。在 Hermes AI 的语境中“Harness”指的是对智能体工作流中各种组件如记忆模块、工具模块、推理模块进行协调、管理和状态维护的机制。它确保记忆的读写操作能够无缝嵌入到智能体的决策循环中。Loop循环这揭示了记忆系统的动态特性。记忆不是一次性的写入而是一个持续的“观察-提取-存储-检索-应用-刷新”的循环过程。智能体在每次与用户或环境交互后都可能更新其记忆在每次需要决策时又会从记忆中检索相关信息。这个闭环保证了记忆的时效性和相关性。记忆系统这是具体的功能模块集合通常包括记忆提取器Memory Extractor从原始对话或事件中识别和抽取出值得记忆的实体、事实、用户偏好或任务状态。记忆向量化存储Vector Store将提取出的记忆文本转换为向量Embedding并存入向量数据库如 Chroma, Pinecone, Weaviate以便后续进行语义相似度检索。记忆检索器Memory Retriever根据当前查询或对话上下文从向量存储中召回最相关的若干条记忆。记忆刷新与衰减机制对记忆设置优先级、有效期或使用频率统计过时或低价值的记忆可以被降权或归档。工作流程简述交互发生用户与智能体进行一轮对话或完成一个任务步骤。记忆提取Harness 模块触发记忆提取器分析本轮交互生成结构化的记忆片段例如“用户偏好喝黑咖啡”、“项目截止日期是2024-10-30”。记忆存储新记忆被向量化后存入向量数据库。同时系统可能根据规则如时间衰减、重要性评分对旧记忆进行整理。新一轮交互用户提出新问题或指令。记忆检索Harness 模块根据当前问题调用检索器从向量库中查找相关记忆。记忆应用检索到的记忆被格式化后作为上下文的一部分送入大模型辅助智能体做出更精准的回应。循环继续智能体产生回应该过程本身又可能生成新的记忆进入下一个循环。理解了这套机制我们就能明白搭建 Harness Loop 记忆系统不仅仅是调用一个 API而是需要配置多个组件并定义它们之间的协作关系。2. 环境准备与项目初始化接下来我们将通过一个具体的“个人助理”智能体项目来实测 Harness Loop。这个智能体将帮助我们管理简单的待办事项并记住我们的个人习惯。2.1 技术栈与工具选择为了完整实现 Harness Loop我们需要以下组件智能体框架Hermes AI。我们将使用其 Python SDK。大语言模型LLMOpenAI GPT-4 或 GPT-3.5-Turbo用于智能体核心推理。也可用其他兼容 OpenAI API 的模型。文本向量化模型OpenAI 的text-embedding-3-small或开源的BAAI/bge-small-en。用于将记忆文本转换为向量。向量数据库ChromaDB。轻量级、易集成适合本地开发和测试。开发语言Python 3.9。2.2 本地开发环境搭建首先创建一个干净的 Python 虚拟环境并安装核心依赖。# 创建项目目录并进入 mkdir hermes-harness-loop-demo cd hermes-harness-loop-demo # 创建虚拟环境以 conda 为例也可用 venv conda create -n hermes-demo python3.10 conda activate hermes-demo # 安装核心依赖 pip install hermes-ai-sdk openai chromadb依赖版本说明hermes-ai-sdk: 这是与 Hermes AI 服务交互的客户端库。请查阅其官方文档获取最新稳定版。openai: 用于调用 OpenAI 的聊天和嵌入模型。chromadb: 用于本地运行向量数据库。注意如果你无法直接访问 OpenAI需要配置相应的 API 代理或使用其他支持的模型端点。本文仅以 OpenAI 为例Hermes AI 框架通常支持多种模型后端。2.3 项目结构设计一个清晰的项目结构有助于管理复杂的配置和模块。我们创建如下目录和文件hermes-harness-loop-demo/ ├── config/ │ └── settings.yaml # 配置文件存放API密钥、模型参数等 ├── memory/ │ ├── __init__.py │ ├── extractor.py # 自定义记忆提取器 │ ├── retriever.py # 自定义记忆检索器 │ └── vector_store.py # 向量数据库封装 ├── agents/ │ └── personal_assistant.py # 个人助理智能体定义 ├── tools/ │ └── todo_tools.py # 自定义工具如添加待办 ├── main.py # 应用主入口 ├── requirements.txt # 依赖列表 └── .env # 环境变量敏感信息现在我们来填充最关键的部分配置和记忆系统实现。3. 实现 Harness Loop 记忆系统记忆系统是 Harness Loop 的核心。我们将从配置开始逐步实现记忆的存储、提取和检索。3.1 基础配置与连接设置首先在.env文件中设置你的 OpenAI API 密钥或其他模型密钥# .env OPENAI_API_KEYsk-your-openai-api-key-here然后创建config/settings.yaml来集中管理配置# config/settings.yaml llm: provider: openai model: gpt-3.5-turbo # 或 gpt-4 api_base: https://api.openai.com/v1 # 根据实际情况调整 temperature: 0.1 embedding: provider: openai model: text-embedding-3-small api_base: https://api.openai.com/v1 vector_store: type: chroma persist_directory: ./data/chroma_db # 向量数据持久化路径 collection_name: agent_memories memory: extraction_categories: [user_preference, fact, task, personal_detail] retrieval_top_k: 5 # 每次检索返回的最相关记忆条数在main.py中我们初始化配置和基础客户端# main.py import os from dotenv import load_dotenv import yaml from openai import OpenAI import chromadb from hermes_ai import Hermes # 加载环境变量 load_dotenv() # 加载配置文件 with open(config/settings.yaml, r) as f: config yaml.safe_load(f) # 初始化 OpenAI 客户端用于LLM和Embedding openai_client OpenAI( api_keyos.getenv(OPENAI_API_KEY), base_urlconfig[llm].get(api_base) ) # 初始化 Chroma 向量数据库客户端 chroma_client chromadb.PersistentClient(pathconfig[vector_store][persist_directory]) collection chroma_client.get_or_create_collection(nameconfig[vector_store][collection_name]) # 初始化 Hermes 客户端假设 Hermes SDK 需要 OpenAI 客户端 # 注意Hermes SDK 的实际初始化方式请参考其官方文档此处为示例。 hermes_client Hermes(llm_clientopenai_client, llm_modelconfig[llm][model]) print(基础客户端初始化完成。)3.2 构建向量化记忆存储记忆需要被持久化并支持语义搜索。我们实现一个简单的向量存储封装类。# memory/vector_store.py from typing import List, Dict, Any import uuid from openai import OpenAI import chromadb from chromadb.api.types import EmbeddingFunction class OpenAIEmbeddingFunction(EmbeddingFunction): 自定义 Embedding 函数适配 OpenAI API def __init__(self, openai_client: OpenAI, model: str): self.client openai_client self.model model def __call__(self, input: List[str]) - List[List[float]]: response self.client.embeddings.create(modelself.model, inputinput) return [data.embedding for data in response.data] class MemoryVectorStore: 记忆向量存储管理类 def __init__(self, chroma_client, collection_name, embedding_function): self.collection chroma_client.get_or_create_collection( namecollection_name, embedding_functionembedding_function ) def add_memory(self, memory_text: str, metadata: Dict[str, Any]): 添加一条记忆到向量库 memory_id str(uuid.uuid4()) self.collection.add( documents[memory_text], metadatas[metadata], ids[memory_id] ) print(f记忆已存储: {memory_text[:50]}...) return memory_id def search_memories(self, query: str, top_k: int 5) - List[Dict]: 根据查询文本搜索相关记忆 results self.collection.query( query_texts[query], n_resultstop_k ) memories [] if results[documents]: for doc, meta in zip(results[documents][0], results[metadatas][0]): memories.append({ text: doc, metadata: meta, # distance: dist # 如果需要可以返回相似度距离 }) return memories def list_all_memories(self) - List[Dict]: 列出所有记忆仅用于调试 results self.collection.get() return [ {id: _id, text: doc, metadata: meta} for _id, doc, meta in zip(results[ids], results[documents], results[metadatas]) ]这个类封装了向 Chroma 添加和查询记忆的基本操作。metadata字段非常重要我们可以用来存储记忆的类型、创建时间、关联实体等信息便于后期过滤和管理。3.3 实现记忆提取器记忆提取器负责从原始对话中提炼出结构化的记忆点。这里我们实现一个基于规则和简单 LLM 调用的混合提取器。# memory/extractor.py from typing import List, Dict, Any import re from datetime import datetime class MemoryExtractor: 记忆提取器 def __init__(self, llm_client, categories: List[str]): self.llm_client llm_client self.categories categories def extract_from_conversation(self, user_input: str, agent_response: str) - List[Dict[str, Any]]: 从一轮对话中提取记忆。 返回格式: [{text: 记忆文本, category: 类别, entities: [实体1, ...]}, ...] memories [] # 1. 基于简单规则的提取示例提取时间、日期等 rule_based_memories self._extract_by_rules(user_input, agent_response) memories.extend(rule_based_memories) # 2. 基于 LLM 的深层意图和事实提取用于更复杂的场景 llm_based_memories self._extract_by_llm(user_input, agent_response) memories.extend(llm_based_memories) return memories def _extract_by_rules(self, user_input: str, agent_response: str) - List[Dict]: 规则提取示例提取明显的偏好和事实 memories [] # 示例规则如果用户提到“喜欢”或“不喜欢” like_pattern r(喜欢|爱|偏好)\s*(.?)(?|。|||$) dislike_pattern r(不喜欢|讨厌|不喝)\s*(.?)(?|。|||$) for match in re.finditer(like_pattern, user_input): item match.group(2).strip() memories.append({ text: f用户偏好: {item}, category: user_preference, entities: [item] }) for match in re.finditer(dislike_pattern, user_input): item match.group(2).strip() memories.append({ text: f用户不喜欢: {item}, category: user_preference, entities: [item] }) # 可以添加更多规则如提取日期、任务名等 return memories def _extract_by_llm(self, user_input: str, agent_response: str) - List[Dict]: 使用 LLM 进行更智能的记忆提取示例 # 注意在实际生产中需要设计更严谨的 Prompt 和解析逻辑 prompt f 请从以下对话中提取出值得长期记忆的关键信息。 用户说: “{user_input}” 助手回复: “{agent_response}” 请以 JSON 列表格式输出每个记忆包含字段text记忆文本、category类别可选{self.categories}、entities相关实体列表。 如果没有任何值得记忆的信息输出空列表 []。 try: # 这里简化了 LLM 调用和 JSON 解析过程 # 实际应调用 LLM 并安全解析返回的 JSON response self.llm_client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: prompt}], temperature0 ) # 假设 LLM 返回了格式正确的 JSON 字符串 import json extracted json.loads(response.choices[0].message.content) return extracted if isinstance(extracted, list) else [] except Exception as e: print(fLLM记忆提取失败: {e}) return []这个提取器结合了规则和 LLM。规则方法快速、准确适合提取明确模式的信息如“我喜欢X”。LLM 方法更灵活能理解复杂语境但成本更高、速度慢。在实际项目中可以根据需求权衡使用。3.4 实现记忆检索器与 Harness 集成检索器负责在需要时找到相关记忆。我们将检索功能集成到一个模拟的Harness管理类中这个类协调智能体的记忆循环。# memory/retriever.py from typing import List, Dict, Any from .vector_store import MemoryVectorStore class MemoryRetriever: 记忆检索器 def __init__(self, vector_store: MemoryVectorStore, top_k: int 5): self.vector_store vector_store self.top_k top_k def retrieve(self, query: str, filter_category: str None) - List[str]: 检索与查询相关的记忆可过滤类别 memories self.vector_store.search_memories(query, top_kself.top_k) if filter_category: memories [m for m in memories if m[metadata].get(category) filter_category] # 只返回记忆文本用于构建提示词 return [m[text] for m in memories] class Harness: 模拟 Harness 模块协调记忆循环 def __init__(self, llm_client, vector_store: MemoryVectorStore, extractor, retriever): self.llm_client llm_client self.vector_store vector_store self.extractor extractor self.retriever retriever self.conversation_history [] # 简单的对话历史缓存 def process_user_input(self, user_input: str) - str: 处理用户输入的核心循环 # 1. 检索相关记忆 relevant_memories self.retriever.retrieve(user_input) memory_context \n.join(relevant_memories) if relevant_memories else 无相关记忆。 # 2. 构建包含记忆的提示词 system_prompt f你是一个有帮助的个人助理。以下是你之前了解到的关于用户的信息记忆 {memory_context} 请基于以上记忆和当前对话友好、准确地回应用户。 # 将当前用户输入和历史记录添加到消息列表 self.conversation_history.append({role: user, content: user_input}) messages [{role: system, content: system_prompt}] self.conversation_history[-6:] # 保留最近几轮 # 3. 调用 LLM 生成回复 response self.llm_client.chat.completions.create( modelgpt-3.5-turbo, messagesmessages, temperature0.7 ) agent_response response.choices[0].message.content # 4. 存储本轮对话到历史 self.conversation_history.append({role: assistant, content: agent_response}) # 5. 从本轮对话中提取新记忆 new_memories self.extractor.extract_from_conversation(user_input, agent_response) for mem in new_memories: # 为记忆添加时间戳等元数据 mem[metadata][timestamp] datetime.now().isoformat() self.vector_store.add_memory(mem[text], mem[metadata]) return agent_response这个Harness类模拟了核心的 Loop检索 - 推理 - 回应 - 提取存储。它维护了对话历史并在每一轮交互后尝试提取新的记忆点存入向量库。4. 组装智能体并运行验证现在我们将上述组件组装起来创建一个具备记忆功能的个人助理智能体并模拟一个多轮对话场景进行测试。4.1 创建智能体与工具首先我们定义一个简单的待办事项管理工具让智能体能够执行具体操作。# tools/todo_tools.py from typing import List class TodoManager: 一个简单的内存中的待办事项管理器 def __init__(self): self.todos [] def add_todo(self, task: str, priority: str medium) - str: 添加待办事项 self.todos.append({task: task, priority: priority, done: False}) return f已添加待办: {task} (优先级: {priority}) def list_todos(self) - List[dict]: 列出所有待办事项 return self.todos def complete_todo(self, task_index: int) - str: 标记待办为完成 if 0 task_index len(self.todos): self.todos[task_index][done] True return f已完成待办: {self.todos[task_index][task]} else: return f错误索引 {task_index} 无效。 # 在 agents/personal_assistant.py 中集成工具和 Harness # agents/personal_assistant.py from tools.todo_tools import TodoManager from memory.retriever import Harness, MemoryRetriever from memory.extractor import MemoryExtractor from memory.vector_store import MemoryVectorStore, OpenAIEmbeddingFunction class PersonalAssistant: def __init__(self, llm_client, chroma_client, config): self.llm_client llm_client self.config config self.todo_manager TodoManager() # 初始化记忆系统各组件 embedding_func OpenAIEmbeddingFunction(llm_client, config[embedding][model]) self.vector_store MemoryVectorStore( chroma_client, config[vector_store][collection_name], embedding_func ) self.extractor MemoryExtractor(llm_client, config[memory][extraction_categories]) self.retriever MemoryRetriever(self.vector_store, config[memory][retrieval_top_k]) self.harness Harness(llm_client, self.vector_store, self.extractor, self.retriever) def chat(self, user_input: str) - str: 主聊天接口 # 这里可以加入工具调用的判断逻辑简化示例直接交给 Harness # 例如如果用户输入包含“添加待办”则先调用工具再将结果和原始输入一起处理。 if 添加待办 in user_input or add todo in user_input.lower(): # 简单解析任务实际应用应用更复杂的解析或让LLM解析 task user_input.replace(添加待办, ).strip() if task: tool_result self.todo_manager.add_todo(task) # 将工具执行结果也作为对话的一部分以便提取记忆 combined_input f{user_input} (系统执行结果: {tool_result}) return self.harness.process_user_input(combined_input) # 普通对话直接由 Harness 处理 return self.harness.process_user_input(user_input) def get_memory_stats(self): 获取记忆统计用于调试 all_mem self.vector_store.list_all_memories() return { total_memories: len(all_mem), sample_memories: all_mem[:3] # 返回前三条作为样本 }4.2 编写主程序并运行测试最后在main.py中完成组装并启动一个交互式对话循环。# main.py (续) # ... 之前的初始化代码 ... from agents.personal_assistant import PersonalAssistant def main(): # 初始化个人助理 assistant PersonalAssistant(openai_client, chroma_client, config) print(*50) print(个人助理智能体已启动具备 Harness Loop 记忆系统。) print(输入 exit 退出输入 stats 查看记忆状态。) print(*50) while True: try: user_input input(\n你: ) if user_input.lower() exit: print(再见) break if user_input.lower() stats: stats assistant.get_memory_stats() print(f记忆库统计: 共 {stats[total_memories]} 条记忆。) for mem in stats[sample_memories]: print(f - {mem[text][:60]}... (类别: {mem[metadata].get(category, N/A)})) continue # 调用智能体 response assistant.chat(user_input) print(f助理: {response}) except KeyboardInterrupt: print(\n程序被中断。) break except Exception as e: print(f处理出错: {e}) if __name__ __main__: main()4.3 运行与验证现在运行程序并进行多轮对话测试观察记忆系统的效果。python main.py测试对话示例你: 我喜欢喝黑咖啡。 助理: 好的我记住了你喜欢黑咖啡。今天想来一杯吗 你: 帮我添加待办下午三点写周报。 助理: 已添加待办: 下午三点写周报 (优先级: medium)。别忘了哦下午三点。 你: 我讨厌下雨天。 助理: 明白你不喜欢下雨天。希望今天是个晴天。 你: 我之前说过我喜欢什么饮料 助理: 根据我的记忆你之前提到过你喜欢喝黑咖啡。 你: stats 记忆库统计: 共 3 条记忆。 - 用户偏好: 黑咖啡... (类别: user_preference) - 已添加待办: 下午三点写周报... (类别: task) - 用户不喜欢: 下雨天... (类别: user_preference)验证要点记忆提取智能体成功从对话中提取了“喜欢黑咖啡”、“讨厌下雨天”和“添加待办”这三个关键点并赋予了正确的类别。记忆存储stats命令显示记忆已被存入向量数据库。记忆检索与应用当被问及“喜欢什么饮料”时智能体准确检索并引用了“黑咖啡”这条记忆而不是复述整个对话历史。循环运作每一轮对话后系统都在后台执行了提取和存储操作实现了“Loop”。5. 常见问题排查与优化策略将 Harness Loop 记忆系统投入实际开发或生产环境时你会遇到一些典型问题。下面列出常见故障现象、原因及解决方案。5.1 记忆提取不准确或遗漏问题现象可能原因检查与解决方案明显的用户偏好或事实没有被记住。1. 规则提取器_extract_by_rules规则覆盖不全。2. LLM 提取器_extract_by_llm的 Prompt 设计不佳或解析失败。3. 提取的置信度阈值设置过高过滤掉了有效记忆。1.增强规则分析遗漏案例补充正则表达式或关键词列表。2.优化 Prompt为 LLM 提供更清晰的指令和输出格式示例Few-shot。3.添加日志在提取阶段打印原始对话和提取结果进行调试。4.分级提取先尝试规则规则不命中再调用 LLM平衡成本与效果。提取了过多无关或琐碎的信息。1. 规则过于宽泛。2. LLM 被过度引导去“寻找任何可能的信息”。1.收紧规则让规则更精确。2.改进 Prompt明确告诉 LLM 什么是“值得长期记忆”的信息如用户明确陈述的偏好、重要承诺、关键事实。3.后过滤对提取出的记忆进行重要性评分过滤。5.2 记忆检索效果差问题现象可能原因检查与解决方案提问时相关的记忆没有被召回。1. 向量化模型Embedding Model不适合当前语料如用英文模型处理中文。2. 查询文本与记忆文本的表述差异太大。3. 向量数据库的检索参数如top_k设置太小。4. 记忆文本本身质量差、过于简短或模糊。1.更换 Embedding 模型针对中文可选BAAI/bge-small-zh等开源模型。2.查询重写在检索前用 LLM 将用户问题重写为更接近记忆存储形式的陈述句。3.调整检索参数适当增大top_k或使用元数据过滤进行粗筛。4.优化记忆文本在存储前用 LLM 对提取的记忆进行润色或总结使其更通用。召回了大量不相关的记忆。1.top_k设置过大。2. 记忆库中积累了太多低质量或过时的记忆。3. Embedding 模型无法区分细微差异。1.调整top_k根据场景找到一个平衡点。2.实施记忆管理引入记忆衰减、重要性评分或定期清理机制。3.使用混合检索结合基于关键词的稀疏检索如 BM25和向量检索提高精度。5.3 系统性能与资源问题问题现象可能原因检查与解决方案对话响应速度明显变慢。1. 记忆检索尤其是向量检索耗时增加。2. 每轮都调用 LLM 进行记忆提取延迟高。3. 对话历史过长导致提示词 Token 数暴涨。1.缓存检索结果对常见或相似查询的结果进行短期缓存。2.异步提取将记忆提取操作放到后台线程执行不阻塞主响应。3.历史摘要定期将长对话历史总结成一段摘要作为一条新的记忆存入然后清空或截断原始历史。向量数据库磁盘占用增长过快。1. 存储了过多记忆包括大量低价值信息。2. 没有清理过期的测试数据。1.设置记忆上限为每个用户或每个会话设置最大记忆条数采用 LRU最近最少使用等策略淘汰旧记忆。2.定期归档将长期未使用的记忆转移到冷存储如对象存储并从向量库中删除。5.4 生产环境部署建议向量数据库选型ChromaDB 适合原型和中小项目。生产环境应考虑更成熟的方案如Pinecone全托管、Weaviate开源可自托管、Qdrant或Milvus它们提供了更好的性能、可扩展性和运维工具。记忆提取策略不要完全依赖 LLM。建立多级提取管道正则/关键词 - 小型分类模型 - 大模型。这能极大降低成本并提高响应速度。记忆的元数据管理为每条记忆丰富元数据如source来源、confidence置信度、access_count访问次数、last_accessed最后访问时间、expires_at过期时间。这些是后续实现高级记忆管理如衰减、优先级的基础。测试与评估建立记忆系统的评估集。定期测试A) 记忆提取的召回率和准确率B) 记忆检索的相关性C) 记忆对最终任务完成度的提升。没有度量就无法优化。安全性记忆可能包含敏感信息。确保向量数据库访问安全对存储的记忆文本进行脱敏处理并遵守相关的数据隐私法规。6. 总结与扩展方向通过本次实测我们实现了一个简化但功能完整的 Harness Loop 记忆系统。它展示了智能体如何超越“无状态对话”通过持续的记忆循环变得更个性化、更连贯。核心收获记忆是一个闭环工程不仅仅是存储还包括提取、检索、应用和刷新。Harness 是协调者它确保记忆操作在智能体的工作流中适时发生。向量数据库是关键基础设施它使基于语义的快速记忆检索成为可能。规则与 LLM 结合在记忆提取等环节混合策略往往比单一方法更有效、更经济。可以继续深入的方向记忆关联与推理让智能体不仅能回忆单条事实还能将多条相关记忆关联起来进行简单推理例如“用户喜欢黑咖啡且通常在上午喝那么下午三点推荐咖啡可能不合适”。记忆分层与摘要实现短期记忆对话缓存、中期记忆向量库和长期记忆归档摘要的多层结构。主动记忆管理智能体主动询问以澄清或确认模糊的记忆“你刚才说的截止日期是本周五吗”或主动提醒用户基于记忆“根据记录你每周五要写周报需要我现在创建待办吗”。与外部知识库集成将记忆系统与公司的文档、知识库连接使智能体既能记住个性化信息也能查询公共知识。记忆是智能体迈向“个性化”和“持续性”的基石。从本次搭建的 Harness Loop 系统出发你可以根据实际业务需求不断迭代和强化其中的每一个模块最终构建出真正理解用户、拥有长期陪伴感的智能体应用。