微信研发体系下的分布式配置系统设计实践

腾小云导读

对很多的开发者而言,处理运营素材反复变更等需求场景不是一件轻松的事。开发者通常需要定制化地进行数据清理、格式转换和工具开发等等。在这个时候,建设分布式配置系统就显得尤为重要。本文旨在分析分布式配置系统的必要性、可行性及其关键约束,并介绍一个在微信研发体系下的分布式配置系统研发设计。这个系统成功避免了大量的配置数据的时间消耗,希望能对广大开发爱好者有所启发。

目录

1 配置的定义

2 系统约束

2.1 数据模型

2.2 访问模型

2.3 系统约束

2.4 安全约束

3 系统的演进

3.1 单机配置文件

3.2 集中式配置文件中心

3.3 数据库配置存储

4 方案思考

4.1 物理模型

4.2 安全管理

4.3 配置系统SDK

4.4 异步化

4.5 业务插件

4.6 推与拉

4.7 快速最终一致

4.8 请求单调

4.9 灰度发布

4.10 效率提升

4.11 可用性提升

5 境外支付配置系统

01、配置的定义

软件建模的本质是对现实世界(人、事、物及规则)的映射,映射的产出物是编程系统和配置。配置为开发者提供了动态修改程序运行时行为的能力,即常说的“系统运行时飞行姿态的动态调整”,究其根源则是“人类无法掌控和预知一切,映射到软件领域上,人总是需要对系统的某些功能特性预留出一些控制的线头,以便在未来需要的时候,可以人为地拨弄这些线头从而控制系统的行为特征。”

因此,本文所指的配置特指内部运营人员产生的数据(广义的系统运营人员,包括产品、运营、研发等),作为输入参数而作用于编程系统(包括实时系统、批跑程序以及数据任务等)。

归纳而言,配置通常包含如下三种:

a. 环境配置,定义了应用程序运行时的环境相关参数,如 IP、Port 等;

b. 应用配置,定义了应用程序自身相关的参数或者信息安全控制等,如初始内存分配大小、数据库连接池大小、日志级别、账号密码等;(密码、证书这类事物不要放在配置系统中,应当走统一加解密服务)

c. 业务配置,定义了应用程序所执行的业务行为数据,比如最常见的功能开关,参与活动的商户名单等。

02、系统约束

2.1 数据模型

配置最基本的数据单元是 key=value(即配置项),比如功能开关通常就是最简单的类型,用 boolean 型值来影响程序执行链路(不考虑灰度的情况)。然而只有 key-value 类型是不足的,比如 DB 的连接配置就包含了 ip、port、username、password 等字段,在 ini 文件的实现中即是不同配置项来组成,它们在逻辑上是属于同一个配置对象,因此基于面向对象的设计思路,key=object才是更通用的配置模型,在物理实现中可以表现为 json 或者 xml,或者 protobuf message。

object 类型的数据既可以是平坦的,也可以是多层次(嵌套)的。在实际的业务应用中,平坦类型的数据有其特殊性,即其通常条目较多,最典型的数据是白名单,可能多达上万条。

线下,内部运营人员通过 excel 进行这类数据的管理,如果只是粗糙地将其打包成一个对象,那么过大的数据可能会导致系统效率的下降(不是配置的写入效率下降,就是配置读出效率下降),因此需使用 array of plain object 来表达,即 key=table 类型的数据。

2.2 访问模型

区别于产品用户产生的数据,配置系统的数据流是单向的,离线系统与实时系统结合,而读写分离的(异步写、实时读)。最终要搭建的分布式配置系统,它的系统设计,也必然是建立在这类访问模型上的。

2.3 系统约束

显然,内部运营人员作为生产者,所有的配置肯定都是文本类型的(Readable),并且数据量少(相对于用户、系统等生产数据而言),对存储空间需求少,更新频次低。换一种说法,在整个配置系统架构中,输入方就如同键盘相对于 CPU 而言是超慢速设备,它们对系统的易用性、易操作性、安全性要求更高。

用户画像系统,它满足部分配置系统的访问模型,即数据流是单向的,离线系统负责写入画像数据,而实时系统负责读数据。但是首先它的数据生产者通常是离线任务,而非运营人员;再次,它涉及的数据量是巨大的,通常需要定制的存储引擎。所以配置系统与之相比,不能相提并论。

相较而言,配置系统的消费者则是高频的读访问,对系统的吞吐量、延时、网络流量、可用性、一致性、请求单调性都有更高的要求。后续会逐一展开进行深入地探讨。

配置系统的设计应当充分考虑上述的数据模型、访问模型以及系统约束。

2.4 安全约束

正因为配置可以轻易地调整系统运行期行为,因此配置的安全性至关重要。实现安全的必要条件是:让正确的人,以正确的方式,在正确的时机,发布正确的配置。因此,配置系统不但要支持灰度发布的基本能力,还要在权限管理、权限粒度管理、配置变更审核、审计、历史版本等方面都要加强建设。

03、系统的演进

3.1 单机配置文件

在单机系统时代,大家基本上都是使用配置文件来存储配置数据(比如 ini 文件、xml 文件等)。配置文件易于理解、便于实现、可用性高,因此进入分布式集群时代,仍在广泛使用。

缺点表现
易用性差主要体现为表达的数据类型单一,比如 ini 只能管理配置项,即 key=value 类型数据;而如果使用 xml 文件来管理 key=table 类型数据,那么文件内容的初始化效率就会低下,容易出错,
可操作性差配置文件基本只能由开发者来进行修改并且发布,产品、运营的常规业务素材变更工作就不得不卷入其中,由开发执行,对业务的流程效率有严重的影响。
正确性、安全性难以保障正因为配置文件的易于实现,很多团队疏忽了运营系统的建设,研发人员随意修改、恶意修改配置文件的情况无法杜绝,细粒度的权限管理、操作的审核、审计就无从谈起。
发布效率低下配置文件是单机部署的,在集群规模较大的情况下,配置文件的任意变更都需要经过漫长的灰度发布过程发布到全网,如果配置文件是静态加载的,还需要重启二进制,需要消耗研发、运维人员较多的精力。
文件一致性难以保障在发布配置变更的过程中,如果集群中出现宕机情况,会导致不同机器间的配置出现差异,而且没有自动校正的能力,需依赖于人员或者运维系统的支持,进而导致业务进入未定义的行为。

如果说易用性、可操作性、正确性、安全性可以通过搭建运营系统来进行改进是优点,而发布效率低下、文件一致性难以保障则是单机配置文件的致命缺点,究其本质,是因为单机配置文件系统是被动的、离散的可以随意接受外界的变更,而没有主动的能力。

3.2 集中式配置文件中心

由此,出现了集中式的配置文件系统,针对性地解决了上述的问题,开发人员将配置文件存储到独立的第三方服务(典型的由 ZooKeeper 进行管理,也有部分团队自行实现微服务管理),然后由 agent 周期性地将配置拉取到本地进行缓存(拉),或者通过事件的订阅通知能力来将变更发布到相应集群(推)。

集中式配置文件系统针对性地解决了发布变更效率问题以及配置文件一致性保障问题。然而在一些所知的应用案例中,仍然存在如下的问题亟需解决:

  • 一致性粒度粗

集中式配置文件只能确保分布式集群达到最终一致(时间取决于拉、推的频率及速率),却无法保证任一时刻,对任一配置,所有进程、线程、协程能看到相同的数据,这通常会导致出现无法预期的业务失败;

  • 无法保证请求单调性

在一次业务请求中,一般希望用户看到的配置内容是静态的,如果中间发生变更,可能带来业务失败,严重的会导致用户数据状态错乱;基于集中式配置文件系统的配置通常是动态加载的,配置的变更可能随时的反映到实时系统中,导致一次业务请求先后看到不同的数据状态;

  • 安全性仍无法彻底保障

虽然集中式配置文件可以修改控制权限,但是在消费者端,技术人员仍然可以手动的修改本地配置文件 cache 来影响程序的运行行为;

  • 无法支持灰度能力

配置文件变更的下发是全量的,如果要支持灰度发布的能力,就需要卷入业务方自行实现;

配置文件系统,无论是单机配置文件,还是集中式配置文件,存在的问题,归根结底,是由配置文件这个载体以及集中式配置文件系统的管道定位决定的,所以进行精细化管理的成本高;

  • 配置文件的可视、可读能力

对生产者而言是很重要的,但对消费者却是无关紧要的,因此全链路都由配置文件作为载体反而会导致加载效率低下(比如应对千万级黑白名单,或者业务方实时请求链路动态加载);

  • 配置文件难以安全、便利管理元信息

为了实现一致性、单调性、安全性,配置需要一些元数据信息管理(下文展开详述),但是配置文件系统没有这种能力,除非业务方使用高成本自行实现。

  • 配置文件的数目与配置的数量息息相关

随着时间的发展,配置文件数目膨胀,会带来新的运营问题;

  • 集中式配置文件系统通常只把自己定位成管道

既不理解也不维护配置文件的内容,agent 功能单一,业务消费方不与系统直接交互,而是只能看到配置文件,虽然松耦合,可以提高可用性,但也让业务方仍需投入不少的开发成本来处理配置文件。

配置文件只是配置的物理载体,上述缺点并非无法克服,只是在基于配置文件的配置系统下,克服上述缺点的成本高,需要更多的使用约束,以及外围配套。

3.3 数据库配置存储

对结构复杂、类型较多的配置系统,业务研发者通常不会直接使用配置文件来承载,而是使用数据库(关系型或非关系型)表来存储配置,然后再使用编写工具进行数据的导入。这种存储方案克服了配置文件的部分问题,对配置有更精细化的管理。但是仍存在明显的不足,即高度的定制化,不可复用,重复开发成本高。

因此,需要对此进行完善,将配置的存储、读、写、管理等过程提炼共性,通用化、平台化。

04、 方案思考

4.1 物理模型

既然配置文件难以精细化管理,且具备易侵入的物理实体特性(本地文件),所以就需要新的数据结构来承载配置。前文讨论过,配置有两种数据模型,分别是 key=object以及 key=table。对使用者而言,配置必须是可视、可读、易管理的。为了达成这目的,只需在内部运营人员与配置系统核心之间搭一套设计良好的运营系统即可。那么在后端呢?对消费者而言,最注重传输、计算的效率,同时也要与微服务框架的对齐,protobuf message 无疑是最佳的形式。

然而 protobuf 无法自主解释,在没有 message 定义的情况下,既没办法将文本性的配置转换成 pb 二进制流,也没办法反序列化。因此我们必须将业务的 message 定义上提到运营系统,然而 protobuf 却对可视化编辑不太友好。一个可行的思路是基于 JSON 数据进行配置的定义、可视化操作、传输及存储,只有到达业务侧才进行数据类型的转换。

4.2 安全管理

搭建一套配置运营系统,让其成为运营人员管理配置的唯一入口,轻松就可以得到很高的回报。而且还可以基于运营系统进行各种配置以及安全加固,如配置的变更必须具备相应的权限,只有通过审核才能应用到系统,所有的操作都要有审计的能力、配置的历史版本快速可查等。同时灰度、回退等能力也需要基于运营系统进行操作。

4.3 配置系统SDK

上文提及集中式配置文件系统的管道定位,agent 只负责定期的拉取配置然后缓存到本地的文件系统。业务系统与配置系统松耦合。一般认为配置文件仍然具有较高的开发成本,对业务方而言,最佳的开发形式应当是:

int GetConfig<Message>(const std::string& key, ::google::protobuf::Message& msg);

而不需要再去理解文件内容、形式。

并且有必要为业务方提供一套配置系统的 SDK,将配置系统的细节、数据结构等信息都屏蔽起来,让业务方只看到配置的 Protobuf Message 对象。

在 SDK 的基础上,消费者只需轻度介入(业务插件,见下),就可以完成协议转换、配置缓存、进程,线程,协程的快速最终一致、请求单调、灰度发布的能力。

配置系统 SDK 是精细化管理的基础,可以通过维护配置本身内容之外的配置元数据信息来完成上述能力。

4.3 异步化

异步化是配置 SDK 的关键。很多本地缓存的更新是周期性由实时链路请求负责,虽易于实现,但效率上仍存在问题,尤其考虑到还需要对配置进行配置业务逻辑的处理。因此,最佳方案应当是通过异步过程来进行配置的加载、初始化及其他逻辑处理。

异步带来的问题是异步过程与实时请求的并发问题,即异步过程在进行配置变更中,应如何处理实时链路的读请求,这是一个工程问题,会另文讨论,一个可行的思路是多版本及引用计数技术。

4.4 业务插件

异步提供的另外一个好处是,业务可以在配置生效的时候进行一些初始化动作,例如进行配置正确性校验,以及搭建业务适合的数据结构。例如业务白名单在 pb 中只是一个数组,如果业务进行命中查找,代价比较高。业务最期望的方式还是使用 map 来存储。因此配置 SDK 异步化,就为业务插件能力提供了基础。

4.5 推与拉

一般更倾向于配置 SDK 主动拉取配置的更新。推与拉的辩证在于效率和可用性。推比较高效,不存在无用的网络消耗。但是推又引入了新的系统依赖(即事件中心)。“如无必要,勿增实体”,基于这样的思想,所以一般由 SDK 周期性主动拉取。至于效率,完全可以通过各种工程的手段加以优化,达到可以接受的程度。

当然这也取决于系统规模,如果是公司机的配置系统,而不是部分中心级,那么也要认真地思考“推”或者“推拉”结合的模式。

4.7 快速最终一致

无论是单机配置文件系统,还是集中配置文件系统,都存在严重的不一致问题。对一次配置变更,基本上都需要很长的时间才能达到最终一致(即所有并发看到相同的数据状态)。

一个可行的思路是使多版本以及定时生效。配置只有在未来的某个时间(该时间内SDK 已经拉到了最新数据)才对外可见。至于如何确保所有 SDK 都拉到了数据,这涉及到可用性的问题,后续会另文讨论。

4.8 请求单调

定时生效没办法解决请求单调性的问题。请求单调性是指实时服务处理一次请求,在请求调用栈的过程中,读到的配置内容必须是静态、没有变动的,即使中间有待生效数据变成了生效数据。一个思路是可以通过线程私有变量(协程私有变量)缓存配置版本。

4.9 灰度发布

在配置 SDK 多版本能力的基础上,实现灰度发布的能力是轻而易举的。灰度发布的能力,不过就是选择生效配置版本的能力,如果本机、本角色、本请求业务 Key(如用户、商户、订单)等命中灰度范围,则使用新版本,否则使用原版本。

4.10 效率提升

效率提升包括降低网络传输数据量、降低配置存储服务的压力,这些都是具体的工程手段,不在本理论篇内讨论。

4.11 可用性提升

分布式系统的可用性提升是老生常谈的话题,为了聚焦于配置系统独特的能力,本篇不专门进行讨论。

However,尽量减少系统中的单点,是一个重要的原则。在前节”推与拉“中也有涉及。同时为了业务的可用性,第三方配置系统的运营能力、故障主动发现能力、故障通知能力、再现及定位能力也非常重要。这是重复造轮子的一个不得已的重要原因,很多团队软件可能做得不错,但服务能力(主要指运营能力)却有点不尽人意。

05境外支付配置系统

本篇的技术方案目前已服役两年的时间,有上百种业务配置,包括功能开关,但更多的是运营素材配置。

举一个例子,在开发配置系统之前,为了导入一次运营素材配置,需要研发投入2天的时间,数据的审核都是在线下进行(质量可想而知)。目前基于配置系统,小助手10分钟之内完成批量导入、程序自动校验(依赖于业务插件)、审核审批,研发全程无需介入。

同时也为业务方提供了易于使用的配置 SDK,支持多种配置类型,允许业务自定义数据结构,支付定时生效、灰度发布的能力,并且满足请求单调性。

以上是本次分享全部内容,欢迎大家在评论区分享交流。如果觉得内容有用,欢迎转发~

-End-

原创作者|杨平安

技术责编|杨平安

「分布式系统」近年来受到较大关注。有些人认为分布式的优势在于可靠性,就算是一个非常强大的单机系统,在可靠性上也几乎无法与之匹敌。而有部分开发者认为分布式系统虽集成了「集体」的力量、提供了更强大的数据处理能力,但在人多力量大的同时也引入了更多问题,如数据一致性困扰等等。

你怎么看待分布式系统?它有什么优点和缺陷?在什么情境下最适用?欢迎在腾讯云开发者公众号评论区分享你的看法。我们将选取1则最有创意的分享,送出腾讯云开发者-马克杯1个(见下图)。6月25日中午12点开奖。

相关推荐

大模型的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
上一篇: 腾讯视频技术团队偷懒了?!
下一篇: BUG越改越多?微信团队用自动化测试化险为夷
腾讯云开发者
腾讯云开发者 企业官方账号 企业官方账号
博客等级 码龄10年 6291粉丝 1962原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值