从零构建skills能力封装系统:注册、发现与调度实战

1. 当“skills”成为一个项目标题:我看到的不是技能清单,而是一套能力封装系统

第一次看到“skills”这个项目标题时,我下意识以为又是一个技能树展示页面或者简历生成器。但仔细琢磨这个命名方式——全小写、单数形式、没有任何修饰词——反而让我觉得它更像是一个底层的能力注册与调度模块。在多个实际项目中,我见过太多团队把“技能”这个概念做成了静态的标签列表,结果就是维护成本极高、复用率极低。而一个真正有价值的“skills”项目,核心应该解决的是:如何把零散的能力单元标准化、可发现、可组合、可执行。

这个判断基于一个很朴素的观察:任何系统在成长过程中,都会面临能力膨胀的问题。一开始可能只有三五个功能,直接写在主流程里没问题。但当功能数量超过二十个、参与贡献的人超过三个、调用场景跨越多个模块时,如果没有一套统一的技能注册与发现机制,代码就会迅速腐化成一座“if-else 迷宫”。我经历过一个项目,仅仅是因为缺少一个统一的技能描述规范,导致同一个数据校验逻辑在七个地方各写了一遍,后来改一个校验规则要改七处,漏一处就出线上问题。

所以这篇内容适合谁看?如果你正在设计一个需要动态扩展能力的系统,或者你手里已经有一堆散落各处的工具函数、业务逻辑片段、外部服务封装,正愁不知道怎么把它们管起来,那“skills”这个思路值得你花时间研究。它不局限于某种编程语言或框架,而是一种架构层面的思考方式。我会从核心概念拆解、数据结构设计、注册与发现机制、执行调度策略、以及实际落地时踩过的坑这几个维度,把“skills”这个项目标题背后可能承载的完整技术图景展开讲清楚。

2. 拆解“skills”的核心语义:能力单元的最小完备描述

2.1 为什么是“skill”而不是“function”或“tool”

很多人会问:我直接叫“utils”或者“tools”不就行了吗?为什么非要造一个“skill”的概念?这个问题我在早期设计时也纠结过。后来想明白了:function 太底层,tool 太宽泛,而 skill 恰好卡在“有明确意图的能力单元”这个位置上。

一个 function 可能只是字符串拼接,它不关心业务意图。一个 tool 可能是一个完整的命令行程序,粒度又太大。而一个 skill,在我的定义里,是具备明确输入输出契约、可独立描述、可被调度执行的最小业务能力单元。比如“发送通知”是一个 skill,“查询用户订单”是一个 skill,“生成周报摘要”也是一个 skill。它们都有清晰的意图,而不是纯粹的算法实现。

这个区分在实际操作中非常关键。当你用 function 的视角看系统时,你会倾向于按技术层次划分;当你用 skill 的视角看系统时,你会倾向于按业务能力划分。后者在跨团队协作时优势明显——产品经理能看懂 skill 列表,但看不懂 function 列表。

2.2 一个 skill 必须包含的五个要素

基于多个项目的迭代,我总结出一个 skill 描述必须包含以下五个要素,缺一个都会在后续使用中出问题:

要素作用缺失后的典型问题
唯一标识用于注册、查找、调用同名冲突,调用时不知道该用哪个
输入模式定义参数类型、必填项、默认值调用方传错参数,运行时才报错
输出模式定义返回结构、错误码调用方不知道如何处理返回结果
执行体实际逻辑的封装无法真正执行
元信息描述、版本、作者、标签无法做分类检索和权限控制

这五个要素看起来简单,但我在实际落地时发现,最容易出问题的是输入模式的定义。很多开发者习惯用动态类型语言,参数随便传,结果就是调用方和实现方对参数的理解不一致。我的经验是:即使语言本身支持动态类型,在 skill 的输入定义上也要做严格的运行时校验。这多出来的一层校验,能省掉后面无数次的扯皮和排查。

2.3 技能注册表:整个系统的中枢

如果把 skills 项目比作一个人,那技能注册表就是大脑。它负责回答三个问题:有哪些技能可用?每个技能怎么用?当前谁有权用?

我见过两种注册表设计思路。一种是静态注册,在启动时把所有技能加载到内存,适合技能数量少、变更不频繁的场景。另一种是动态注册,技能可以在运行时热插拔,适合需要频繁扩展的平台型系统。两者没有绝对优劣,但选择时需要考虑一个关键因素:你的技能变更频率是否高到需要不停机更新。

我自己的做法是折中:核心技能静态注册保证启动速度,扩展技能动态注册支持热更新。注册表本身用一张哈希表加一个有序索引来维护,哈希表用于 O(1) 查找,有序索引用于按标签或分类遍历。这个设计在技能数量达到几百个时依然表现良好。

3. 技能描述的数据结构设计:从扁平字典到分层模型

3.1 第一版设计:扁平字典的教训

我最初的设计非常直接,就是一个大字典,key 是技能名,value 是执行函数。简单粗暴,十行代码就能跑起来。但很快问题就来了:当技能数量增加到五十个以上时,我完全记不住哪个技能叫什么名字,只能靠 grep 搜索代码。更麻烦的是,有些技能需要参数校验,有些不需要,有些有返回值,有些没有,扁平字典完全无法表达这些差异。

这个阶段的教训是:技能描述不能只有“名字”和“函数”,必须把契约信息也纳入进来。于是有了第二版设计。

3.2 第二版设计:契约驱动的技能对象

第二版我把每个技能定义为一个对象,包含 name、description、input_schema、output_schema、handler、tags、version 这几个字段。这个结构在后续使用中证明是合理的,但有一个细节需要特别注意:input_schema 和 output_schema 的格式选择。

我试过三种格式:自定义的简单类型字符串、JSON Schema、以及语言原生的类型注解。最终我倾向于 JSON Schema,原因是它跨语言、可序列化、生态工具多。虽然写起来稍微啰嗦一点,但换来的是调用方可以自动生成表单、自动校验、自动生成文档。这个投入产出比是划算的。

# 一个典型的技能定义示例(伪代码) skill_definition = { "name": "send_notification", "description": "向指定用户发送站内通知", "input_schema": { "type": "object", "properties": { "user_id": {"type": "string", "description": "目标用户ID"}, "title": {"type": "string", "maxLength": 100}, "content": {"type": "string", "maxLength": 2000}, "priority": {"type": "string", "enum": ["low", "normal", "high"], "default": "normal"} }, "required": ["user_id", "title", "content"] }, "output_schema": { "type": "object", "properties": { "success": {"type": "boolean"}, "message_id": {"type": "string"}, "error_code": {"type": "string"} } }, "tags": ["notification", "user-facing"], "version": "1.2.0" }

3.3 技能分组与命名空间:解决命名冲突的实战方案

当技能数量继续增长,新的问题出现了:不同业务线可能有同名技能。比如“查询订单”在电商业务和外卖业务里含义完全不同。这时候就需要引入命名空间。

我的做法是用“域.子域.技能名”的三段式命名,比如ecommerce.order.query和delivery.order.query。注册表内部用树形结构维护这个层级,查找时支持前缀匹配和通配符。这个设计还有一个额外好处:可以做批量权限控制。比如给某个角色授予ecommerce.*的调用权限,就自动包含了电商域下所有技能。

但这里有个坑要注意:命名空间层级不宜过深。我试过四层命名,结果就是名字太长,调用时容易写错,而且层级划分本身就有歧义。三层是我实践下来比较舒服的深度。

4. 技能发现与匹配:让系统知道“现在该用哪个技能”

4.1 基于标签的检索:最实用的发现方式

技能注册好之后,下一个问题就是:调用方怎么找到自己需要的技能?最直接的方式是按名称查找,但这要求调用方事先知道技能名。在开放平台场景下,调用方往往只知道自己的意图,不知道具体技能名。

这时候标签系统就派上用场了。我给每个技能打上多个标签,比如“数据查询”“用户操作”“报表生成”等。调用方可以通过标签组合来筛选技能。实现上就是一个倒排索引,标签到技能列表的映射。这个结构在技能数量上千时依然能保持毫秒级检索。

实际使用中,我发现标签的粒度控制很关键。太粗了筛选不精确,太细了又等于没筛。我的经验是:每个技能打三到五个标签,标签体系控制在两级以内。一级标签是领域,二级标签是操作类型。这样既保证了检索精度,又不会让标签体系本身变得难以维护。

4.2 语义匹配的尝试与边界

有一段时间我尝试过用语义相似度来做技能匹配,让调用方用自然语言描述需求,系统自动推荐最相关的技能。想法很美好,但实际落地时发现两个问题:一是语义匹配的准确率在技能描述不够丰富时很低;二是即使匹配到了,调用方也不敢直接信任自动匹配的结果,最终还是要去读技能文档。

所以我的结论是:语义匹配适合做推荐,不适合做自动执行。它可以作为技能发现的一个辅助手段,在界面上展示“你可能需要的技能”,但最终选择权还是要交给调用方。这个边界如果不清楚,很容易做出一个看起来智能但实际上没人敢用的功能。

4.3 技能版本管理与灰度发布

技能不是一成不变的。当业务逻辑变更时,技能的行为也会变。这时候如果直接修改原技能,所有调用方都会受影响。我的做法是引入版本号,技能名不变但版本递增,注册表同时保留多个版本。调用方可以指定版本,也可以不指定(默认用最新稳定版)。

灰度发布是另一个实战中总结出来的需求。新版本技能上线时,先让少量调用方试用,观察一段时间没问题再全量。实现上就是在注册表里给每个版本维护一个流量比例,调用时按比例路由。这个机制在技能涉及核心业务逻辑时特别重要,能有效降低变更风险。

5. 技能执行调度:从同步调用到异步编排

5.1 同步执行的适用场景与性能考量

最简单的执行方式就是同步调用:调用方传入参数,技能执行体跑完返回结果。这种方式适合执行时间短、无副作用的技能,比如数据查询、格式转换。但即使是同步执行,也有几个细节需要注意。

首先是超时控制。我踩过的坑是:某个技能内部调用了外部服务,外部服务响应慢,导致调用方线程被长时间占用。后来我给每个技能都加了默认超时时间,超时后强制中断并返回错误。这个默认值设多少合适?我的经验是:根据技能类型分档,查询类 3 秒,写入类 5 秒,复杂计算类 10 秒。超过这个时间还没返回,大概率是出了问题,早点失败比一直等着强。

其次是并发控制。有些技能对并发敏感,比如操作同一个资源的技能。我在注册表里给每个技能加了一个并发度配置,执行器根据这个配置决定是否排队。这个机制防止了资源竞争导致的数据不一致。

5.2 异步执行与回调机制

对于执行时间较长的技能,同步调用就不合适了。这时候需要异步执行:调用方提交任务后立即返回一个任务 ID,技能在后台执行,完成后通过回调或轮询通知调用方。

异步执行的关键设计点是任务状态管理。我设计了一张任务表,记录任务 ID、技能名、输入参数、执行状态、开始时间、结束时间、执行结果。调用方可以通过任务 ID 查询状态。这个表的数据量会随着时间增长,所以需要定期归档已完成的任务。

回调机制则要处理回调失败的重试。我见过太多因为回调地址临时不可用导致任务结果丢失的案例。我的做法是:回调失败后进入重试队列,按指数退避策略重试三次,三次都失败则标记为“回调失败”,同时记录日志供人工介入。

5.3 技能编排:把多个技能串成工作流

单个技能能做的事情有限,真正有价值的是把多个技能编排成一个工作流。比如“用户下单”这个流程,可能涉及“校验库存”“生成订单”“扣减库存”“发送通知”四个技能。

编排有两种方式:一种是硬编码编排,在代码里按顺序调用技能;另一种是声明式编排,用配置文件或 DSL 描述技能之间的依赖关系,由编排引擎负责调度。前者简单直接,适合流程固定的场景;后者灵活,适合流程经常变化的场景。

我自己的选择是:核心流程用硬编码保证稳定性,边缘流程用声明式编排保证灵活性。声明式编排的 DSL 我设计得很简单,就是一个有序列表,每个元素指定技能名和参数映射。参数映射支持从上一个技能的输出中取值,这样就能实现技能之间的数据传递。

6. 落地“skills”项目时最容易踩的五个坑

6.1 坑一:技能粒度过细导致调用链过长

刚开始设计技能时,很容易陷入“每个小功能都做成一个技能”的陷阱。结果就是一个简单的业务操作要调用十几个技能,每个技能只做一点点事情。这不仅增加了调用开销,还让调试变得极其困难——你需要在十几个技能之间追踪数据流。

我的经验法则是:一个技能应该对应一个完整的业务动作,而不是一个技术步骤。比如“校验用户权限”可以是一个技能,但“查询用户角色”和“比对权限列表”就不应该拆成两个技能。判断标准很简单:如果两个步骤总是一起出现,那就合并成一个技能。

6.2 坑二:输入校验缺失导致运行时错误难以定位

前面提到过输入模式的重要性,但实际落地时,很多开发者会为了图省事跳过校验,或者只做最简单的类型检查。我经历过一次线上事故,就是因为某个技能的输入参数没有校验长度,调用方传了一个超长字符串,导致数据库写入失败,整个流程中断。

后来我强制要求:所有技能的输入参数必须经过 schema 校验才能进入执行体。校验不通过直接返回明确的错误信息,指出哪个参数不符合什么规则。这个机制上线后,参数相关的运行时错误下降了百分之八十以上。

6.3 坑三:技能间共享状态引发的并发问题

有些技能需要访问共享资源,比如数据库连接、缓存客户端、配置对象。如果每个技能都自己创建这些资源,会造成资源浪费;但如果共享同一个实例,又可能引发并发问题。

我的解决方案是引入技能上下文的概念。上下文对象在技能执行前创建,包含数据库连接、日志器、配置等共享资源,执行结束后销毁。技能通过上下文访问这些资源,而不是自己创建。这样既避免了资源重复创建,又通过每次执行独立上下文的方式隔离了状态。

6.4 坑四:错误处理不统一导致调用方难以处理

不同技能可能抛出不同类型的异常,调用方需要写一堆 try-catch 来分别处理。这不仅繁琐,还容易遗漏。我的做法是:所有技能统一返回一个结果对象,包含 success 标志、数据字段和错误信息字段。技能内部无论发生什么异常,都在边界处捕获并转换成统一格式。这样调用方只需要检查 success 标志即可,大大简化了错误处理逻辑。

6.5 坑五:技能文档与实现不同步

技能描述写得很漂亮,但实际实现已经改了,文档没更新。这是最常见也最容易被忽视的问题。我的应对策略是:技能描述中的输入输出模式直接从代码中的 schema 定义生成,而不是手写。这样只要代码改了,文档自动更新。另外,在技能注册时做一次校验,确保描述中的 schema 和实际执行体的参数签名一致,不一致就拒绝注册。

7. 从“skills”项目延伸出的架构思考

7.1 技能化思维对系统演进的长期价值

把系统能力拆成一个个 skill,表面上看只是代码组织方式的改变,但长期来看,它改变了整个系统的演进方式。当新需求来临时,第一反应不再是“我要改哪个模块”,而是“我需要新增一个什么技能,或者组合哪些已有技能”。这种思维转变带来的最大好处是:变更的影响范围变得可预测。

因为每个技能都有明确的契约,修改一个技能的内部实现不会影响调用方,只要契约不变。这让我在维护大型系统时有了更强的信心——我知道我的改动不会引发连锁反应。

7.2 技能市场:一个值得探索的方向

当技能积累到一定数量后,一个自然的延伸方向是“技能市场”。不同团队可以把自己开发的技能发布出来,其他团队按需订阅。这需要解决技能的质量评估、版本兼容、权限控制等问题,但一旦跑通,对组织效率的提升是巨大的。

我参与过的一个内部平台就做了类似的事情,把通用的数据处理、报表生成、消息推送等能力封装成技能,各业务线按需调用。结果是新业务上线时,基础能力的开发时间从两周缩短到了两天。这个收益是实实在在的。

7.3 技能与智能调度的结合边界

现在很多系统都在尝试引入智能调度,根据当前上下文自动选择和执行技能。我的观点是:智能调度适合做辅助决策,不适合做最终执行。它可以推荐技能组合、预测执行结果、提示潜在风险,但最终是否执行、按什么顺序执行,还是应该由人来确认或由明确的规则来决定。

原因很简单:技能执行往往涉及真实业务操作,一旦出错代价很高。在智能调度的准确率没有达到极高之前,把执行权完全交给它是不负责任的。我在实际项目中采用的是“智能推荐加人工确认”的模式,既享受了智能带来的效率提升,又保留了必要的控制权。

8. 我在实际项目中使用技能框架的几点体会

技能框架上线运行一年多后,我最大的体会是:前期在契约定义上多花的时间,后期会以十倍百倍的效率回报你。刚开始团队里有人觉得写 schema 太繁琐,想直接跳过。但三个月后,当我们需要自动生成 API 文档、自动生成调用方 SDK、自动做参数校验时,那些写了 schema 的技能直接就能用,没写的只能返工补上。

另一个体会是关于技能命名的。我建议在项目早期就定好命名规范,并且严格执行。我们吃过亏:早期有几个技能命名很随意,后来想统一改,发现调用方已经散落在各处,改起来成本极高。所以宁可早期多花十分钟讨论命名,也不要后期花十天做迁移。

还有一个实用技巧:给每个技能加一个“示例调用”字段,写一段最简单的调用代码。这个字段在技能文档页面直接展示,新接手的人看一眼就知道怎么用。这个小小的投入,节省了大量的沟通成本。我统计过,加了示例调用之后,关于“这个技能怎么用”的咨询消息减少了七成以上。

最后分享一个排查技巧:当某个技能执行结果不符合预期时,先不要急着看技能内部逻辑,而是先检查输入参数是否符合 schema。我遇到的情况中,超过一半的“技能 bug”其实是调用方传错了参数。在技能执行入口打印完整的输入参数和校验结果,能帮你快速定位问题方向。这个习惯让我在排查问题时少走了很多弯路。

相关新闻

Hive高频面试题全解析:内部表、分区分桶与排序四兄弟

Hive高频面试题全解析:内部表、分区分桶与排序四兄弟

1. 面试官为什么总爱从Hive开始问:三个真实原因很多同学准备大数据面试时,最容易低估的就是Hive。总觉得它不过是一层SQL壳子,把HQL翻译成MapReduce或者Spark任务而已,真到现场被追问,才发现“知道”和“说得清楚”完全…

2026/10/20 21:13:37 阅读更多 →
REA建模实战:用资源-事件-代理理清业务流程与数据模型

REA建模实战:用资源-事件-代理理清业务流程与数据模型

1. 先别急着画数据表,REA解决的是你的业务建模惯性问题第一次看到REA这个缩写,我以为是某个数据库中间件的名字。后来在一次梳理某制造公司业务模型时被它帮了大忙,才真正意识到REA是“资源-事件-代理”本体,不是工具,…

2026/10/20 21:13:37 阅读更多 →
Windows用VirtualBox安装Ubuntu虚拟机:从下载镜像到配置增强功能全指南

Windows用VirtualBox安装Ubuntu虚拟机:从下载镜像到配置增强功能全指南

先用一句话说清楚:这篇文章就是教你在Windows上,用VirtualBox把Ubuntu装成一台虚拟机。我已经在Windows电脑上反复折腾过这套流程很多次,踩过不少坑,也总结出了一套最省事的路线——从下载镜像、创建虚拟机、调参数,到…

2026/10/20 21:13:37 阅读更多 →

最新新闻

戴森球计划工厂蓝图仓库:3步装好,产线开箱即用

戴森球计划工厂蓝图仓库:3步装好,产线开箱即用

戴森球计划工厂蓝图仓库:3步装好,产线开箱即用 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 凌晨两点还在对着传送带发呆,数着分拣器该…

2026/10/21 1:35:24 阅读更多 →
Jasna 马赛克检测模型选型指南:按素材挑对模型,少漏检、不白等

Jasna 马赛克检测模型选型指南:按素材挑对模型,少漏检、不白等

Jasna 马赛克检测模型选型指南:按素材挑对模型,少漏检、不白等 【免费下载链接】jasna Video restoration tool 项目地址: https://gitcode.com/GitHub_Trending/ja/jasna Jasna 是一款视频修复工具,第一步就是靠检测模型在每帧里找出…

2026/10/21 1:35:24 阅读更多 →
ESP32 无感 BLDC 免霍尔换相:比较器过零检测 3 步跑通闭环

ESP32 无感 BLDC 免霍尔换相:比较器过零检测 3 步跑通闭环

ESP32 无感 BLDC 免霍尔换相:比较器过零检测 3 步跑通闭环 【免费下载链接】esp-iot-solution Espressif IoT Library. IoT Device Drivers, Documentations and Solutions. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solution 无感 BLDC 控…

2026/10/21 1:35:24 阅读更多 →
Front End Interview Handbook:101 道前端面试题,配前 FAANG 工程师解答

Front End Interview Handbook:101 道前端面试题,配前 FAANG 工程师解答

Front End Interview Handbook:101 道前端面试题,配前 FAANG 工程师解答 【免费下载链接】front-end-interview-handbook Front End interview preparation materials for busy engineers (updated for 2026) 项目地址: https://gitcode.com/GitHub_Tr…

2026/10/21 1:35:24 阅读更多 →
从零实现旋转电压矢量:SVPWM与SPWM的工程实践指南

从零实现旋转电压矢量:SVPWM与SPWM的工程实践指南

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

2026/10/21 1:35:24 阅读更多 →
无名杀网页版:浏览器三国杀,一条命令启动

无名杀网页版:浏览器三国杀,一条命令启动

无名杀网页版:浏览器三国杀,一条命令启动 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 无名杀(noname)网页版是一个完全开源的三国杀实现,跑在浏览器里。最大卖点&#…

2026/10/21 1:34:24 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* 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 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* 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 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* 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 9:50:45 阅读更多 →