AI智能体长期记忆系统:基于Scope Recall Hermes的SQLite+LanceDB架构实践
2026/8/22 6:27:32 网站建设 项目流程

1. 项目概述:Scope Recall Hermes 是什么?

最近在折腾AI智能体(Agent)的时候,发现一个挺普遍的问题:对话一长,智能体就容易“失忆”。你明明在五分钟前告诉它你的项目是用Python写的,十分钟后它可能又会问你“您用的是什么编程语言?”。这种上下文丢失的体验,对于构建一个真正有用的、能处理复杂任务的智能体来说,是致命的。为了解决这个问题,我深入研究了几个主流的记忆存储方案,并最终基于一个名为“Scope Recall Hermes”的开源项目,搭建了一套稳定、高效且易于扩展的记忆系统。

简单来说,Scope Recall Hermes是一个专为AI智能体设计的记忆管理框架。它的核心目标,就是让智能体能够像人一样,记住过去对话中的关键信息,并在需要的时候精准地“回忆”起来。这个项目名字很有意思,“Scope”可以理解为记忆的作用域或上下文范围,“Recall”是回忆,而“Hermes”则是信使之神,寓意着高效的信息传递与存储。它不是一个独立的智能体,而是一个可以被集成到各种AI应用中的“记忆增强模块”。

它主要解决了几个痛点:一是上下文长度限制,大模型本身的Token窗口有限,无法记住超长对话;二是记忆的持久化与检索,如何把重要的对话片段结构化地存下来,并能快速、准确地找到;三是记忆的关联与组织,不同主题、不同会话的记忆如何区分和关联。这个项目通过结合SQLite、LanceDB等轻量级数据库,以及灵活的Python架构,提供了一个开箱即用的解决方案。无论你是想给自己的聊天机器人增加长期记忆,还是构建一个需要复杂知识管理的智能工作流,这个项目都值得你花时间研究一下。

2. 核心架构与设计思路拆解

2.1 为什么选择 SQLite + LanceDB 的双引擎模式?

初次看到这个项目的依赖时,你可能会疑惑:为什么同时用了SQLite和LanceDB两种数据库?这不是增加复杂度吗?在实际深入代码和使用后,我发现这是一种非常务实且巧妙的设计。

SQLite在这里扮演的是“元数据管家”和“快速索引”的角色。它的优势是轻量、无需独立服务、ACID事务支持完善,并且几乎无处不在。在记忆系统中,我们需要记录一些结构化的、需要频繁查询和关联的信息,例如:

  • 记忆片段(Memory Chunk)的基本信息:唯一ID、创建时间、所属会话(Session)、关联的用户或智能体ID。
  • 记忆的类型与标签:这是一段关于“用户偏好”的记忆,还是关于“项目需求”的记忆?打上标签便于分类过滤。
  • 记忆之间的关联关系:记忆A引用了记忆B,或者记忆C是对记忆D的总结。

这些需求用SQLite来满足再合适不过了。一个简单的SELECT * FROM memories WHERE session_id = ? AND tag LIKE ‘%preference%’就能快速拉出某个会话下所有关于用户偏好的记忆。它的强项在于精确匹配和关系型查询。

LanceDB则承担了“向量搜索引擎”的核心任务。AI智能体的记忆检索,光靠关键词匹配是不够的。用户可能会用不同的说法来询问同一件事。比如,用户说过“我喜欢用深色主题”,后续可能问“那个暗色的界面模式怎么调出来?”。关键词“深色”和“暗色”并不直接匹配,但语义高度相似。这就需要将记忆文本转换成向量(Embedding),然后进行向量相似度搜索。

LanceDB是一个专门为AI应用设计的向量数据库,它支持高性能的近似最近邻(ANN)搜索,并且能将向量数据和对应的元数据(如SQLite里存的ID、标签)高效地存储在一起。它的数据以列式格式存储,对于批量读取和向量计算非常友好。当智能体需要“回忆”时,系统会将当前问题或上下文也转换成向量,然后在LanceDB中搜索最相似的N个记忆向量,从而找到语义上最相关的历史信息。

提示:这种“SQLite管元数据,专用向量数据库管向量”的架构,是目前AI应用处理非结构化数据(文本、图像)的常见最佳实践。SQLite保证了事务和复杂查询的可靠性,而LanceDB(或Milvus、Qdrant等)则提供了专业的向量检索能力。两者通过一个共享的唯一ID(如UUID)进行关联。

2.2 Memory Provider:灵活可插拔的记忆后端

“Memory Provider”是这个项目设计上的另一个亮点。它定义了一套标准的接口,比如save_memory,search_memories,delete_memory等。SQLiteMemoryProviderLanceDBMemoryProvider分别是这套接口的具体实现。

这种设计的好处是解耦和可扩展性。你的智能体核心逻辑只依赖抽象的Memory Provider接口,而不关心底层用的是SQLite、LanceDB,还是未来可能支持的PostgreSQL、Redis甚至是一个远程服务。如果你想切换向量数据库,或者为了测试而使用一个纯内存的Mock Provider,都只需要更换一个配置项或初始化不同的Provider实例即可,业务代码几乎不用动。

在实际集成时,项目通常会采用一个复合Provider路由策略。例如,对于需要精确过滤的记忆查询(如“给我看昨天所有的记忆”),走SQLite Provider;对于需要语义搜索的记忆查询(如“我之前说的关于项目架构的想法”),走LanceDB Provider。框架内部帮你协调这两个Provider,对外提供一个统一的recall(回忆)方法。

3. 环境准备与部署实操

3.1 Python环境与依赖安装

这个项目是Python写的,所以一个干净的Python环境是第一步。我强烈建议使用Condavenv创建虚拟环境,避免包冲突。

# 使用 conda 创建环境(推荐) conda create -n hermes-memory python=3.10 conda activate hermes-memory # 或者使用 venv python -m venv hermes-memory-env # Linux/Mac source hermes-memory-env/bin/activate # Windows hermes-memory-env\Scripts\activate

接下来安装核心依赖。项目源码的requirements.txt可能列出了所有包,但我们可以根据核心功能选择性安装。最关键的是以下几个:

pip install sqlite3 # 通常Python内置,无需单独安装 pip install lancedb pip install sentence-transformers # 或 openai,用于生成文本向量 pip install numpy pip install pydantic # 用于数据验证和设置管理

sentence-transformers是一个非常重要的库,它提供了本地运行的文本嵌入模型,比如all-MiniLM-L6-v2,可以免费将文本转换成向量,无需调用OpenAI等付费API。如果你追求更好的嵌入效果,也可以安装openai库并配置API Key,使用text-embedding-3-small等模型。

注意:安装sentence-transformers时会自动安装torch。如果你的机器没有NVIDIA GPU,它会安装CPU版本的PyTorch,运行较慢。对于生产环境或大量数据处理,建议配置GPU并安装对应的CUDA版本PyTorch。可以先去PyTorch官网根据你的环境生成安装命令。

3.2 获取与初始化项目代码

由于这是一个GitHub项目(从标题410979729/scope-recall-hermes可以看出),我们需要克隆代码。

git clone https://github.com/410979729/scope-recall-hermes.git cd scope-recall-hermes

克隆后,不要急着运行。先花几分钟浏览一下项目结构,这能帮你更好地理解它。通常你会看到类似这样的目录:

scope-recall-hermes/ ├── src/ │ ├── memory_providers/ # 核心:SQLite, LanceDB等Provider的实现 │ │ ├── base.py │ │ ├── sqlite.py │ │ └── lancedb.py │ ├── models/ # 数据模型,如Memory类 │ ├── core/ # 核心逻辑,如记忆管理、检索策略 │ └── utils/ # 工具函数,如文本分块、向量化 ├── configs/ # 配置文件 ├── examples/ # 使用示例 ├── tests/ ├── requirements.txt └── README.md

仔细阅读README.md!里面通常有最关键的快速开始指南。然后,查看examples/目录下的脚本,这是最快的学习方式。一般会有一个basic_usage.pydemo.py

在运行示例前,通常需要初始化配置文件或数据库。根据项目说明,你可能需要:

  1. 复制一份配置文件模板:cp configs/default.yaml configs/local.yaml
  2. 编辑local.yaml,设置数据库路径、嵌入模型选择等。例如,将向量模型从OpenAI改为本地的sentence-transformers模型。
  3. 运行初始化脚本:python scripts/init_db.py(如果项目提供了的话),或者直接运行示例,程序会在第一次运行时自动创建数据库文件。

3.3 配置详解与关键参数

配置文件是项目的控制中心。以YAML格式为例,你需要关注以下几个核心配置项:

memory: provider: # 选择使用哪个provider,可以是 ‘sqlite‘, ‘lancedb‘, 或 ‘composite‘(复合) type: "composite" sqlite: db_path: "./data/memories.sqlite" # SQLite数据库文件路径 lancedb: uri: "./data/lancedb" # LanceDB数据存储目录 embedding_model: "sentence-transformers/all-MiniLM-L6-v2" # 嵌入模型 # embedding_model: "openai:text-embedding-3-small" # 或者使用OpenAI # openai_api_key: "${OPENAI_API_KEY}" # 如果使用OpenAI,需要配置key retrieval: top_k: 5 # 每次回忆返回的最相关记忆条数 similarity_threshold: 0.7 # 相似度阈值,低于此值的记忆不会被返回 use_hybrid_search: true # 是否使用混合搜索(结合关键词和向量)
  • embedding_model:这是最重要的参数之一。它决定了记忆文本被转换成向量的“质量”。all-MiniLM-L6-v2是一个在速度和效果上平衡得很好的通用模型,对于英文文本效果尤佳。对于中文,可以考虑paraphrase-multilingual-MiniLM-L12-v2或专门的中文模型。如果选择OpenAI的模型,效果通常更好,但会产生API调用费用和网络延迟。
  • top_ksimilarity_threshold:这两个参数共同控制回忆的“精确度”和“召回率”。top_k越大,返回的记忆越多,但可能包含不相关的;阈值越高,返回的记忆越精准,但可能漏掉一些相关但表述不同的。需要根据你的应用场景调整。一个常见的策略是先用默认值,然后通过人工评估结果来微调。
  • use_hybrid_search:混合搜索是提升检索效果的有效手段。它同时进行向量相似度搜索和基于元数据(如标签、时间)的关键词/过滤搜索,然后将结果融合。这通常能比单一搜索得到更全面、更准确的结果。

4. 核心功能使用与代码集成

4.1 记忆的存储:如何让智能体“记住”

记忆存储不是简单地把一整段对话扔进去。好的记忆系统需要对原始文本进行预处理。Scope Recall Hermes的核心操作之一就是将一段文本保存为记忆。

from src.memory_manager import MemoryManager from src.models import Memory # 1. 初始化记忆管理器(会读取上述配置文件) memory_manager = MemoryManager(config_path="./configs/local.yaml") # 2. 创建一条记忆 new_memory = Memory( content="用户表示他更喜欢在晚上工作,并且喜欢使用深色模式的代码编辑器。", # 元数据非常重要,是后续精准检索的钥匙 metadata={ "session_id": "chat_20231027_001", "user_id": "user_123", "tags": ["user_preference", "work_habit"], "source": "conversation", "importance": 0.8 # 可以自定义重要性评分 } ) # 3. 保存记忆 # save方法内部会做几件事: # a. 文本分块(如果content很长,超过模型上下文,会自动切分成块) # b. 为每个文本块生成向量嵌入(embedding) # c. 将向量存入LanceDB,将元数据和关联信息存入SQLite memory_id = memory_manager.save(new_memory) print(f"记忆已保存,ID: {memory_id}")

实操心得:

  • 内容提炼:直接保存冗长的用户原话并不是最佳实践。更好的方式是在保存前,让大模型(比如你用的LLM)对对话进行一个简短的总结提取关键信息。例如,将一段关于项目需求的5轮对话,总结成“用户需要开发一个具备A、B、C功能的Python数据分析工具,优先级是B最高”。这样存储的记忆更紧凑,检索效率更高,相关性也更好。
  • 元数据丰富化metadata字段是你的黄金矿工。除了示例中的基础信息,你还可以添加entity(提及的实体,如“Python”, “VSCode”)、sentiment(情感倾向)、action_item(是否有待办事项)等。这些结构化信息能让SQLite过滤发挥巨大威力。
  • 重要性评分:你可以设计一个简单的规则来给记忆打分,比如用户明确说“这个很重要”的语句打高分,寒暄闲聊打低分。在检索时,可以按相似度 * 重要性进行加权排序,让更重要的记忆优先浮现。

4.2 记忆的检索:如何让智能体“回忆”

当智能体需要上下文时,就需要触发回忆功能。回忆的触发策略有很多种:每次用户输入前自动检索;当检测到用户问题涉及历史信息时检索;或者定时进行“记忆回顾”。

# 假设当前用户输入或智能体需要上下文 current_context = "用户问:‘我之前说的关于编辑器的偏好,你能应用到新项目里吗?’" # 1. 基础回忆:基于当前文本的语义搜索 related_memories = memory_manager.recall( query=current_context, session_id="chat_20231027_001", # 限定在当前会话中搜索 top_k=3 ) for mem in related_memories: print(f"- [{mem.metadata.get('timestamp')}] {mem.content[:100]}... (相似度: {mem.score:.3f})") # 2. 高级回忆:混合搜索与过滤 # 用户可能想查找所有“重要”的“偏好”类记忆 related_memories = memory_manager.recall( query="工作习惯和偏好", filter_dict={ "tags": {"$contains": "user_preference"}, "importance": {"$gte": 0.7} }, use_hybrid_search=True )

recall方法返回的通常是一个Memory对象的列表,每个对象都包含contentmetadata和本次检索的score(相似度分数)。你可以将这些记忆的文本,按照相关性排序后,拼接成一段“上下文提示”,喂给大模型。例如:

以下是用户的历史对话记忆,供你参考: 1. [2023-10-27] 用户表示他更喜欢在晚上工作,并且喜欢使用深色模式的代码编辑器。 2. [2023-10-26] 用户提到他的项目主要使用Python语言,框架是FastAPI。 ... 当前问题:用户问:‘我之前说的关于编辑器的偏好,你能应用到新项目里吗?’

这样,大模型在生成回复时,就拥有了清晰的、相关的历史记忆。

4.3 记忆的管理与维护

记忆不是只存不删的,无效或过时的记忆会污染检索结果。项目通常提供了一些管理功能。

# 1. 删除单条记忆 memory_manager.delete(memory_id="some_memory_uuid") # 2. 根据条件批量删除(例如,清理某个测试会话的所有记忆) memory_manager.delete_by_filter(session_id="test_session_old") # 3. 更新记忆(例如,修正错误或补充信息) # 注意:更新记忆可能涉及重新生成向量嵌入,是一个较重的操作。 updated_memory = Memory(id=existing_id, content="修正后的内容...", metadata={...}) memory_manager.update(updated_memory) # 4. 记忆去重(高级功能) # 在保存新记忆前,可以先检索高度相似的旧记忆,如果相似度超过某个阈值(如0.95),可以选择合并而非新增。 duplicate_candidates = memory_manager.recall(query=new_memory.content, top_k=1, similarity_threshold=0.95) if duplicate_candidates: # 合并内容或直接跳过保存 print("发现高度相似记忆,可能无需重复存储。")

注意事项:

  • 记忆更新成本高:因为更新文本内容意味着要重新计算向量嵌入,并更新LanceDB中的向量数据。对于频繁变动的信息,考虑将其作为“元数据”存储,而不是核心content。或者采用“新增+标记旧记录失效”的软删除策略。
  • 定期清理:为记忆设置一个“过期时间”是个好习惯。可以写一个定时任务,定期删除过于久远(比如30天前)且重要性不高的记忆,或者压缩(总结)旧会话的记忆。

5. 集成到现有AI智能体工作流

5.1 与LangChain或LlamaIndex框架集成

Scope Recall Hermes本身可以独立工作,但它的威力在于与主流AI应用框架无缝结合。以LangChain为例,你可以将其包装成一个LangChain Memory组件。

from langchain.memory import BaseMemory from langchain.schema import BaseMessage class HermesLangChainMemory(BaseMemory): """将Scope Recall Hermes适配为LangChain的记忆后端""" def __init__(self, memory_manager, session_id): self.manager = memory_manager self.session_id = session_id self.buffer = "" # 用于临时缓存当前对话轮次 @property def memory_variables(self): return ["hermes_history"] def load_memory_variables(self, inputs): # 当链需要记忆时,触发回忆 query = inputs.get("input", self.buffer) if not query: return {"hermes_history": ""} memories = self.manager.recall( query=query, session_id=self.session_id, top_k=5 ) # 将记忆格式化成字符串 history = "\n".join([f"- {m.content}" for m in memories]) return {"hermes_history": history} def save_context(self, inputs, outputs): # 保存一轮对话到记忆 human_input = inputs.get("input", "") ai_output = outputs.get("output", "") if human_input and ai_output: # 可以保存单条,也可以将Q&A作为一个记忆块保存 memory_content = f"Human: {human_input}\nAI: {ai_output}" memory = Memory( content=memory_content, metadata={"session_id": self.session_id, "type": "qa_round"} ) self.manager.save(memory) self.buffer = human_input # 更新缓冲区 def clear(self): # 清空当前会话的记忆(可选) self.manager.delete_by_filter(session_id=self.session_id) self.buffer = "" # 在LangChain链中使用 from langchain.llms import OpenAI from langchain.chains import ConversationChain llm = OpenAI(temperature=0) hermes_memory = HermesLangChainMemory(memory_manager, session_id="unique_chat_id") conversation = ConversationChain(llm=llm, memory=hermes_memory, verbose=True) response = conversation.predict(input="你好,请记住我最喜欢的水果是芒果。")

这样,你的LangChain智能体就具备了持久化、可语义检索的长期记忆能力。

5.2 设计高效的记忆触发与注入策略

简单地每轮对话都检索并注入所有相关记忆,可能会导致提示词(Prompt)过长或包含噪音。需要设计更智能的策略:

  1. 相关性阈值过滤:只注入相似度分数高于similarity_threshold的记忆,确保进入上下文的都是强相关记忆。
  2. 总结性记忆:定期(例如每10轮对话)对近期记忆进行一次自动总结,生成一条“摘要记忆”。后续检索时,优先检索摘要记忆,除非具体问题需要细节,再去检索原始记忆块。这能极大压缩上下文长度。
  3. 主动回忆与被动回忆
    • 被动回忆:每次用户输入时自动触发,这是基础的。
    • 主动回忆:智能体可以主动发起。例如,当用户说“我们之前谈到过这个”,或者智能体自己判断当前任务需要某个领域的知识时,可以主动查询特定标签的记忆(filter_dict={"tags": "project_requirements"})。
  4. 记忆分级注入:将回忆到的记忆分为“核心相关”和“背景相关”。将“核心相关”的记忆完整放入系统提示词(System Prompt),将“背景相关”的记忆以更简短的形式提及,或者作为可选的参考信息。

6. 性能调优与问题排查

6.1 数据库性能与优化

  • SQLite优化
    • 使用WAL模式:在初始化数据库连接后,执行PRAGMA journal_mode=WAL;。这可以大幅提升并发读写性能。
    • 合理建立索引:在metadata的常用查询字段上建立索引,如session_id,tags,timestampCREATE INDEX idx_memories_session ON memories (session_id);
    • 定期VACUUM:如果频繁删除记忆,数据库文件会产生碎片,定期执行VACUUM;命令可以回收空间、优化性能。
  • LanceDB优化
    • 向量索引创建:LanceDB支持IVF_PQ、DiskANN等多种索引。对于数据量较大(>10万条)的场景,在构建数据库后,需要创建索引来加速搜索。查看LanceDB文档,使用create_index方法。
    • 批量写入:保存记忆时,尽量使用批量操作(如果框架支持),而不是逐条插入,这能显著提高向量写入速度。
    • 缓存嵌入模型:加载sentence-transformers模型有一定开销。在长时间运行的服务中,确保嵌入模型实例是单例的,被重复使用。

6.2 常见错误与解决方案

问题现象可能原因解决方案
导入错误:No module named ‘src‘Python路径问题,未在项目根目录运行,或未安装包。1. 在项目根目录运行。2. 使用pip install -e .以可编辑模式安装本项目。
LanceDB报错:Table not found表未初始化。首次使用LanceDB时,需要创建表。检查代码中是否有自动建表的逻辑(通常在第一次save时触发)。确保uri路径有写入权限。
检索结果完全不相关1. 嵌入模型不匹配(中英文混用)。
2. 文本分块不合理,破坏了语义。
3. 相似度阈值过低。
1. 为中文文本切换中文嵌入模型。
2. 调整分块大小和重叠(overlap)参数,尝试按句子或段落分块。
3. 逐步提高similarity_threshold,观察效果。
保存或检索速度非常慢1. 使用CPU运行嵌入模型。
2. 未创建向量索引,进行全表扫描。
3. SQLite查询未走索引。
1. 尝试使用GPU,或换用更小的嵌入模型(如all-MiniLM-L6-v2已很小)。
2. 为LanceDB表创建向量索引。
3. 在SQLite的常用查询字段上建立索引。
记忆内容重复存储保存逻辑未做去重判断。save方法前增加去重检查,如检索top_k=1similarity_threshold=0.95,如果存在则更新原记忆而非新增。
提示词过长,超出模型限制回忆到的记忆太多,全部注入导致Token超限。1. 减少top_k
2. 对记忆内容进行摘要后再注入。
3. 实现一个“记忆选择器”,只挑选最重要的几条注入。

6.3 高级技巧:自定义嵌入模型与混合搜索

如果你对默认的嵌入模型效果不满意,可以轻松替换。项目通常通过一个EmbeddingModel类来抽象这一层。

from sentence_transformers import SentenceTransformer from src.utils.embeddings import BaseEmbeddingModel class CustomSentenceTransformerEmbedder(BaseEmbeddingModel): def __init__(self, model_name: str): # 可以在这里加载任何你想要的模型 self.model = SentenceTransformer(model_name) # 如果你的模型需要特殊处理(如添加指令前缀),可以在这里重写_encode方法 def encode(self, texts: List[str]) -> List[List[float]]: # 返回向量列表 return self.model.encode(texts).tolist() # 在配置或初始化时使用自定义模型 config[‘memory‘][‘provider‘][‘lancedb‘][‘embedding_model‘] = ‘local:custom‘ # 或者在代码中动态指定 memory_manager.lancedb_provider.embedder = CustomSentenceTransformerEmbedder(‘BAAI/bge-large-zh‘)

对于混合搜索,如果框架内置的不满足需求,你可以实现自己的融合算法(如 Reciprocal Rank Fusion)。核心思路是分别从向量搜索和关键词搜索得到两个排序列表,然后按照一定规则计算每个记忆的最终分数,重新排序。

7. 实战:构建一个具有长期记忆的客服助手

让我们用一个简化的场景来串联所有知识点:构建一个能记住用户过往问题的客服助手。

目标:用户多次咨询后,助手能记住用户的设备型号、已尝试的解决方案、偏好沟通时间等,提供个性化服务。

步骤

  1. 初始化与配置:按照第3节完成环境搭建和配置。使用复合Provider,嵌入模型选择BAAI/bge-small-zh(一个不错的中文小模型)。
  2. 记忆提取策略:在每轮客服对话结束后,不是保存原始对话,而是用一个大模型(如GPT-3.5)或规则,从对话中提取关键信息实体,形成结构化记忆。
    • 原始对话:“我的iPhone 15 Pro昨天开始充不进去电,我用原装充电器试了也不行。”
    • 提取的记忆
      • content: “用户使用的设备是iPhone 15 Pro,遇到充电问题,已排除充电器因素。”
      • metadata:{“session_id”: “...”, “user_id”: “u_001”, “tags”: [“device_issue”, “charging”, “iphone_15_pro”], “entity”: [“iPhone 15 Pro”, “充电器”], “problem_status”: “unresolved”}
  3. 记忆检索策略:当用户再次进入客服会话时,系统自动执行以下操作: a.身份识别:获取当前user_id。 b.全局回忆:以当前用户的第一句话为query,在user_id过滤下进行语义检索,召回Top 5记忆。 c.问题分类:如果用户问题属于“查询进度”、“历史问题”,则额外用tags过滤,精确查找相关记忆。
  4. 记忆注入与生成:将回忆到的记忆,按时间或重要性排序,格式化后放入系统提示词:

    用户历史信息

    1. [10月26日] 用户使用的设备是iPhone 15 Pro,遇到充电问题,已排除充电器因素。(状态:未解决)
    2. [10月25日] 用户偏好在工作日晚上7点后接受电话回访。
    3. [10月20日] 用户曾成功解决过Wi-Fi连接问题。

    当前问题:用户说:“我那个充电的问题有更新吗?”

  5. 持续优化
    • 当问题解决后,更新对应记忆的problem_status为“resolved”。
    • 定期(如每周)运行一个任务,将同一user_id下关于同一设备(entity包含相同设备名)的“已解决”问题记忆,合并成一条“维修历史”摘要记忆,并归档(打上archived标签),减少活跃记忆数量。

通过这样一个闭环,你的客服助手就能展现出真正的“记忆力”,提升用户体验和解决效率。Scope Recall Hermes提供的正是实现这一闭环所需的核心基础设施。它的模块化设计允许你根据实际业务需求,灵活调整记忆的粒度、检索的策略和存储的后端,是开发高级AI应用不可或缺的利器。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询