news 2026/10/3 5:19:48

Redis+AI落地指南:从缓存、向量检索到分布式锁与性能优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis+AI落地指南:从缓存、向量检索到分布式锁与性能优化

今天看到“Redis 正式接入 AI”这类标题的时候,我第一反应倒不是“又上新功能了”,而是:这个基础设施级的选手,终于要被更多做 AI 应用的人认真对待了。过去一年我在做 AI Agent、RAG 检索、多模型调度这类系统,几乎每个项目到后期都会回归到同一个问题上——谁在扛住请求风暴?谁在保存会话状态?谁在锁住并发任务?答案十有八九是 Redis。现在 Redis 和 AI 的关系已经不是“顺便用一下”的关系,而是从模型推理到在线缓存、从向量检索到分布式协调,它都成了那个绕不开的中间枢纽。

我知道很多人看到“Redis 接入 AI”会觉得是个营销概念,其实不是。这件事更像是一次基础设施角色升级:Redis 不仅在凭 Vector Search 这类能力往前够着 AI 的场景,更重要的是,它过去几十年沉淀的那套缓存、队列、锁、集群机制,恰好补上了 AI 服务落地时最缺的那几块短板。这篇文章我不会去复读官方文档,就按我实际踩过的坑、调过的参、排查过的故障,把“Redis + AI”从理论到落地的完整链路捋一遍。不管你是做后端、搞算法落地,还是在维护 AI 线上服务,这里面的内容应该都能直接用上。

1. 为什么说这是 Redis 在 AI 时代的确定性补位

1.1 AI 服务的三个共性压迫点,恰好全是 Redis 的主场

这年头做个 AI 应用,不管外面包装得多花哨,拆开看基本都是三类活儿在反复跑:大模型接口调用、用户会话上下文管理、以及各种异步任务(向量化、重试、批处理)。这三类活儿都有一个共同特点——高频、小数据、需要极低延迟。而 Redis 从诞生那天起,就是为这种场景设计的。你去看任何一个上线超过一周的 AI 服务,没挂 Redis 的几乎不存在,这不是巧合,是架构上的必然。

以对话服务为例。用户每发一句话,你要把最近 N 轮历史拼进 Prompt,这个 N 轮历史如果每次都用数据库查,查询一慢,整个对话响应就跟着垮。我的习惯是把会话记忆按会话 ID 直接塞进 Redis,用 Hash 结构存每一轮的角色和内容,再加一个 expire 控制整体生命周期。现在这种场景已经不是“可选项”,而是所有对话框架的默认做法,类似 LangChain、LlamaIndex 这类框架的 Memory 模块,底层都会帮你抽象出一个 Redis 适配器。说白了,AI 应用对状态管理的需求有多硬,Redis 的补位就有多自然。

还有一个容易被忽略的点是限流。没有哪个大模型接口会允许你无限量调用,实际项目里你必须对自己服务的上游做配额控制。而 Redis 的 INCR + EXPIRE 是最经典的滑动窗口限流实现,几行命令就能挡住 90% 的突发流量问题。更不用提 AI Agent 场景下的工具调用去重、任务幂等、超时重试——这些前面都得站着一个 Redis。所以你问我为什么说“确定性补位”,我的答案很简单:AI 踩中的每一个痛点,Redis 的既有能力都能正好踩上去。

1.2 向量检索的加入,让 Redis 从“缓存”变成了“认知层”

以往大家只把 Redis 当缓存,数据快进快出,用完就丢。但最近两年 Redis 在向量检索方向的动作非常大,在 Redis Stack 和后续版本里,Redis 通过 RediSearch 模块支持了向量索引能力。这意味着你可以把文本、图片、音视频的 embedding 向量直接写进 Redis,然后在线做 KNN 搜索,用余弦相似度或内积找到最相似的向量。

这样就带来一个很有意思的架构转变:以前做 RAG,你要么买一个专门的向量数据库,要么自己用第三方库算相似度;现在你可以在 Redis 里把原始业务缓存和向量索引放同一份基础设施上。我的实际做法是,先把文档切块后用 embedding 模型转成向量,用 HASH 存向量本身,再通过 FT.CREATE 建立向量索引,查询时直接用 KNN 子句召回 TopK,整个链路省掉了跨系统传输的开销。唯一要注意的是,向量搜索是 CPU 密集操作,别把主业务和向量查询完全塞在同一个实例上,具体怎么拆,后面讲集群的时候我会提。

1.3 从技术选型看,为什么偏偏是这个时候“接入”

很多人有个误解,以为 Redis 接入 AI 是因为 AI 火所以蹭热度。我持相反观点——是 AI 应用发展到一定规模后,现有的系统根本撑不住了,而 Redis 本身就是那个最成熟的“撑腰”角色。你看 AI Agent 场景,一个 Agent 要联动多个模型、多个工具,任务要排队、要状态流转、要失败重放,这些数据天然就是轻量级、高并发、强时效。放数据库太重,放本地内存不算数,Redis 刚刚好。

再往深看一层,Redis 的发布订阅和 Stream 机制也很适合做“多模型协作”的中间通道。我在做一个多 Agent 协作系统时,就用 Redis Stream 做了消息总线:上游 Agent 把子任务写进 Stream,下游消费者按消费者组拉取,任务失败还能通过 PEL(待确认条目)机制恢复,不用引入额外的消息队列。这套东西放在两年前可能还叫“过度设计”,但现在在 AI 原生应用里已经是家常便饭了。所以说到底,不是 Redis 突然想通了要接入 AI,而是 AI 应用需要的各类在线数据能力,Redis 在十几年里早就陆陆续续都建好了,现在只是被大家重新发现而已。

2. AI 服务里最容易翻车的 Redis 用法定式:从 Key 设计到序列化

2.1 五个基础数据类型,在 AI 场景下的典型映射

很多刚入行的朋友一上来就喜欢把所有东西都用 String 塞,美其名曰“简单”,结果线上数据一多就是一锅粥。做 AI 应用时,Redis 的每种数据结构其实都有最适合的落位:

  • String:存单个对话 ID 对应的临时状态、令牌桶限流计数、模型调用返回的短小 JSON,注意控制大小。
  • Hash:存用户画像、文档元信息、会话的多轮上下文。Hash 的好处是你可以只更新其中某个字段,不必整条覆盖。
  • List:存任务队列,比如待向量化的文档 ID 队列,配合 BLPOP 做可靠性消费。
  • Set:存去重集合,比如已经处理过的请求 ID,避免重复消费。
  • ZSet:存带分数的排序数据,比如把候选片段按相关度分数排序,或用于更精细的限流与滑窗。

我在实际 AI 项目里最常用的是 Hash + ZSet 的组合。比如做推荐召回时,候选 item 的分数天然适合放 ZSet,而 item 的原始内容放 Hash,先用 ZSet 算 TopK,再回查 Hash 拿详情,两次内存操作毫秒级完成,这个组合可以应对很大一部分召回场景。

2.2 Key 命名是隐形的技术债,越早规范越好

很多 AI 项目一开始规模小,Key 命名随便写,比如直接用 userid 或者原始 Prompt 当 Key,等流量上来了才发现一堆问题。做 AI 应用我建议一上来就确立命名规范,统一的格式通常是“项目域:实体:业务键:剩余字段”,冒号分隔在 Redis 里会自动形成层级,用 Redis Desktop Manager 这类工具看的时候一目了然,更重要的是以后做按前缀扫描、按域清理能省太多事。

举几个实际使用的例子:ai:session:{userId},ai:vector:{docId},ai:limit:{model}:{userId},ai:task:queue,ai:lock:agent:{taskId}。这些前缀既是命名,也是在给未来的运维留口子。比如你想清理某天以前的所有会话,按前缀 scan 就能精准匹配,不用全库乱翻。

这里有个必须强调的实践:线上任何 Redis 命令,都尽量别用 KEYS 去匹配,而是用 SCAN 游标遍历,否则在几千万 key 的实例上执行 KEYS 会直接卡死服务。这个错误我在一次 AI 缓存清理时犯过,最后只能靠提前设置的命名规范把事故范围控制住,前缀规范救了我一命。

2.3 序列化选不对,内存直接爆炸

AI 场景里经常需要往 Redis 塞 embedding 向量、模型返回的 JSON、历史上下文,序列化方式选不好,内存会以你想象不到的速度被吃光。最常见的问题是 Java 项目里直接用 JDK 原生序列化,存出来的二进制体积是 JSON 的三倍不止,还带着一堆类名信息。跨语言场景就更明显,Python 写入的对象 Java 读不了,最后线上会逼着你换方案。

我的建议是按数据用途分档:

序列化方式体积速度跨语言适用场景
JSON中等较快好通用 KV、会话上下文
MessagePack小快较好需要省内存的业务
Protobuf最小最快需生成代码高吞吐、强类型场景
纯二进制(如向量数组)最小最快需约定格式embedding 存储

实践中最常踩的坑是向量字段的存储。很多库默认把向量序列化成 JSON 数组,几百维向量在 JSON 里是一长串数字,内存开销非常难看,而且还影响查询性能。更合理的做法是把向量直接转成字节数组 / 扁平二进制存到 Hash 字段里,配合 Redis 的向量索引模块使用。这部分其实应该是所有 RAG 项目的基础工作,但直到今天我还是能在很多项目的代码里看到直接把 Python list 往 Redis 里塞的写法。如果你也在这么做,建议尽早重构。

3. 锁、缓存与中间件:AI Agent 并发控制的三件套

3.1 为什么 AI 场景比传统业务更需要分布式锁

传统 Web 服务的并发锁多数是防超卖、防重复提交,AI 场景的锁需求更密集也更微妙。就拿大模型调用来讲,一个用户一次请求可能要触发 Agent 连续五轮工具调用,中间任意一次模型接口超时,客户端重试就会让整个链路重复运行。如果没有锁保护,会造成同样的任务被执行两次,下游产生重复消息、重复扣费,甚至把外部系统的状态搞脏。

我经历过一次真实事故:某个 Agent 任务因为网络抖动触发了双重执行,两个进程同时往数据库里写同一批记录,导致数据错乱。从那以后我就强制规定,凡是涉及外部副作用(写库、调接口、发消息)的 AI 任务,执行前必须加分布式锁,锁的 Key 就设计成任务的幂等键,比如ai:lock:task:{traceId}。基于 Redis 的 SET NX + PX 是最通用的实现,既保证原子性,又不会像传统 GET + SET 那样有竞态窗口。

3.2 锁参数的兵家必争之地:过期时间、重试与看门狗

分布式锁本身不难,难在参数。先说过期时间,太短——业务还没执行完锁就自动释放,别人趁虚而入;太长——Redis 宕机或业务卡死时,锁像一块石头堵住整个队列。我通常建议的最短有效期是你这个任务 P99 耗时的两到三倍。比如 AI Agent 一轮工具调用平均 500ms,最慢 3 秒,那把锁的有效期设到 8~10 秒是合理的起点。

再说重试机制,直接在高并发里用重试也不对,我用 Redisson 时会把waitTime设为 3~5 秒(拿不到锁愿意等多久),leaseTime若设置则必须大于业务最大耗时,如果不设置 expiry,Redisson 会启用看门狗机制自动续期,默认每 10 秒续到 30 秒。这点在 AI 任务里尤其好用,因为模型调用的响应时间很不稳定,可能出现 5 秒、10 秒甚至更长的极端值,你要是用固定 TTL 的锁,极有可能任务还没结束锁就过期了。所以做 AI 任务调度,我个人非常推荐用带看门狗自动续期的 Redisson,而不是自己裸写 SET NX。

下面是一个在实际 Spring Boot 项目里可以照抄的模板逻辑:

RLock lock = redissonClient.getLock("ai:lock:agent:" + traceId); boolean locked = false; try { locked = lock.tryLock(3, TimeUnit.SECONDS); // 最多等3秒 if (!locked) { log.warn("task {} get lock timeout", traceId); return; } // 执行业务:调用大模型、编排工具、写结果 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { if (locked && lock.isHeldByCurrentThread()) { lock.unlock(); } }

3.3 不只是锁:把 Redis 用成 AI 调用链的中间件

很多人对 Redis 中间件的理解还停留在“存缓存”,其实在 AI 服务里它更像一个轻量级的数据总线。典型做法是,把模型请求先写入 Redis List 或 Stream,再由后端 worker 按消费者组模式拉取处理,这样既削峰填谷,又能在 worker 崩溃时通过 pending 队列做恢复。我在做 AI 批量推理服务时,就用了XADD往 Stream 写任务,用XREADGROUP让多个 worker 协同消费,消费成功的任务写回结果 Hash,失败的任务通过XAUTOCLAIM转移给其他 worker 重试。

这么设计带来的好处非常直接:模型服务可以按自己的节奏消费,不用被瞬时流量打死;而前端调用方只负责写 Stream,不关心后端是单 worker 还是十个 worker,扩缩容对上游完全透明。等于用 Redis 造的这根“中间件管道”,把 AI 调用链路的耦合切断了。相比引入一套独立 MQ,Redis 在大多数规模下(单日千万级以下任务)性能完全够用,运维成本却低了一个数量级。

再补充一个容易踩的坑:用 Redis 做中间件后,一定要监控 Stream 的 pending 队列长度和 lag 值。我有一次就是没做监控,某个 worker 悄悄挂了,任务在 pending 里越积越多,等发现时已经是几十万条积压。Redis 本身没错,错在我没有给 Stream 设合理的消费者组超时策略和告警。结论很简单——凡是用了 Redis 做队列的地方,就必须配套 Lag 监控,别让隐身故障积累成雪崩。

4. 一次 Redis Command Timed Out 的完整排查链路

4.1 故障快照:从一条异常日志说起

这个话题我必须先用真实案例展开。前阵子一个 AI 服务上线后,半夜开始频繁报类似下面的错误:

org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 5 second(s)

刚看到这条日志时,团队里几个人的第一反应都是“Redis 挂了?”。于是赶紧看实例监控,结果 CPU 正常、内存正常、连接数正常,看起来一切都没毛病。这恰恰是这类问题最迷惑人的地方——从外观看 Redis 毫无问题,但命令就是超时。如果你也遇到过,别急着重启,先按链路一步步拆。

4.2 从“能 Ping 通”到“命令超时”之间,隔着一个 TCP 队列

排查第一步是确认网络连通性。用redis-cli -h {host} -p {port} ping试试,如果能秒回 PONG,说明网络和端口没问题。但注意,PING 超时不等同于所有命令都会超时,真正的排查要分层看。第二步是在 Redis 端执行redis-cli info clients和redis-cli client list,看当前连接数是不是撞到了maxclients上限;再看info stats里的latest_fork_usec是否频繁变大,如果是,可能是 RDB 持久化 fork 引发的阻塞。

但那次事故里这些指标都正常,于是我把目光转向了客户端,也就是 Lettuce 这一侧。Lettuce 本身是一个基于 Netty 的异步客户端,应用发起的每个命令都会进入 Netty 的 TCP 写队列,由 EventLoop 统一调度。如果应用侧 EventLoop 被阻塞,或者网络往返 RTT 变高,命令就会在客户端内部排队,直到超过timeout配置才抛异常。所以排查 Lettuce 超时的关键,是先回答一个问题:是命令根本没发出去,还是发出去后 Redis 没及时回?

4.3 那次真正的根因,是“慢命令”抢占了 EventLoop

顺着这个思路,我在 Redis 上用redis-cli monitor和SLOWLOG GET 20拉了一把慢命令,结果发现罪魁祸首是一批大 Key 读取。某个 AI 服务为了图省事,把一个较大的上下文对象整体塞进了一个 String Key,大小到了 10MB 级别,而且这个 Key 被好几个业务线共用。当高流量时段有请求来读这个超大 Key 时,Redis 单线程模型下需要花很长时间序列化并写出这 10MB 数据;一个两个还能扛,量一大直接把其他正常命令的响应时间拖垮。

而 Lettuce 是有连接复用的,同一个连接上的前一个慢响应还没结束,后一个命令只能在客户端等待,只要超过 5 秒,就抛出RedisCommandTimeoutException。总结下来,这次的链路是:大 Key → Redis 写超时 → 连接排队 → 客户端全面超时。Redis 看起来“无辜”,但真正的病灶就是那条巨型 String。

4.4 修复方案与三类预防手段

找到根因后修复其实不难。第一步先拆分大数据结构,把那个 10MB 的 String 改成 Hash 存储,按字段读取,同时把 300KB 以上的字段单个拎出来,避免单连接上出现巨型传输。第二步调整 Lettuce 的连接池,从默认单连接改成合理上限的LettuceConnectionFactory配置,并给 command timeout 设置一个更贴合业务的数值,例如 3 秒比 5 秒更容易暴露问题,但千万别设到几十毫秒,否则又会出现太多误报。第三步是开启慢日志告警,任何超过 200ms 的命令都要告警,把“慢查询”消灭在早期。

我下面把排查顺序整理成一个可以直接对照的表格,遇到类似问题别慌,按顺序检查就行:

排查步骤命令或指标判断标准
网络连通redis-cli ping应秒回 PONG
客户端连接数INFO clients连接数远小于 maxclients
是否有阻塞命令INFO commandstats / SLOWLOG GET 10不应有高频慢命令
内存与淘汰INFO memoryused_memory 不持续上涨
大 Key 扫描redis-cli --bigkeys不存在超大 String
客户端队列应用监控/线程 dumpNetty EventLoop 无阻塞

这里再补一句经验:看到 Redis 超时不要第一反应先重启或者清缓存,那样只会掩盖事实。先用慢日志和大 Key 扫描锁定是不是有“重量级”命令,再用连接池指标排除客户端问题,通常 80% 的诡异超时最后都落在这两个方向上。

5. AI 开发者的 Redis 落地清单:安装、运维与可视化管理

5.1 本地环境的几种安装方式,别再只会在 Linux 上玩

做 AI 项目免不了本地调试。Windows 上我建议直接到官方下载 Redis 的 Windows 版本安装包,或者用 WSL 跑apt install redis-server,两种方式都行。注意如果只是项目里拿 Redis 当会话存储,本地用默认配置够用,但如果要测试向量检索,Windows 版一定要选带 RedisSearch 模块的发行版,不然根本没发建向量索引。macOS 上最简单的是brew install redis,装完用brew services start redis后台跑起来,然后redis-cli ping验证一下就好。

提到 Docker,这算是我最推荐的开发方式,因为可以一键起一个带模块的环境。AI 团队里不同的开发要跑不同的 Redis 配置,用 Docker Compose 统一管理最省心。主从环境其实也不麻烦,关键是给主节点和从节点分别挂配置,注意从节点设置replicaof指到主节点,并且把主从的密码配置保持一致,否则从节点会一直报同步失败。我是见过太多人因为密码不一致,主从同步失败后还不知道建了一个假主从的,这个问题非常隐蔽。

5.2 可视化客户端:Redis Desktop Manager 与它的开源平替

日常开发我基本离不开可视化客户端,尤其是看 Hash 结构、查 Key 过期时间、观察内存占用时,命令行还是太费劲。老牌的 Redis Desktop Manager(RDM)功能已经很成熟,但它的开源版本停止更新后,很多人转向了它的社区分支 Another Redis Desktop Manager。后者在 Windows、macOS、Linux 都有直接下载的安装包,界面跟 RDM 很像,但新增了很多好用的功能,比如慢日志查看、命令监控、内存分析,对 AI 服务调试非常有用。

用不用可视化客户端其实是个人习惯,但我的建议是至少装一个。当你排查“某个会话 Key 为什么还在”“向量索引建没建上”这类问题时,图形界面点击几下就能看清,比在终端里手敲命令效率高太多。如果不想装桌面端,官方 RedisInsight 也是个选择,界面更现代,更适合查看 Redis 内的模块数据。

5.3 从单机到集群:AI 系统需要怎样的 Redis 部署

本地能用不代表线上能用,AI 服务的 Redis 部署至少应该考虑三件事:主从复制、持久化策略、容量规划。主从复制解决的是“单点故障”,主节点挂了可以把读流量切到从节点,但别指望主从能救数据,主从复制本质是异步同步,主节点突然宕机时会丢很小一段数据。AI 场景里,如果这些数据是会话上下文,丢一小段还能容忍;如果是任务状态,就必须靠前面讲的 Stream 消息重放来兜底。

容量规划上,因为 AI 服务的内存消耗大头除了缓存,还有向量数据,我建议给向量类和缓存类数据分实例,或者至少分 DB。同一个实例上,向量搜索的 CPU 消耗大概率会把普通缓存命令的延迟拉上去。等规模再往上走,就必须上 Redis Cluster,把数据按 slot 分散到多节点,这样既扩展了内存,也分散了 CPU。但要注意 Cluster 模式对多 Key 操作有限制,涉及跨 slot 的事务和 Lua 脚本会受限,所以在设计 Key 时就要提前让相关数据在同一个 hash tag 里,比如ai:{sessionId}:msg和ai:{sessionId}:meta都带上同一个 hash tag,才能保证它们在同一个 slot 中。

最后是缓存治理。这不是技术问题,而是管理问题:AI 模型产出的结果缓存必须设置 TTL,否则模型一旦更新,线上还在用旧结果;而会话类数据同样要设置合理的过期时间,让 Redis 及时自我清理。我一般把所有 Key 按业务域分表,梳理哪些可以短 TTL、哪些必须长 TTL,然后形成一张治理清单,每次评审时过一遍。很多“Redis 内存莫名上涨”的问题,最后查下来都是有一批忘了设 TTL 的 Key 在默默占用内存。

结尾部分

如果你现在正准备把 AI 应用往生产推,我给一个最朴素的建议:先别急着上最复杂的向量搜索和集群方案,而是花一个下午把 Redis 的 Key 规范、序列化方案、锁的参数、慢日志告警四件事想清楚。这四件事做扎实,后续无论接什么大模型、多复杂的 Agent 编排,底层都能稳稳接住;反过来,如果一上来就填了一大堆花哨的模块,却连最基本的缓存治理都没做,流量一大你就会经历我在第四部分写的那种深夜排查。

就我个人经验来说,Redis 与 AI 的结合从来不是靠哪个新特性一蹴而就,而是几十种基础能力在合适的时机被重新组合。向量搜索把 Redis 推到了聚光灯下,但真正让你线上睡个好觉的,仍然是那些过去被反复验证过的锁、队列、缓存和集群设计。这块基础设施不负责“变成 AI”,它只负责让 AI 应用在真实流量下依然稳如老狗。希望这篇整理能帮你少踩几个坑,也欢迎把你在自己的 Redis + AI 项目里遇到的那些怪问题拿出来一起聊,很多坑往往是彼此相似的。

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

手写代码高亮编辑器:textarea覆盖层与Token化实现详解

去年做内网部署的系统时,我遇到一个特别现实的需求:表单里需要内嵌一个能写配置脚本的编辑器。内网环境不能拉CDN,打包也不愿意为一个小功能引入上百KB的第三方编辑器源码,更别说CodeMirror那套theme和mode加载体系了。于是“用原…

作者头像 李华
网站建设 2026/10/3 5:18:35

具身智能技术解析:从感知到交互的AI新范式与落地实践

简介:《具身智能:人工智能的新前沿》是一份围绕具身智能研究方向的PDF白皮书,面向人工智能、机器人、机器学习、虚拟现实等领域的研究者、工程师及高年级学生。内容系统梳理了具身智能的概念内涵,从认知科学的具身认知理论、机器人…

作者头像 李华
网站建设 2026/10/3 5:17:59

Prompt注入攻击与AI应用安全:原理、实战防护与架构落地

1. 先搞清楚:Prompt注入到底是什么,为什么现在突然这么受关注聊到AI应用安全,第一个绕不开的话题就是Prompt注入攻击。我接触这个方向也有段时间了,起初很多人觉得这是"玩提示词玩出来的花活",但随着大模型应…

作者头像 李华
网站建设 2026/10/3 5:17:35

AI沙箱与全球标准:智能体安全落地的双轨信号

1. 这份“AI热点日报”不是新闻简报,而是技术决策者的信号解码器你点开这份标题为《AI 热点日报(2026-09-24):奥尔特曼安理会呼吁建全球AI标准,DeepSeek披露智能体沙箱平台DSec》的材料时,大概率正处在两种…

作者头像 李华
网站建设 2026/10/3 5:17:29

订阅服务怎么选才划算?从成本核算到避坑管理的完整指南

1. 从“最划算的订阅”聊起:为什么这个话题总能炸出一堆故事“你买过最划算的订阅服务是什么?”——这个问题往群里一扔,基本等于往油锅里泼了一瓢水。有人秒回“某云盘会员,六年老用户,平均下来一天不到两毛钱”&…

作者头像 李华
网站建设 2026/10/3 5:17:29

多Agent协作实践:从Codex到A2A协议的最小闭环

前段时间我被一个挺抽象的问题缠住:当我把同一个需求分别丢给“规划”“编码”“审查”三个 Agent 时,收到的往往是三份自说自话的答复,没有一份能拼成完整可交付的结果。真正让我想明白这件事的,是同时摸完 Codex 的命令行工作方…

作者头像 李华