一文看懂微服务世界性技术难题——分布式事务

3eef90d776d436277226e71000610c43.png

60d2a48d6bd57651583a18bec461f0fc.gif

👉目录

1 问题简述

2 分析探讨

3 事务小结

让我们聊聊微服务的老大难:分布式事务。这是个已经被无数次讨论的问题,网上文章多如牛毛。本文从业务底层视角出发,探讨分布式事务究竟难在何处,以及务实的解决之路走向何方,再加一根牛毛... 不过希望本文是比较不一样的视角,能给到读者不同的启发。

在微服务架构流行的背景下,分布式事务的文章多如牛毛,虽然很多将事务一致性与副本一致性混为一谈,也仍不可否认其中相当一部分文章、开源代码,也还是不错的。

然而当你跃跃欲试,期待将业界所谓成熟方案落地,可能很快就会发现现实的骨感 —— 对于大量互联网业务,尤其是在大并发、大量使用 nosql 数据库的微服务架构下,很难落地。

01

问题简述

分布式事务,即在分布式环境下,对于同一个事务下的几件事情,要么一起完成,要么就和什么都没发生一样。也就是我们一般最关注的,是 ACID 中 的 A,因为拆分了服务之后,每一步远程 RPC 都可能故障。

例如张三给李四转账,张三的钱扣了,李四的钱加了,这两件事情,显然就应该一起完成,或者就都没做。

注意这里不要发散到 Paxos、Raft 等一致性协议上去,因为他们的领域本来就不同。

Paxos 针对的是多个节点重复做相同的一件事情,主要处理的是多副本之间的一致性:

节点1完成任务1
节点2完成任务1
节点3完成任务1

分布式事务则显然不同,它针对的是有几个不同的任务,要捆绑一起完成或失败,重点在整体的原子性:

节点1完成任务1
节点1完成任务2
节点1完成任务3

02

分析探讨

   2.1 超时的难题

这里开门见山,让我们不妨抛开具体的分析过程,直击问题要害,那就是 —— 超时的处理。

明确的成功 / 失败都好说,但是超时呢,有可能成功了,也有可能没成功。在大量现实场景下,只有明确地知道 A 和 B 的真实执行情况,才能采取对应的后续措施,这点比较显而易见,此处不做展开。

那我们要怎么知道 A 和 B 的真实执行情况呢?“立字据” 成了必然的选择,也就是应该要能对账反查。

   2.2 对账反查能力

A 和 B 这两件事,是关联到一个事务的,这就要求,要有一个唯一事务 ID(这个 ID 还可以绑定一些其他附属信息),我们可以通过这个 ID 来做对账。如果能对账,那么幂等也会顺利成章就支持了。

唯一的事务 ID 生成很简单,如何通过这个 ID 来对账才是关键所在。

为了安全可靠,我们必须使用落地的信息来 “立字据”,ID 要体现在落地的数据中,这样我们就可以事后查询相关数据得知真正执行的情况,从而可以继续将事务推进下去。

接下来我们看不同情况下,落地信息具体如何记录。

   2.3 通过本地日志落地

采用进程本地打日志的方式落地,可以配合网盘或者可靠日志采集等方式做集中化收集处理,这种做法其实也只能从事务角度记录一些信息,至于业务数据本身是否明确修改 ok,在 DB timeout 时并不得而知,需要通过 WAL 日志冗余多记录一些东西(DB 修改前后的预期值都可以记录),这样无论 DB 操作成功与否,在一定的前提下,也能继续推进处理(例如以锁定用户为前提,可以再将 db 数据查回来做核对,就知道是否操作 ok 了,更多讨论参考本章第 9 小节)。

   2.4 SQL 存储的落地反查

SQL 存储通常可以基于 “本地事务” 来做反查,类似 seata 之类的解决方案,建个 undo log 表,操作业务数据库表 sql 的同时,会拦截绑定同库内 undo log 表的 sql 插入,一起作为一个本地事务来提交。也就是业务 sql 与 undo log 表的 sql,能通过本地事务进行关联,保证一起成功和失败,这样通过反查 undo log 表,即可得知超时的 sql 到底是否执行成功了。

开启本地事务
  add 业务sql:具体业务逻辑对应的 sql
  add undolog 表sql:insert 一条 undo log,key 包含事务 ID // 基于该表反查
提交本地事务

   2.5 NoSQL 存储的落地反查

NoSQL 存储不一定有本地事务能力,如果支持本地事务的话,那和 sql 差不多,绑定批量操作做事务就好了(redis 有支持,如果对一致性要求不是很苛刻,或许凑合能用)。

如果不支持的话,这里提供两种对账的思路:

  1. 通过落地日志的方式,将 ID 和操作结果体现到流水日志中,然后通过准实时的接口支持查日志来判断真正执行的情况。这种做法,侵入了存储访问的 API,写请求都带上 ID,且需要存储服务支持流水查询,自研的 kv 存储可以考虑该方案。

  2. 直接将 ID 附着在存储记录里,例如 NoSQL 的 value 里面加一个事务 ID 数组(然后按大小滚动,条数上限够用就行),写操作会留下 ID 的 “痕迹”。这种做法,侵入了业务表结构,表本身要挂这么一个数组。用 proto 描述示例如下:

// 业务表示例
message ServiceTable{
  repeated string txids = 1; // 事务 id 数组,按一定 size 滚存
  int32 field1 = 2;
  int32 field2 = 3;
  int32 field3 = 4;
  int32 field4 = 5;
  // ...
}

上述这两种做法,显然都谈不上优雅,但这样也算是能建立基本的对账能力,尤其值得一提的是方案 2),理论上适用于所有类型的 kv 存储。

   2.6 外部接口

如果分布式事务还关联了外部接口调用,那外部接口的超时,则需要依赖合作方提供对账、幂等能力。

   2.7 微服务典型复杂场景

对于典型复杂的微服务场景,这里举例说明:

事务开启
  任务1:改数据 A // sql 存储
  任务2:改数据 B // nosql 存储
  任务3:调用系统内服务接口 C // -- 被调服务可能是类似情况
  任务4:调用外部门服务接口 D
事务结束

假如我们通过一些手段,使得底层事务原子任务终于支持了对账反查能力,采用哪种应用层的事务方案,依然要三思。小规模业务或许本来对吞吐没啥要求,可以积极尝试。但大规模业务,请求量大,数据复杂,事务底层涉及到的底层数据资源一排列组合,情况就非常复杂了,例如:

// A B C D 四种数据
并行事务一:改 A B C
并行事务二:改 B D
并行事务三:改 B A
并行事务四:改 C D

不难想象,这里事务锁怎么加都是个问题,如果一把大锁,吞吐显然受限,如果细粒度锁,那该如何设计对应的粒度?所以对于大规模业务,可能得特事特办,例如仅仅是 cover 一下真的有强烈事务诉求的场景,其他场景下就直接有损处理。对应上述伪码,可能只有事务一继续是事务,其他三个就干脆不作为事务了。还有锁的时效性问题,以及是否存在并发锁,并发锁要不要和事务锁用同一把锁,都要考虑。

   2.8 为什么 DB 层能做而业务不好做

前面说了做好分布式事务的一些难处和前置条件,了解 NewSQL 的读者可能会有这样的疑问:TDSQL、TiDB 他们不都已经号称支持了跨库跨表的分布式事务了么,凭什么他们数据库系统能做,怎么我们业务层反而为难了,不是总说数据库才是高精尖么,他们不是应该更难么?是啊,凭什么?

这里的关键在于,数据库系统将跨表事务这个问题收拢到它内部了,关进了它自己的笼子里,然后它自己基于 XA 或其他协议,结合 MVCC 事务锁之类的机制,就可以解决好这个问题。

而在业务层面,潜在的参与方耦合面实在是太广了,无法简单收拢,同一个数据的变更触发源太多了,很难参考 DB 层的解决方案。可能有读者会认为,对于一个具体的数据表,最终将写入操作也只收拢到一个点,确实如此,但是我们关注点并不仅仅在这个点,而是在上层的事务。例如 SvrA 管理了数据表 A,但是 SvrB、SvrC、SvrD 都可以通过 RPC 接口来调用 SvrA 进行数据表 A 的修改,还可以存在级联的情况,例如 SvrE 先调用 RPC 访问 SvrB,然后再由 SvrB 发起 RPC 调用 SvrA 做了数据表 A 的修改。

SvrE ---|
       SvrB----\
       SvrC--- SvrA 数据表A
       SvrD----/

为了努力在业务层面解决事务问题,我们只好又祭出万能大法,加一层或多层抽象,这也正是目前大量上层应用解决方案做的:

  • 增加外在的事务存储(主 key 为事务 ID,记录事务的参与方、进度、子事务等信息)。

  • 要求事务参与方遵循某些约束(如本地事务 / 对账能力),调用特定的一些 API 将事务信息进行上报关联。

  • 引入事务协调者,由它来根据参与方上报的信息做一些事务的驱动逻辑。

具体执行的话,可能还要考虑事务锁的具体实现策略(时效、粒度、与并发锁的关系等),于是问题就会变得更加复杂。

   2.9 那牺牲一点可用性呢

前面已经提到,存储层支持对账反查,是分布式事务得以应用的基本前提,那万一存储层就是不好支持对账呢,还能怎么办?

在做分布式系统设计的时候,有个 trick:一致性与可用性之间,有时是可以做置换的,当想要保障一致性的时候,实在没办法,可以想想是否能用一些可用性来置换,反之亦然。

那么我们在产生 timeout 类悬而未决异常的时候,可以牺牲一点可用性来加强事务的一致性保障么,粗想确实是可以的。例如 TCC 方案,try 已经都 ok 了,到了 confirm commit 阶段,有一个参与者其实并没有及时完成 commit 提交,它超时了。通过事务锁,限制事务所涉及用户的数据操作,在 try 阶段加好锁,直到这个悬而未决的事务完整执行完再释放即可。这里对用户加锁,本质上就是牺牲可用性的做法,解锁之前,其他写该用户数据的请求都处理不了。

try 阶段 lock 好
confirm commit... 直至确定 ok 为止
明确完成后才 unlock

假如任由未 confirm 的数据继续提供写接口,则可能导致 confirm 时违反 try ok 的条件(例如字段 A 符合一定条件),那不锁定的话,在重试 confirm 的时候有可能字段 A 都已经被改写得不符合条件了,导致 confirm 实质上失败。

有些特殊场合下,还可以不加锁。例如对于金融转账而言,TCC 还有一种预留冻结金额的做法,就可以不加锁,但这显然和业务强相关,在很多业务场景下并不是一个简单的整数字段操作,常常无法 “预留资源” ,不具普适性。

简而言之,就是要对事务关联的用户,规定一个明确的执行序列(confirm、cancel 都可以),只要事务参与者活着,最终就一定会执行完毕。同时这里要遵循可用性约束,就是该事务关联用户在完成相关执行序列之前,不能放开别的请求修改对应的数据,否则可能会破坏数据一致性,即要锁住用户直至完成事务。

我们再补充考虑下 crash-safe 以及 restart-safe,为了能可靠的按执行序列推进,显然还需要考虑 WAL 日志(如果重启有节点漂移,得用网盘),以及重启后基于 WAL 的逻辑检查和运行,而且这些其实都是很侵入代码的工作。此外如果事务框架还想做一些重试,事务协调者让事务参与者重试 commit,那相关数据的操作逻辑得有幂等能力。还需要指出的是,在分布式环境下,可能出现参与者没收到 try 就收到了 cancel(空回滚),或者收到了 cancel 之后才收到了 try(悬挂)的情况,也都需要处理,也就是无论收到 try 还是 cancel,都得先检查一下相关事务的本地执行情况。

综上来看,这样做确实不一定要求 DB 层支持对账,但必然要考虑锁、WAL、幂等之类的问题,因此想要正确严谨地实现事务也并非易事,换言之,做是能做的,但要考虑细致,然后因为比较侵入,代码复用性可能也不佳。如果不是很重要的业务场合,用上之后性价比不高,且任何机制叠加,还不可避免会带来一些新的依赖和异常,维护成本也会增加。

   2.10 特定场景下的简易实现

有些业务场景,对事务隔离性没什么要求,不必加锁,最终一致即可,对时效性也要求不高,同时也能从数据本身的最新值体现出操作是否已成功(例如设置 vip,查回来发现还没设置好就是没成功的),那么此时还是有相对简单的解决方案的。

这类场景下,恰巧是天然的可反查、有幂等,例如对于设置 vip 这步而言:

  • 反查:直接查回来数据看下是否已经 vip 了,就知道执行的结果。

  • 幂等:重新设置很多次 vip 效果也依然一样是个 vip。

具体细节此处就不再更多展开,无非就是结合反查持续重试直至成功即可。除了上面举例的场景,也还会有各种其他的业务场景,都是可能采用折中有损方案应对解决的,但因为太业务相关,不具普适意义,这里不再发散。

03

事务小结

   3.1 分布式事务的关键

  • 要有个唯一的事务 ID,否则无法将各个子任务进行关联。

  • 通常要基于事务 ID 实现幂等或对账,否则 timeout 没法正确处理,也无法安全重试。

  • 一致性要求高的场景,会有对资源做锁定或预留的做法,最终一致性要求的场景,则只要最终符合预期即可。基于对资源要求的不同,会有一些常见的解决方案,例如多阶段协商提交、TCC、事务消息等。

现有的各种框架级别的解决方案,一般也就是:

  • 创建事务,主 key 不必多说,肯定是事务 ID 了,然后关联一些事务信息的存储。

  • 由协调者负责跟踪推进完整个事务。

  • 各参与者遵从一定的规范约束,以幂等、对账能力为基础,实现相应的 API。

对于锁不锁,锁的粒度和时效性,是否能预留资源,则需要具体问题具体分析。这里提一种相对不侵入的解决方案 —— 异步对账补偿,参与者将事务信息汇报给协调者之后,就不再紧耦合,协调者可以自己独立旁路慢慢跑对账,然后按需 callback 回调业务进行补偿处理,当然其适用场景也是有限的。

   3.2 基于事务 ID 的幂等或对账能力

如果没有相关能力,盲目引进事务上层应用解决方案,只会让系统更加复杂,而并没有解决实际问题。

  • 如果是 nosql 存储,可在 kv 的 value 结构中增加事务 ID 数组留痕来实现对账。

  • 如果是 sql 存储,就要看 sql 服务方有没有提供基本的本地事务能力,如果是大规模 sql 存储,还要确定好 sharding 策略。

  • 如果是外部接口,那就得外部接口支持相关能力。

如果真的明确存储层无法对账,还是想基于 TCC 之类的方式去做,那务必小心谨慎,具体细节已于前一章的第 9 小节阐释过。

   3.3 使用分布式事务的前置工作

  • 明确各个任务原子的幂等、对账能力。

  • 明确需要采用怎样的事务锁机制(还要同时考虑并发、吞吐等要素)。

  • 明确业务本身对一致性的要求程度,是否可接受有损实现,进程优雅退出、故障重启是否要考虑残留事务的处理。

  • 充分选型,优先考虑低侵入性的解决方案。

   3.4 结论

虽然前文花了很大的篇幅,论述了分布式事务处理的复杂性 —— 有时着实复杂到让人想要放弃,或许考虑做点异步对账补偿就是最经济实惠的解决方案。但如果业务场景真的需要,大家还是从实际出发,该用就用。

那些广为流传的方案能不能用呢,答案是看情况,只要场景匹配就行,但是在使用的时候,一定要清楚其背后的机制,明确其可能对吞吐带来的影响,并遵循好必要的约定或规范。至于是否必要引入第三方的事务框架,也要具体情况具体分析,只要评估引入后确有价值,同时成本也能承受即可。

总而言之,具体业务能不能使用分布式事务,以及使用什么样的解决方案,可以参考本文做充分的分析,实事求是,因地制宜。而好不好做(问题本身的难度复杂度),需不需要做(业务本身的核心诉求),想不想做(技术人员的主观意愿),始终是几个不同层面的问题。

-End-

原创作者|吴连火

5b324b4c54bbb4637fc8b9462ece9e05.png

你平常是怎么做分布式事务工作的,有没有哪些好的经验可以分享?欢迎评论留言。我们将选取1则评论,送出腾讯云开发者定制眼罩1个(见下图)。7月1日中午12点开奖。

e30b53c82c18b493c64851cbdf75b99f.png

📢📢欢迎加入腾讯云开发者社群,享前沿资讯、大咖干货,找兴趣搭子,交同城好友,更有鹅厂招聘机会、限量周边好礼等你来~

497c9b28b0ab3987f3a00bc6677a25be.jpeg

(长按图片立即扫码)

3cdd4cd8cb06ddefa13f76f4df04da29.png

2fa9050663b62fd1bd6a4dccd6ae472f.png

87f027d862f8aca7de37b510d3ba5cea.png

aa9b403540f06d4722412889381f7164.png

d4b7063aba1275b96aa8c14c2f7d868f.png

相关推荐

大模型的Agent Skill功能,在LLM HTTP底层交互流中是怎么承载的?

网络文章文本的 skill,昨天我实现了之后也就开始好奇起 Skills 的底层原理了——相比起各种花里胡哨的 agrnt 应用,我一直以来都很对大模型在纯粹的 HTTP 交互层面是如何交互的更感兴趣。Skill 的全部"魔法"都发生在 system prompt 的措辞和 SKILL.md 文件的编写质量上——本质上是一种 prompt engineering + 文件系统的组合。但是各种天花乱坠的 skills,是如何在底层的 HTTP 中,与大模型——这个只会嘴遁的工具交互的呢?

QcloudCommunity的博客 403

万字入门AI Infra:深入理解大模型中的数学与Infra优化

关注腾讯云开发者,一手技术干货提前解锁👇AI Infra科普、入门或者进阶 ~~ 不到 5 万字,带你融会贯通理解大模型的数学、算法、硬件到系统工程。任何问题欢迎沟通交流。可怕,我竟然有点认同这句话。当然大概率是因为姚顺宇太懂AI了,而我则是因为无知者无畏。不过仔细想想,大模型推理中的数学逻辑确实不复杂,很多原理只需要高中数学知识就能看懂。但是为什么像 vLLM 这种推理系统这么复杂呢?本文将拆解大模型中几个核心操作(RMSNorm、Softmax、Causal Mask、Sampling)背后的数学与

QcloudCommunity的博客 1162

平平无奇的源码,竟藏着Agent的核心秘密?

System Prompt 是剧本,Skill 是剧本的扩展包,Agent Loop 是演员按剧本行动。欢迎留言,我们将邀请作者针对性回复你的评论,我们将选取1则优质的评论,送出腾讯云定制文件袋套装。,让 Agent 能主动"巡逻",而不只是被动等待用户消息。OpenClaw 的 System Prompt 分层结构。的"行为底线",任何 Skill 或用户命令都无法覆盖它。精华 2:Skill 的"按需加载"避免 token 浪费。精华 1:System Prompt 是"分层乐高积木"

QcloudCommunity的博客 424

QQ音乐Harness Engineering实践

一个看似简单的需求,背后可能牵动服务调用链、配置、灰度、埋点、错误码、接口契约和历史兼容性。当 AI 开始快速生成大量代码,真正的瓶颈就不再是"写不出来",而是"看不完、想不清、管不住"。在对话式编码阶段,一种典型的工作模式逐渐流行:开发者把需求丢给 AI,扫一眼输出"看起来对"就直接采纳,不审 diff、不追问逻辑、不验证边界。以音乐商业化业务为例,一个需求可能从 TAPD 单开始,经过需求评审、技术方案、服务影响面分析、IDL 契约变更、业务代码实现、测试验证、CR、灰度上线,最后才进入稳定运行。

QcloudCommunity的博客 713

从Prompt、Context到Harness,工程的三次进化与终局之战

同时,强制要求散落各处的决策记录(Slack、邮件、文档)全部迁移至代码仓库,确保 Agent 的唯一信息来源是可信的、版本受控的仓库。更坑爹的是,研究表明,当上下文过长时,模型会出现"中间遗忘(Lost in the Middle)"现象:它对开头和结尾的内容记忆较好,对中间大段内容的关注度大幅下降。这篇文章,我想带你完整走一遍这三次进化的逻辑:它们分别解决了什么问题,它们之间是什么关系,它们的边界在哪里,以及:当三者融合,AI 工程师的终极形态究竟是什么?大语言模型的本质,就是这位金鱼助理。

QcloudCommunity的博客 715

让Skill自己训练自己:8阶段Loop、3层评测、5维AND门控,从此实现自进化

所以每一轮改动都是有据可查的,不是「感觉这里可以优化」,而是「Case 41 挂了,因为 agent 把离职问题路由到了邮箱分类,但正确答案在通讯录,所以我改 root_index.md 加个易混淆提示」。但让我最后决定把它记录下来的,不是这的个「吸收」过程,而是它真的在替我探索我不想费脑力触达的边界,这看起来更像是一个机器智能应该有的样子。不准跨层,每轮只改一层的东西。但我经过这 19 轮之后觉得,更准确的描述是互补——你在明处看着,AI 在暗处替你试错,你看不见的那一半就是 AI 能贡献的地方。

QcloudCommunity的博客 1125

只加两行代码,为什么要两天?一文深度理解业务系统的复杂性

关注腾讯云开发者,一手技术干货提前解锁👇业务系统复杂性一直是令开发者头痛的问题。复杂的不是增加一个需求需要耗费多少时间,而是在增加一个需求后带来的蝴蝶效应:其它功能会不会受到影响、要如何去找到这些影响,最终如何实现系统正常运行......功能之间隐秘增加的耦合、不可避免的代码腐化在导致业务复杂性增加。大家都在说的软件开发提效到底在提什么?程序员日常工作中应该如何提升开发效率?敏捷开发、瀑布流式开发孰是孰非?欢迎阅读。业务背景与目标我依然非常清晰地记得某个时候,我所在团队 Leader 曾讲过一段话:“我担

QcloudCommunity的博客 710

从零设计生产级 Multi-Agent Harness:架构、评估、记忆、成本与 MCP 工具接入全拆解

在 AI Agent 领域,Multi-Agent Harness 指的是把多个 Agent 的能力、工具、状态、通信、编排、监控统一收束在一个运行时之内的框架。第三,Agent 路由。一个输入框,一个大模型,几个工具,一段写得很漂亮的 System Prompt,再配上一个炫酷的前端,看起来就像一个能干活的“数字员工”。Multi-Agent 完全不一样——它有计划、有中间步骤、有工具调用、有 Agent 协作、有重试、有反思、有最终合成。增加 Budget、权限、重试、压缩、轨迹评估、审计、回归测试。

QcloudCommunity的博客 707

拆完Hermes源码,我发现Agent的“自我进化“根本不需要训练模型

两个月 5.2 万 Star,Hermes Agent 用一个"LLM 审判官"机制实现了 Agent 的自我进化——不改模型权重,只改"怎么用模型"的策略。OpenClaw(社区昵称"龙虾"🦞)是 2025-2026 年最火的开源 Agent 框架,30 万+ Star,插件市场 ClawHub 里有数千个插件,能接入 Telegram、WhatsApp、Slack、飞书、企业微信——几乎是一个"个人 AI 操作系统"。Skill 是英语写的,Memory 是英语写的,审查 Prompt 也是英语写的。

QcloudCommunity的博客 905

AI Infra 其实没有多少新东西

传统 Infra 追求横向扩展,而 AI Infra 呈现 “AI 大型机”特性,是因为传统后台服务的可以容忍毫秒级延迟,但 AI 集群不行,GPU 的算力是 CPU 的数百倍,微秒级的延时等待也会造成很大的算力损耗,需要硬件的高度集成。在可预见的1-3年的未来,这样的专用硬件+网络的集中式架构很难发生比较大的改变。与之相似,模型推理的批处理就是将多个输入样本打包(batch),将原本串行的 N 次轻量的推理计算,合并为 1 次重量的计算,实现单位时间内处理更多的请求,提高了 GPU 利用率。

QcloudCommunity的博客 821

程序员越早想通这些越好

永远没有正确架构,你永远无法偿还完所有的技术债务,如同你永远不会设计出完美的界面,请避开完美主义的陷阱,永远没有完美的代码,能够满足当前需求,又为未来不管是自己还是他人留有扩展空间,就很好了。我们努力的方向就是将现实世界映射到有限的数据结构中,这就需要用户自定义类型,如果你的代码中包含类似 trader portfolio 这样的概念,你就可以使用他们的名称来建模,而不是使用基本数据类型复杂嵌套表述你的目的。从另一个角度看,代码里的注释都是补丁,是碎片化的,局部的注释很难推导模块整体的顺序及耦合关系。

QcloudCommunity的博客 464

RAG已死?不,是Grep回归了!

这样一来可以直接复用已有的计算缓存,只为新增的增量部分付全价,前面累积的大头按约 1/10 的缓存价计费。所以实际的工具组合方式是灵活的:Grep(默认模式)→ Read 是最常见的路径,但 Grep(content 模式)可以独立使用,LLM 也可以直接调 Read(如果已经知道文件路径),或者一次同时发起多个 Grep 并行搜索。它从零开始构建自己的对话历史,不继承主对话的消息,这意味着它搜索过程中产生的大量 grep 结果、代码片段都留在自己的 context 里,主对话只收到一段总结性的文本结论。

QcloudCommunity的博客 574

深入浅出Harness Engineerring之核心模式与理念

在智能体生命周期的关键节点(如会话开始、工具调用后)自动触发预设动作(如代码格式化),由系统确保关键流程被执行,不依赖可能被模型遗忘的指令。简单讲就是利用向量存储这个技术,来实现模糊检索,原理是:即使字面不同,但语义相近的文本,其向量在数学空间中的位置也很接近。根据命令类型、参数和影响,自动评估其风险等级(安全、有风险、危险),并采取自动执行、请求确认或直接拦截等不同策略。关键特性是可隔离、可重建、可扩展。不是一次判断就定终身,允许你改变、允许情况复杂,通过不断观察、思考、调整,越来越懂真实的你。

QcloudCommunity的博客 621

Harness Engineering实践心得:如何高效驾驭AI?

但如果这些经验被拆成一条条 Rule、一个个 Skill、一项项 Script 检查——"XAML 不能有中文"、"编译要用这个路径的 MSBuild"、"SVN 命令必须带认证参数"——AI 就能在秒级时间里"吸收"十年的踩坑经验。然后可以看到下方的图,我的PM会很顺利的调度其他agent分别负责不同的事项,遇到问题的时候也能准确的找到合适的agent。MCP 本质上是在扩展 AI 的"感知范围"——Rule 管"该怎么做",Skill 管"怎么操作",MCP 管"能看到什么、能碰到什么"。

QcloudCommunity的博客 838

从第一性原理思考 Agentic Engineering

需要注意的是,这一结论是有条件的:如果 AI 缺乏领域知识,过早介入反而可能引入 1.2 节所述的"似是而非"损耗——因此上下文供给(实践 1)是 AI 全链条参与的前提,而非结果。通过一个专门的自迭代 Skill 实现——当 AI 在协作过程中识别到自己被纠正(用户否定了 AI 的输出并给出了正确方向),它自动评估这个错误的根因,搜索现有的 Rules 和 Skills 中是否已有针对该类问题的处理规则。事实上,越是复杂的项目,工程师的认知负担越重(公理 3),AI 分担认知负担的潜在边际价值也越大。

QcloudCommunity的博客 756

万字干货!Harness Engineering如何工程化落地?

关注腾讯云开发者,一手技术干货提前解锁👇Harness Engineering 的概念已经火了有一阵了,全网很多文章基本都是在讲理念,讲为什么今天做 AI 开发,不能只靠一段提示词,也不能把模型当一个“更聪明的代码补全”。但与此同时,一个问题也在持续地发酵:这个问题特别重要。因为 Harness 这个词听上去很大,很像一个抽象的方法论,但它如果不能落到工程、目录、文档、脚本、工作流里,那它最后就只是一句漂亮的话。事实上,不同项目落地出来的 Harness,表面上可能完全不一样。有的项目是 CI 很强,有的

QcloudCommunity的博客 1161

全方位对比:Hermes VS OpenClaw

多账号矩阵运营 如果你的业务涉及同时管理多个社交媒体账号、多个平台的内容分发、多渠道的客户互动——OpenClaw是目前市场上的"无可替代的底座"。一个有专业背景的个人,现在可以快速构建一个垂直领域的AI助手:比如"财务分析Hermes"、"法律咨询Hermes"、"技术架构Hermes",直接通过微信提供服务,积累自己的专业IP。跨平台生态融合 如果你的工作流涉及飞书、Slack、Discord等多个平台的深度集成,需要这些平台之间的数据流转和联动——OpenClaw的生态支持是强大的。

QcloudCommunity的博客 1217

一文讲透:Harness Engineering即控制论!

而研发模式的升级我认为将会是一个飞跃的过程,之所以现在我们仍然需要需要参与编码,一个非常大的原因就是缺乏传感器和基建,仍然需要人来串流程,比如需要人来验证UI是否正确、需要人来告诉AI代码不符合代码规范,因此在有些场景我们仍然感觉 AI 完成的很吃力,但这不是 AI 能力不行,而是我们并没有为 AI 提供友好的环境……控制论中的突变理论介绍了矫枉过正和飞跃现象之间的矛盾,如果质变中经历的中间过渡态是不稳定的,那么他就是一个飞跃的过程,如果中间过渡态是稳定的,那么他就是一个渐变的过程。但是这些阶段要解决的。

QcloudCommunity的博客 1202

神级开源插件!一句话让QClaw变3D小镇,Agent工作可视化,赛博云监工

这个架构是翻了几次车才想通的—原有AI的实现机制是用 setTimeout 猜动画时长导致了幽灵 NPC、工位撞车、越改越崩,后面我停下来换了思路,推翻原有的架构,按照“意图+回传”的架构进行重构,之前的问题一次性全部解决。15 天,我和 AI 吵了 185 次架, 4.5 万行代码,开发了一款 QClaw / OpenClaw 的UGC游戏插件,这可能是人类跟 Agents 交互的新范式,插件已完全开源,有需要的欢迎自取~我天天用,用着用着我就在思考,Agent 产品现在的交互体验,基本都一个样。

QcloudCommunity的博客 1195

一文搞懂Hermes:新顶流Agent如何从经验中自我进化

Voyager 是一个能在 Minecraft 中自主探索、学习技能、无限积累能力的 AI Agent,它提出了 "Skill Library"(技能库)的概念——Agent 将成功的行为序列编码为可复用的技能函数,存储在一个持续增长的代码库中。如果 Skill 的名称和描述不够精准,或者用户的任务描述与 Skill 的触发条件有语义差距,Agent 可能会错过相关的 Skill。如果进程在写入过程中崩溃,目标文件要么是旧内容(还没被替换),要么是新内容(替换已完成),绝不会出现写了一半的损坏文件。

QcloudCommunity的博客 2631

自掏腰包一万元,拥抱AI这一年,我的工具、实践和思考

其实也很好理解,过往的每个领域(比如前端、后端、设计、测试等等)都主要是这个领域的从业者在为它添砖加瓦,但是大模型时代的 AI 应用领域却几乎是所有使用 AI 的人类一起在迭代,无分领域,无分文理,无分老少。因为每个时期的 AI 都有着不同的特点,很多时候当我费尽心思去钻研,自以为有点弄明白 AI 应该怎么玩的时候,基座模型和行业范式常常就会迎来颠覆式的变革,很多过往的经验都会倾覆,然后只能从头再来。过去一年多,被热议的 AI 范式大概是沿着四个阶段递进演化,每一个阶段其实都在解决前一个阶段的核心问题。

QcloudCommunity的博客 626

办公Agent的CI/CD时刻到来了

核心观点是:企业给员工配了一堆 AI 工具,试点跑了几百个,但真正拖慢 AI 转型速度的瓶颈不在模型能力,在"最后一公里":AI 输出和实际工作流之间的那道鸿沟。代码写完,打个 tar 包,开 FTP 传到服务器上,SSH 进去解压,改配置文件,重启服务,刷一下页面祈祷别 500。你复制,切窗口,粘贴到腾讯文档里,发现 Markdown 格式全乱了,手动调标题层级,代码块重新标记语言类型,表格散架了重排一遍。模型是越来越聪明了,但"生成"到"落地"之间那段路,还是你自己在走,一步一步,手动搬运。

QcloudCommunity的博客 607

4亿token买来5个教训:让6个AI Agent连写4天代码发生了什么?

Watchdog 检测到崩溃 → 启动诊断 Agent 分析原因 → 诊断 Agent 跑满 20 轮没搞定 → Watchdog 判定“已修复”,重启系统 → 重启的系统因为诊断 Agent 留下的环境变量被继承,连续 3 次拒绝启动 → 触发连续失败保护退出 → Watchdog 第 3 次巡检,发现进程和记录文件都没了,尝试手动重启,自己也停了。启动前我翻了论文、做了架构设计、写了监控+修复异常的脚本。这个发现让我的情绪从沮丧变成了兴奋——不是那种"终于修好了"的释然,是"我找到根因了"的快感。

QcloudCommunity的博客 584

赛博斗蛐蛐:9大模型决战三国志,天命在谁?

我猜是这样的,当Gemini面临决策的时候,一系列关键词比如 守城,劣势,粮草,三国等等,在语义层面的关联性中LLM发现了竖壁清野这个关键词概率非常高,所以以此为策略,然后再根据这个策略完美执行操作。MiMo 的外交是三方中最精明的。Kimi作为国产模型,也同样颠覆了我对他的看法,最后的比赛他甚至一度是优势者,存在很多夺冠的可能性,要知道他的对手可是claude和gemini,而他经常出兵慢,回过头来想想或许正是他的策略,毕竟中后期他的优势都来自于稳健的发展和较少的战斗频率(和claude比).

QcloudCommunity的博客 873

Claude Code是怎么知道你在骂他的?这 12 条发现值得关注

确实存在——5,500+ 行,集成了消息队列、工具装配、MCP 编排、会话状态、权限、分析、文件持久化和优雅关闭,基本上一个文件干了所有事。对抗虚假声明——"不要在输出显示失败时声称所有测试通过,不要压缩或简化失败的检查来制造绿色结果"。完整的 KAIROS 是一个持续驻留的守护进程,能感知你在不在电脑前、主动寻找有用的工作做,更像是住在终端里的全职同事。源码里藏着一个叫 "Buddy" 的电子宠物系统,完整度令人惊讶——这不是一个 TODO,而是一个从数值系统到 ASCII 动画都实现了的完整功能。

QcloudCommunity的博客 701

逆向深扒Claude Code源码,我发现了什么!?

Anthropic 内部用户获得更严格的质量控制 prompt、更好的验证机制(独立 Verification Agent)、以及针对 model 弱点的专门对策(如 Capybara v8 的 29-30% 错误声明率对策)。这不是代码混乱的标志——它是整个 Agent Loop 的心脏,所有的流式处理、工具调度、上下文压缩、子代理管理都在这个文件中协调。这种"胖核心"设计是刻意的:保持核心循环的原子性,避免分散到多个模块导致的协调复杂度。核心价值:Fork 代理的工具输出不会回到主代理的上下文窗口。

QcloudCommunity的博客 889

一文讲透如何构建Harness——六大组件全解析

本文将从"裸模型的四个硬伤"出发,逐一拆解 Harness 的六大组件——文件系统、Bash + 沙箱、记忆(AGENTS.md)、Web Search + MCP、上下文工程、编排 + Hooks——带你看清 AI Agent 真正的竞争壁垒,不在模型层,而在 Harness 层。如果你用过 Agent 做复杂任务,你一定有过这样的体验:一开始 Agent 的表现很好,但随着对话变长,它开始"变笨"——遗忘之前的约定,重复之前犯过的错误,甚至对同一个问题给出前后矛盾的回答。对于简单的问答场景,这无所谓。

QcloudCommunity的博客 760

Harness Engineering 来了,SDD 还有意义吗?

他们的解法是把「品味」编码进规则,然后用一个定期运行的「doc-gardening」Agent 自动扫描漂移、发起修复 PR——「技术债务就像一笔高息贷款,不断地以小额贷款的方式偿还,总比让债务不断累积要好」。代码仓库本地的、已版本化的工件,才是 Agent 所能看到的全部。在 Vibe Coding 模式下(即不做规划、随意向 AI 提需求的开发方式),大量设计决策、跨服务约定、「为什么不选另一个方案」的讨论,全部停留在一次性的 AI 对话里——下一个人,或者下一次 AI 会话,完全无从获取。

QcloudCommunity的博客 418

零废话!一文讲透从0构建AI Agent

每个工具都要写一套"定义→解析→执行"的胶水代码。上下文管理就是在"记住足够多"和"别超标"之间找平衡,常见策略包括滑动窗口、摘要压缩、RAG 检索增强。上下文窗口是 Agent 的"工作记忆",但它有硬性限制。LLM 负责"动脑"决策,代码负责"动手"执行。这是从"聊天机器人"进化到"Agent"的关键一步。每次调 API 都把完整对话历史发过去,LLM 本身是无状态的,"记忆"完全靠客户端的数组模拟。这样 Agent 一开始就知道自己"在哪里"、"手头有什么",不需要先花一轮工具调用去探索环境。

QcloudCommunity的博客 711

距离AI把小编我裁掉还有72小时

这是一个基于 OpenClaw 开源生态打造的本地化 AI Agent 助手,已于上周开启全量公测,无需复杂配置,三步即可上手,自带安全防护,支持微信直连绑定,内置多款优质国产大模型,现阶段也是完全免费使用,基本上前面提到过的痛点都可以靠它解决。对了,这里特别强调一点,上面的截图让产品同事汗流浃背,再三找我确认 QClaw 思考过程中优美的“草”字说法,不会是默认出现的吧?AI 好,AI 得学,但更重要的是,在你的工作和生活里,哪些东西是能结构化地被 AI 所接入的,不要死守着那些脏活累活不放。

QcloudCommunity的博客 673
上一篇: 代码千行不如架构图一张!程序员如何培养业务思维,做有价值的需求?
下一篇: 如何理解:业务架构、应用架构、数据架构、技术架构与系统和复杂度
腾讯云开发者
腾讯云开发者 企业官方账号 企业官方账号
博客等级 码龄10年 6291粉丝 1962原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值