news 2026/10/21 6:45:29

为Claude构建记忆层:提取、存储、检索与注入的完整实践指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为Claude构建记忆层:提取、存储、检索与注入的完整实践指南

如果你用过带记忆的AI助手,再回头看那些"聊完就忘"的裸模型,真的会很不适应。"claude-mem"这个名字,我第一次听到就觉得直捣痛点:Claude本身的对话能力已经很强了,但你要把它接到真实应用里,马上会发现它和所有大模型一样,天生没有长期记忆——每次调用都是孤立的,关掉窗口,一切归零。我最早在给一个客服机器人做改造时,想让Claude记住用户身份和偏好,当时思路很笨,把所有历史消息全部存下来,每次请求前全量塞进上下文。结果要么token爆掉,要么模型被海量无关信息淹没,回答质量反而下降。后来我围绕"claude-mem"这个思路,系统性地梳理出一套记忆层的设计:什么该记、怎么存、怎么取、怎么注入。这篇文章就把这套完整落地经验写出来,从架构设计到核心代码,再到我踩过的各种坑,给正在给Claude或类似模型加记忆的同学一份直接能用的参考。

1. 为什么非要给Claude加一层"记忆"

1.1 模型天生"失忆",问题出在哪

很多刚接触大模型开发的同学,第一次调用接口时都会困惑:为什么我上一轮跟它说"我叫小林",下一轮它完全没反应?这就要从大模型的工作原理说起。

大模型本质上是一个条件概率模型,它根据你提供的输入文本来预测接下来的输出。这里的"输入文本"就是对话的全部上下文。你在一次API请求里传什么,它就看到什么;你不传的,它一概不知。上一次请求结束后,模型内部不会保留任何关于这次对话的记录。这和一个经验丰富的人聊天完全不同——人是有记忆的,而模型每次都是"失忆后的第一次见面"。

所以核心矛盾是:模型的能力很强,但它没有一个"大脑存储区"。要让它在第二次会话时表现得像记得用户一样,唯一的办法,是在模型外部加一个记忆系统,然后在下一次请求时,把相关的记忆主动放进它的输入上下文里。这就是"记忆层"的本质——模型本身不记得,但我们可以让它"看起来记得"。

这个认知很重要,因为很多人会误以为是"调个参数就能开启记忆",或者"模型升级后自然就记住了"。都不是。只要模型还是基于上下文预测的架构,记忆就必须靠外部系统辅助。哪怕未来模型原生支持某种持久状态,外部记忆层在可控性、可解释性上的价值也依然存在。

1.2 记忆需求拆成三层才够用

在实际项目里,我把"记忆"拆成三层来想,这个划分帮我避开了很多设计上的坑。

第一层,会话内的短期记忆。用户刚说完"我叫小林""帮我查一下周日的机票",这些信息在接下来几轮对话里应该一直有效。这个直接用"对话历史拼接"就能解决:每次请求都把最近几轮消息传进去,模型自然能保持上下文连贯。

第二层,跨会话的长期记忆。用户昨天说过"我是产品经理,偏好简洁回复",今天重新打开应用,你应该还记得。这个短期拼接解决不了,必须落到持久化存储里,等用户再次出现时检索出来。

第三层,工作记忆,类似人脑的"临时记事本"。比如当前正在处理一份文档,翻译任务的目标语言、风格要求这些中间态需要暂存,任务做完就清掉。它介于短期和长期之间,适合单独维护,不能和长期记忆混在一起。

这三层不是割裂的,它们在系统里各自承担不同的职责。很多项目一上来就想着把所有对话历史无限期存下来,这其实是把三层混成一层,后面必然出问题。短期记忆用拼接,工作记忆用临时存储,长期记忆才需要专门的记忆库,各管各的,系统才不会崩。

1.3 记忆层带来的体验质变

有了记忆层,体验完全不一样。

没有记忆的时候,用户每次回来都要重复自我介绍、重复需求背景,时间一长就觉得这是个"弱智聊天框",根本产生不了依赖。有了记忆层,AI能主动说"小林,上次你说方案A要周五前出结果,今天要开始准备吗?"。这种反馈带来的信任感和粘性,是普通问答完全给不了的。

我再从工程角度说一个容易被忽略的价值:记忆层可以把"用户说了什么"变成"系统知道什么"的结构化资产。这些结构化的用户画像、偏好、历史决策,不只喂给模型,还能拿来做数据分析、用户分群、个性化推荐。也就是说,记忆层既是模型的能力增强器,也是产品自己的数据资产。我见过不少团队把记忆系统当作"给模型加buff"的临时手段,其实它沉淀下来的结构化数据,长期价值可能比对话效果提升还要大。

2. 先画清楚记忆系统的架构:记住什么、怎么想起来

2.1 完整闭环四环节

一个可用的记忆系统,至少要包含四个环节:

  1. 记忆提取(Extraction):根据一段对话,抽取值得保存的信息。
  2. 记忆存储(Storage):把提取结果写入合适的存储介质。
  3. 记忆检索(Retrieval):新会话到来时,根据用户当前输入召回相关记忆。
  4. 记忆注入(Injection):把召回的记忆拼入提示词,让模型"带着记忆去回答"。

这四个环节形成一个闭环,每轮对话都可能是新记忆的来源,也可能是旧记忆的触发器。

我最初做的时候,有一半的精力都放在"存储"上,觉得数据库设计合理就跑通了。真正跑了两个星期才发现,存储是最简单的一环,"提取"和"检索"才是决定记忆系统好坏的命门。存得再多,提取不到关键信息、检索不到相关内容、注入位置不对,整套系统等于白搭。

举个例子,用户在一次很长的对话里反复强调"以后报告都用PDF格式",如果你不做提取,这段信息就埋在几十轮对话历史里,没人会用;如果做了提取但检索环节查不出来,那下次用户提到"报告"时,系统也想不起来有这条偏好。四个环节任何一个偷懒,用户感知都是"AI怎么又忘了"。

2.2 记忆分类与生命周期

什么样的信息值得长期保存?我归纳成三类。

事实型,比如用户身份、明确偏好、任务结论。例如"用户叫小林""项目X要求周五交付"。这类最稳定,是记忆库的基石。

叙事型,指某个时间段内对话的进展概要。例如"上周讨论了方案A和B,最终倾向A,待预算确认"。这类记忆的价值在于延续上下文,但它的有效性往往随时间快速衰减。

程序型,指用户的习惯流程、操作方法。例如"用户习惯先看备选方案再逐个点评"。这类记忆对个性化服务非常有用,但提取难度最高,需要从行为模式里归纳。

与此同时,记忆不能是"永久有效"的。我最初踩过的坑就是所有记忆都不设过期时间,几个月后系统里堆满了早已失效的旧信息,检索时它们还排在前面,反复误导模型。后来我给每条记忆都加上生命周期:

  • 临时记忆:只对当前会话有效,对话结束即废弃。
  • 长期记忆:长期有效,但允许被更新。比如用户换了城市,旧的城市记忆要更新而非叠加。
  • 待验证记忆:系统自己推断出来的偏好(例如"用户似乎偏好短回复"),如果后续对话出现矛盾,就要主动替换。

这个设计让记忆库保持新鲜,也减少了对模型的误导。你想想,如果AI一直记着用户两年前待过的城市,用户问当地天气,AI推荐的全是老地方的信息,那体验简直灾难。

2.3 为什么不能把记忆全量硬塞进上下文

有人可能想:既然模型吃上下文,那把数据库里所有记忆全塞进去不就行了?

这个想法我试过,而且是带着真实数据试的。结果是三点惨痛教训。

首先,token成本飞涨。一次请求如果塞入几万token的旧记忆,费用直接翻倍。对于高频对话的线上服务,这成本完全不可持续。其次,上下文被污染。当背景信息里混入大量和当前话题无关的旧记忆时,模型抓不住重点,回答质量反而比没有记忆时还低——它被"噪音"带偏了。最后,延迟变高。输入越长,首字生成越慢,用户体验明显变差。尤其在移动端场景,慢一秒钟用户就可能划走。

所以记忆系统必须做"相关性过滤":不能全给,只能把和当前对话最相关的几条挑出来,放在显眼位置。这也决定了"检索质量"是整套系统的核心,而不是存储容量。

3. 核心代码拆解:提取、存储、检索、注入一条龙

3.1 记忆提取:让模型自己输出结构化JSON

记忆提取,最直接的方式是让模型自己来。毕竟,最理解"这段对话里什么重要"的,就是模型本身。

我的做法是:在合适的时机,把这段对话交给模型,让它按固定JSON结构输出记忆项。下面是一个我打磨过很多次的提示词框架:

extract_prompt = """ 请阅读以下对话,提取其中值得长期记忆的信息。 仅输出JSON数组,不要输出其他内容。每项格式如下: { "type": "fact|narrative|procedure", "content": "一句话描述这条记忆", "importance": "1到5的整数,5表示极重要", "confidence": "0到1,表示这条记忆的确定程度", "source_text": "对话中对应的原文摘要" } 对话: {transcript} """

提取的结果,我会做两道过滤。第一道看confidence:低于0.6的记忆丢弃或降级为临时记忆,这能过滤掉很大一部分玩笑话和模糊表达。第二道看importance:低于2的尽量不写入长期存储,避免低价值记忆囤积。

这里要强调一个调优细节:提取触发时机。一开始我每次对话都触发提取,结果每轮只聊了两三句话也会产生一堆"用户问了天气"这种毫无价值的记忆。后来我把触发条件改成这样:对话轮次超过10轮,或者用户出现了明确的长期意图表达(例如"以后都这样""记住这个"),才做完整提取;否则只在会话结束时生成一条短摘要。这个策略直接将记忆库的噪声降低了大概一半。

3.2 记忆存储:关系库和向量库双轨并行

记忆不是一种单一形态的数据,所以我用的是"关系库 + 向量库"双轨存储。

关系型数据库存结构化的事实和元数据。表结构大致长这样:

CREATE TABLE memories ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL, type TEXT NOT NULL, content TEXT NOT NULL, importance INTEGER DEFAULT 3, confidence REAL DEFAULT 1.0, expires_at TIMESTAMP, updated_at TIMESTAMP DEFAULT now(), source_text TEXT ); CREATE INDEX idx_memories_user ON memories(user_id);

向量数据库存语义向量,用于做"语义召回"。每条记忆的内容通过embedding模型编码成一个向量,存到向量库中,之后用向量相似度去定位相关记忆。

为什么需要双轨?我举个例子:用户说"用户不喜欢长篇大论的回复",如果只靠SQL的关键词匹配,要匹配到"他想要简洁点的回答"这句语义相近的表达,几乎不可能。而向量检索对这种语义近义非常在行。反过来,如果只靠向量检索,我想精确地筛选出"最近一周,类型为fact,重要性高于3"的记忆,就得写一堆额外的过滤条件,很不灵活。所以两者各司其职:向量库负责召回候选,SQL负责精确过滤、排序和生命周期管理。

工程实现上,我建议一个用户一个独立记忆空间,所有检索都带上user_id条件,避免用户之间记忆串味。这是我踩过一次的坑:早期没做隔离,A用户问"我上次说喜欢什么颜色",模型回答里混入了B用户的偏好,当场社死。用户对"AI记错了人"这件事的容忍度极低,这种问题一定不能出现。

3.3 记忆检索与注入

检索的核心思路是三步:召回、混排、精选。

召回阶段,把用户当前这句话(最好拼接最近几轮上下文)编码成查询向量,从向量库中取回相似度排名靠前的候选记忆,比如20条。

混排阶段,不能只看相似度。一条相似度0.8但重要性只有2的旧记忆,和一条相似度0.7但重要性5、两天前刚更新的新记忆,到底谁该优先进上下文?我的经验是给三者加权,用一个简易分数:

def rank_score(sim, importance, age_days): time_decay = math.exp(-age_days / 60.0) return 0.5 * sim + 0.3 * (importance / 5.0) + 0.2 * time_decay

这个公式是调出来的结果。相似度占大头,重要性和时间衰减各贡献一部分。你也可以根据业务调权重,但建议先按这个基线跑,再逐步观察调整。

精选阶段,取混排分数最高的8~10条作为最终注入内容。数量要克制,太多会稀释上下文。

注入位置方面,实践下来最稳的是放在系统提示词之后、用户消息之前,做成一个独立的"记忆块":

memory_block = "\n".join( f"[记忆 {i+1}] (类型:{m['type']}, 重要度:{m['importance']}) {m['content']}" for i, m in enumerate(retrieved_memories) ) final_prompt = f""" {system_prompt} 以下是关于用户的长期记忆,请结合这些背景信息来回答: {memory_block} 当前对话: 用户:{query} """

为什么放在中间而不是末尾?因为模型会把中间这段当成"背景资料"来参考,不会误认为是用户当前提出的新问题。如果放在末尾,很容易和当前消息混在一起,模型分不清到底是"资料"还是"待回答问题"。这个细节看起来小,但对回答质量的影响非常明显。

4. 实操演示:半小时搭出一个带记忆的Claude助手

4.1 环境准备与依赖隔离

实操环节,我在Python 3.10+的环境里实现,依赖非常简单:

  • 模型官方SDK,用于调用对话接口。
  • 一个轻量级开源向量库的Python客户端,用于语义检索。
  • SQLite,Python内置,零配置,做结构化存储完全够用。

安装命令本身很简单,但我第一次搭建时吃了环境依赖的亏:直接往全局环境里装某个向量库,结果和系统里已有的一个旧版库冲突,一运行就报错,折腾了半小时。后来我学乖了,所有项目都开独立虚拟环境:

python3 -m venv .venv source .venv/bin/activate pip install <必要的依赖>

这个习惯强烈建议养成。做记忆系统这种涉及多个库联调的项目,依赖隔离能省掉大量莫名其妙的报错排查时间。

4.2 核心类实现

下面给一个最小可运行的骨架。这个类只暴露一个chat方法,外部调用方不需要关心记忆怎么存取,内部自动完成"检索-注入-调用-提取"。

import math import sqlite3 from datetime import datetime class MemoryStore: """记忆存储:负责写入、检索、生命周期管理。""" def __init__(self, db_path, vector_client): self.conn = sqlite3.connect(db_path) self.vector_client = vector_client def search(self, user_id, query, top_k=8): # 1. 向量召回候选 query_vec = self.vector_client.embed(query) candidates = self.vector_client.search(user_id, query_vec, top_k=20) # 2. SQL过滤 + 混排 scored = [] for cand in candidates: row = self.conn.execute( "SELECT * FROM memories WHERE id=? AND user_id=?", (cand["id"], user_id) ).fetchone() if row and row["expires_at"] > datetime.now(): score = rank_score(cand["score"], row["importance"], cand["age_days"]) scored.append((score, row)) scored.sort(key=lambda x: x[0], reverse=True) return [row for _, row in scored[:top_k]] def upsert(self, user_id, memory): # 写入新记忆或更新已有记忆 ... class MemoryAssistant: def __init__(self, client, memory_store): self.client = client self.memory_store = memory_store def chat(self, user_id, user_message): # 1. 检索相关记忆 memories = self.memory_store.search(user_id, user_message, top_k=8) memory_block = self._format_memories(memories) # 2. 组装带记忆的提示词 prompt = f""" 你是一个有帮助的助手。 以下是关于用户的长期记忆: {memory_block} 当前对话: 用户:{user_message} """ # 3. 调用模型 reply = self.client.chat(messages=[{"role": "user", "content": prompt}]) # 4. 判断是否提取新记忆 self._maybe_extract_memory(user_id, user_message, reply) return reply def _maybe_extract_memory(self, user_id, user_message, reply): if len(user_message) < 20 and len(reply) < 50: return # 太短,跳过 transcript = f"用户:{user_message}\n助手:{reply}" memories = extract_memories_from_transcript(transcript) for mem in memories: if mem["confidence"] >= 0.6 and mem["importance"] >= 2: self.memory_store.upsert(user_id, mem)

这段代码能直接跑通一个基础闭环。虽然它简化了很多细节,但提取、存储、检索、注入四个环节全部齐了。拿到这个骨架,你可以一步一步往里加东西:记忆合并、冲突检测、摘要滚动、多租户隔离,都是在这个框架上扩展。

4.3 跑通一次完整会话

我用两个连贯的会话来演示效果。

第一轮,用户输入:"我叫小林,是做产品设计的,以后聊方案都用中文,回复尽量简洁一点。"助手正常回答。因为这段对话包含明确事实,_maybe_extract_memory被触发,系统提取出三条记忆:

  • "用户叫小林,职业是产品设计"(fact, 重要度5)
  • "用户习惯使用中文沟通"(fact, 重要度4)
  • "用户偏好简洁回复"(fact, 重要度4)

第二轮,模拟第二天用户重新打开应用,只输入一句:"上次聊到哪了?"系统对这句话做向量检索,成功命中上面几条记忆,注入提示词后,助手回复:"小林,上次你提到你做产品设计,我们聊到了方案A的方向。你今天想继续吗?"

这个例子虽然简单,但你试一下就明白,同样一句话,没有记忆层的默认回复是"我们之前没有聊过",而有了记忆层,体验完全不同。这种差异正是用户留下来的理由。

4.4 参数调优与经验值

几个关键参数,我整理了一份参考值:

参数建议值说明
top_k8~15最终注入的条数,小于8容易漏关键记忆,大于15会带进噪音
相似度阈值取前40%候选不要直接按分数硬过滤,不同向量库分数区间不一样
时间衰减系数exp(-age_days/60)60天后权重降到约37%,偏短期业务可缩短到30
记忆合并频率每周一次把同主题碎记忆合并成一条,省存储也减少注入冗余

还有个细节:记忆更新时记得维护updated_at字段。混排公式里时间衰减依赖的是最近一次更新时间和当前时间的差值,而不是创建时间。用户改了偏好,记忆权重应该立刻拉高。如果还用创建时间算,用户明明上周刚改过偏好,系统却以为这是一条三年前的旧记忆,排名被压得很低,那就完全反了。

5. 我踩过的坑:记忆污染、上下文超限与检索失灵

5.1 记忆污染:AI一本正经地记住了玩笑话

记忆污染是我实际使用中踩过最大的坑。

有一次,用户开玩笑说"我最爱吃的东西是空气",系统一本正经地把这句话存成了高重要性记忆。从此每次对话,模型都会提起"你爱吃空气",场面极其尴尬。

要解决这个问题,我从两个方向下手。

第一,提取时增加"置信度校验"。像前面说的,让模型输出confidence字段,玩笑、反讽、不完整表达,置信度都会偏低。低于0.6的记忆不写入长期库,或者只作为临时记忆存活一轮。

第二,引入"记忆纠错"机制。当新对话与已有记忆明显矛盾时,系统要主动更新旧记忆。我实现的规则很简单:提取到一条新的同类型记忆时,和库里已有记忆做冲突检测,如果内容方向相反,就以新记忆为准,并把旧记忆置为过期。更稳妥的做法是触发一次人工确认,但对大多数场景,自动更新加日志留痕就够用了。

5.2 上下文超限:长会话怎么"瘦身"

即便做了检索过滤,同一个会话里聊了很久,上下文还是会逼近上限。

我的方案是"滚动摘要"。对话超过一定长度后,不再保留全部原始轮次,而是把历史对话压缩成一段摘要放进上下文。这跟记忆提取是两条平行线:摘要负责"本次会话发生了什么",长期记忆库负责"用户是谁、偏好什么"。

实际压缩策略:

  • 每满5轮对话,调用一次模型,把前5轮压缩成一条摘要,包含关键决策、待办事项、已经确认的结论。
  • 上下文里只保留最近3段摘要,更早的原始轮次全部丢弃。
  • 摘要中的关键决策,同步写入长期记忆库。

这样,重要的信息不会丢,上下文又不会无限膨胀。我见过不少项目把全天对话一股脑全塞进去,最后模型连最简单的追问都答不好,这其实就是上下文超载的典型症状。做记忆系统的第一步,反而是学会"丢东西"。

5.3 检索失灵:存了但就是找不着

遇到"明明存了记忆,但AI就是没想起来",先别急着改代码。我排过无数次,真正的线索往往藏在三个地方。

第一个是embedding模型太弱。换一个更强的语义模型,召回质量的提升立竿见影。这属于"隐性投资",一开始很容易忽略。我当时就是图省事用了默认的小模型,检索命中率惨不忍睹,换成更强的模型之后,同样一套代码效果完全不一样。

第二个是查询语句太短。"嗯""好的""继续"这种输入,向量表达几乎没有信息量,根本匹配不上记忆。解决办法是检索用"最近几轮拼接文本"来做查询向量,而不是只拿当前一句。跟人聊天一样,你拿着半句话去回忆,当然回忆不起来。

第三个是记忆库本身太稀疏。系统刚上线时,记忆本来就少,召回结果残缺正常。我加了一个兜底:如果高置信记忆召回不到3条,就注入最近一次会话摘要,至少让对话有连续性。等记忆攒多了,再逐步减少兜底的依赖。

5.4 隐私红线:记忆必须可见、可删、可溯源

做记忆系统,隐私是绕不开的。

用户的所有偏好、个人资料、对话内容都被系统存了下来,一旦泄露,后果严重。我给自己立了几条铁律:

  • 敏感字段加密落库。即使数据库文件被拖走,攻击者看到的也只是密文。
  • 每条记忆都记录来源对话ID和创建时间。用户能知道"这条记忆是怎么来的",而不是凭空出现。
  • 给用户提供"记忆管理"入口,能查看系统记住了自己什么,能手动删除。这个入口一开始没做,后来测试用户反馈"AI知道太多了,有点害怕",我才意识到"可解释、可删除"的信任价值有多大。

记忆系统做得越好,越要注重边界感。用户愿意让AI记住自己,是因为信任。一旦这种信任被滥用或破坏,再强的记忆能力都救不回来。

5.5 一个便宜的调试技巧:把注入的记忆打印出来

最后分享一个便宜但好用的技巧:调试时,把所有注入模型的记忆和最终prompt都打印出来。我的代码里长期保留这个日志打印:

print(">>> 本次注入的记忆:") print(memory_block) print(">>> 最终prompt:") print(final_prompt)

很多次我以为是检索逻辑出了问题,打印出来一看,才发现是记忆块格式不对:多条记忆之间没有分隔符,模型把两条记忆当成一句话读;或者注入位置放在了用户消息末尾,模型分不清那是背景还是问题。肉眼排查虽然土,但非常直接。

另外一个建议,给每条记忆加source_text字段,保留记忆来源的原文片段。出现"AI乱记"问题时,能快速定位是哪一轮对话、哪句话产生的,排查效率高很多。我靠这个字段在一次故障里十分钟就锁定了问题来源,比对着日志猜半天强太多。

做记忆层做了两个多月,我最大的体会是:好的记忆系统跟人一样,重要的不是"记得多",而是"记得准"和"忘得掉"。什么信息值得存、什么信息必须到期、什么时候该回忆、回忆到什么程度合适,这些决策直接决定用户体验。我一开始追求把用户说的每个字都存下来,结果系统变成了一台"什么都知道但不知道说什么"的话痨,模型回答里充斥着无关旧记忆。后来学会克制,只保留真正的用户级事实和关键决策,效果反而大幅提升。如果你也在给Claude或同类模型加记忆,建议从最小闭环开始,先把提取和注入跑通,再逐步加分类、加权和纠错。等技术积累够了,"claude-mem"这个思路完全可以扩展成跨模型通用的个人记忆层,那会是另一个很有意思的方向。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 5:02:01

2026版Java架构师面试指南:核心考点与实战备战策略

这两年Java后端圈子的风向变了不少&#xff0c;但“架构师”这三个字依然是很多人的职业里程碑。网上突然流传的《2026版Java架构师面试参考指南》&#xff0c;说是全网首次公开&#xff0c;很多朋友跑来问我到底值不值得刷&#xff0c;说实话&#xff0c;这类资料每年都有新版…

作者头像 李华
网站建设 2026/10/19 1:18:21

局域网组网综合实验:VLAN划分、IP规划与排错实战指南

简介&#xff1a;《局域网组网的综合实验.doc》是一份面向网络工程、计算机及相关专业学生和实验人员的综合性实验文档&#xff0c;以局域网规划设计与组网实践为核心目标。内容从实验目的、原理入手&#xff0c;完整覆盖需求分析、逻辑设计、物理设计与设备选型等流程&#xf…

作者头像 李华
网站建设 2026/10/21 8:10:42

从单体Agent到Agent组织:多智能体协作架构的设计与落地

从单体Agent到Agent组织&#xff1a;关于“agency-agents”的设计思路与落地经验这两年做大模型应用的人&#xff0c;八成都有过类似的尴尬&#xff1a;单个Agent在Demo里跑得挺欢&#xff0c;一放到真实业务场景里就变回了“人工智障”——目标稍复杂就迷路、工具调用上下文一…

作者头像 李华
网站建设 2026/10/21 4:50:45

KITTI数据集适配LIO-SAM:话题重映射、IMU修正与参数调优全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/20 14:35:13

AI芯片与模型为何进入“绑定时代”?算力匹配成落地关键

最近跟几个搞AI基础设施的朋友碰面&#xff0c;话题绕不开一件事&#xff1a;AI行业进入下半场之后&#xff0c;游戏规则变了。前两年大家拼的是模型参数规模、榜单分数、训练集群大小&#xff1b;现在见面聊的却是另一回事——你这套模型跑在哪款芯片上&#xff1f;那款芯片适…

作者头像 李华
网站建设 2026/10/19 10:07:15

嵌入式Linux开发板时间差8小时:RTC与系统时间同步解析

有朋友问我&#xff0c;手里的ElfBoard开发板执行date命令后&#xff0c;显示的时间总比北京时间慢8个小时&#xff0c;问我是不是板子坏了。这个问题我自己刚接触嵌入式Linux时也踩过&#xff0c;当时第一反应是RTC芯片没工作&#xff0c;折腾到最后才发现&#xff0c;板子根本…

作者头像 李华