多Agent协作下的Skill管理:注册中心与包管理两种开源方案对比
1. 多 Agent 环境下的 Skill 管理困局1.1 一个 Skill 存三份到底是怎么发生的先说一个我亲身踩过的坑。去年下半年我手上同时跑着三个 Agent 工作流一个负责代码审查一个负责文档生成还有一个做数据清洗。三个流程里都需要用到同一套“格式化输出”的能力——说白了就是让模型按照固定结构吐 JSON字段名、嵌套层级、边界条件全都一样。结果你猜怎么着我在三个不同的目录下各写了一份几乎一模一样的 skill 定义文件。第一份写在代码审查项目的skills/目录里第二份复制到了文档生成项目的prompts/目录下第三份干脆内联在了数据清洗脚本的配置字典里。三份文件同一个逻辑三种写法。第一份用的是 YAML 描述第二份改成了 Markdown 加 frontmatter第三份直接是 Python 字典。当时觉得没什么反正能跑就行。直到有一天产品需求变了——输出格式要加一个confidence字段。我改了第一份忘了第二份第三份压根没想起来。上线之后文档生成那边直接报错排查了四十分钟才发现是 skill 版本不一致导致的。这就是多 Agent 环境下最典型的 skill 管理问题同一个能力被重复定义散落在不同位置没有单一可信来源。它不像代码依赖那样有package.json或者requirements.txt帮你锁版本skill 这种东西天然就是“文本片段”太容易被复制粘贴了。1.2 为什么多 Agent 场景下这个问题会被放大单 Agent 的时候你只有一个执行体skill 放在哪、怎么写影响面有限。但一旦进入多 Agent 协作问题就成倍放大。我总结下来有三个核心原因。第一是Agent 之间的边界模糊。比如一个“搜索并总结”的 Agent它到底应该自己内置搜索 skill还是调用另一个专门做搜索的 Agent如果两个 Agent 都内置了搜索 skill那就有两份需要同步。第二是不同框架对 skill 的格式要求不一样。有的框架吃 JSON Schema有的吃自然语言描述有的要求用特定的装饰器函数。你很难用一份文件同时满足所有框架。第三是迭代节奏不同步。代码审查 Agent 可能每周迭代三次文档生成 Agent 两周才动一次。快的那个改了 skill慢的那个根本不知道。我后来养成了一个习惯每次新建 Agent 项目第一件事不是写 prompt而是先画一张 skill 依赖图标清楚哪些 skill 是共享的、哪些是独有的。这张图后来救了我很多次。1.3 这个问题的本质是什么往深了说skill 管理的本质是配置漂移configuration drift问题。这个概念在运维领域早就被研究透了——服务器配置会随着时间推移逐渐偏离初始状态最终导致环境不一致。Skill 也是一样的你初始定义了一份“标准 skill”但在复制、修改、适配的过程中各个副本会逐渐漂移最终变成三个不同的东西。解决配置漂移的经典思路有三个集中化管理、版本控制、自动化同步。放到 skill 管理上对应的就是把 skill 抽到一个独立仓库、给 skill 打版本号、用工具自动分发到各个 Agent。听起来简单但实操起来有一堆细节要处理。接下来我就把这两款开源工具的实际使用体验拆开讲。2. 两款开源工具的核心思路与选型对比2.1 工具 A以“注册中心”模式统一管理 Skill第一款工具我姑且叫它SkillHub化名下同。它的核心思路非常直白把所有 skill 集中存放在一个目录里每个 skill 一个文件夹里面包含 skill 的描述文件、实现代码、测试用例和版本信息。然后通过一个注册中心服务让各个 Agent 在运行时按需拉取。它的目录结构大概长这样skill-registry/ ├── skills/ │ ├── format-json/ │ │ ├── skill.yaml │ │ ├── handler.py │ │ ├── tests/ │ │ └── CHANGELOG.md │ ├── web-search/ │ │ ├── skill.yaml │ │ ├── handler.py │ │ └── tests/ │ └── summarize/ │ ├── skill.yaml │ └── handler.py ├── registry.json └── server.py每个skill.yaml里定义了 skill 的名称、版本、输入输出 schema、依赖项和适用框架。Agent 启动时通过 HTTP 或者本地文件读取的方式从注册中心获取自己需要的 skill 列表。这个模式最大的好处是单一可信来源。你改format-json的 schema所有引用它的 Agent 下次启动时都会拿到新版本。坏处也很明显引入了一个额外的服务依赖。如果你的 Agent 是跑在边缘设备上的或者对启动延迟很敏感多一次网络请求就是多一份风险。2.2 工具 B以“包管理”模式分发 Skill第二款工具我叫它SkillPack。它的思路更接近我们熟悉的 npm 或者 pip把每个 skill 打包成一个独立的包发布到一个私有仓库里然后在各个 Agent 项目的依赖文件里声明需要哪些 skill、什么版本。它的配置文件大概长这样# agent-project/skillfile.yaml skills: - name: format-json version: ^1.2.0 source: private-registry - name: web-search version: ~2.0.1 source: private-registry然后跑一条命令skillpack install所有依赖的 skill 就会被下载到项目的.skills/目录下。Agent 运行时直接从本地读取不需要额外的网络调用。这个模式的好处是版本锁定和离线可用。每个 Agent 项目都有自己独立的 skill 依赖树互不干扰。坏处是更新滞后——你发布了 skill 的新版本各个项目需要手动更新依赖并重新安装不像注册中心模式那样自动生效。2.3 两款工具的选型对比表对比维度SkillHub注册中心模式SkillPack包管理模式核心思路集中存储运行时拉取打包分发安装时锁定版本管理服务端统一管理支持热更新客户端锁定版本需手动升级网络依赖每次启动需要访问注册中心仅安装时需要网络离线可用不支持除非本地缓存完全支持多框架适配在 skill.yaml 中声明适配层通过构建脚本生成不同格式适用场景内部服务化 Agent 集群边缘部署、多项目独立迭代学习成本中等需要理解注册中心概念低类似 npm/pip 的使用习惯我实际用下来如果你的 Agent 都跑在同一套基础设施上SkillHub 更省心如果 Agent 分散在不同环境、迭代节奏差异大SkillPack 更稳妥。当然两者也可以混用——用 SkillHub 做中心化存储用 SkillPack 做分发这是后话。3. SkillHub 实操从零搭建一个 Skill 注册中心3.1 环境准备与初始化SkillHub 的安装不算复杂但它依赖 Python 3.10 以上和 Redis用来做版本缓存。我是在一台 4C8G 的云主机上搭的实际跑下来资源占用很低2C4G 也够用。第一步拉取代码并安装依赖git clone https://example.com/skillhub.git cd skillhub python -m venv venv source venv/bin/activate pip install -r requirements.txt第二步初始化注册中心的数据目录。SkillHub 默认会在当前目录下创建data/文件夹里面存放 skill 的元数据和版本历史python scripts/init_registry.py --data-dir ./data这一步会生成一个空的registry.json结构如下{ version: 1.0, skills: {}, last_updated: 2025-01-01T00:00:00Z }第三步启动注册中心服务python server.py --host 0.0.0.0 --port 8080 --redis-url redis://localhost:6379/0启动之后访问http://localhost:8080/health应该能看到{status: ok}。如果报 Redis 连接错误检查一下 Redis 是否启动、密码是否正确。注意SkillHub 默认没有鉴权机制。如果你是在内网使用问题不大但如果要暴露到公网务必在前面加一层反向代理并配置访问控制。我吃过这个亏——有一次测试环境忘了关结果被扫描到虽然没有造成实际损失但吓出一身冷汗。3.2 编写第一个 Skill 定义文件Skill 的定义文件是整个体系的核心。我以format-json为例展示一个完整的skill.yamlname: format-json version: 1.2.0 description: 将模型输出强制格式化为指定结构的 JSON author: team-a tags: - output-format - json - validation input_schema: type: object properties: raw_text: type: string description: 模型原始输出文本 target_schema: type: object description: 目标 JSON Schema required: - raw_text - target_schema output_schema: type: object properties: parsed: type: object confidence: type: number minimum: 0 maximum: 1 errors: type: array items: type: string runtime: handler: handler.py entrypoint: format_json timeout: 30 retry: 2 compatibility: frameworks: - langchain - autogen - custom python_version: 3.10这里有几个关键点值得展开说。version 字段必须遵循语义化版本规范因为 SkillHub 的依赖解析器会根据这个字段来判断兼容性。input_schema 和 output_schema 不只是文档它们会被注册中心用来做运行时校验——如果 Agent 传入的参数不符合 schema请求会被直接拒绝不会进入 handler 执行。compatibility 字段决定了这个 skill 能被哪些框架加载如果你用的框架不在列表里需要自己写适配层。3.3 Handler 实现与测试用例编写Handler 就是 skill 的实际执行逻辑。format-json的 handler 大概长这样import json from jsonschema import validate, ValidationError def format_json(raw_text: str, target_schema: dict) - dict: errors [] parsed None confidence 0.0 # 尝试直接解析 try: parsed json.loads(raw_text) validate(instanceparsed, schematarget_schema) confidence 1.0 except json.JSONDecodeError as e: errors.append(fJSON 解析失败: {str(e)}) # 尝试从文本中提取 JSON 块 parsed _extract_json_block(raw_text) if parsed: try: validate(instanceparsed, schematarget_schema) confidence 0.8 except ValidationError as ve: errors.append(fSchema 校验失败: {str(ve)}) confidence 0.3 except ValidationError as e: errors.append(fSchema 校验失败: {str(e)}) confidence 0.5 return { parsed: parsed, confidence: confidence, errors: errors } def _extract_json_block(text: str): # 从 markdown 代码块或混合文本中提取 JSON import re match re.search(r(?:json)?\s*([\s\S]*?), text) if match: try: return json.loads(match.group(1)) except json.JSONDecodeError: return None return None测试用例我建议至少覆盖三种情况正常 JSON 输入、带 markdown 包裹的 JSON、完全无法解析的文本。SkillHub 支持在tests/目录下放 pytest 文件注册中心在发布新版本时会自动跑一遍测试不通过就不允许发布。# tests/test_format_json.py from handler import format_json def test_valid_json(): result format_json({name: test}, {type: object}) assert result[confidence] 1.0 assert result[errors] [] def test_markdown_wrapped(): raw 这是结果\njson\n{name: test}\n result format_json(raw, {type: object}) assert result[confidence] 0.8 def test_invalid_input(): result format_json(完全不是 JSON, {type: object}) assert result[confidence] 0.0 assert len(result[errors]) 03.4 发布与版本管理实操发布一个 skill 到注册中心命令很简单python scripts/publish.py --skill-dir ./skills/format-json --registry http://localhost:8080但这里有几个坑我踩过。第一版本号不能重复发布。如果你改了代码但忘了改skill.yaml里的 version发布会被拒绝。这是有意设计的防止覆盖已有版本。第二发布时会自动跑测试如果测试不通过发布失败注册中心不会记录这个版本。第三发布后旧版本不会立即失效已经拉取过旧版本的 Agent 仍然可以继续使用直到它们下次启动时才会拿到新版本。版本回滚也很方便python scripts/rollback.py --skill format-json --version 1.1.0 --registry http://localhost:8080这条命令会把注册中心里format-json的“最新版本”指针指回 1.1.0但不会删除 1.2.0 的记录。如果 1.2.0 有问题回滚之后新启动的 Agent 会拿到 1.1.0已经在跑的 Agent 不受影响。实操心得我建议每次发布 skill 之前先在本地跑一遍完整的集成测试确认新版本和所有依赖它的 Agent 都能正常协作。SkillHub 的单元测试只能保证 skill 本身没问题但 skill 和 Agent 之间的交互问题它管不了。4. SkillPack 实操用包管理思维分发 Skill4.1 初始化 SkillPack 项目与私有仓库SkillPack 的安装更简单它本身就是一个 Python 包pip install skillpack初始化一个 skill 项目skillpack init my-skill --template python这会生成一个标准化的目录结构my-skill/ ├── skillpack.yaml ├── src/ │ └── my_skill/ │ ├── __init__.py │ └── handler.py ├── tests/ │ └── test_handler.py └── README.mdskillpack.yaml是包描述文件定义了 skill 的名称、版本、入口点和依赖name: my-skill version: 0.1.0 description: 示例 skill entrypoint: my_skill.handler:main dependencies: - jsonschema4.0.0 - pyyaml6.0 python_requires: 3.10私有仓库的搭建SkillPack 支持两种模式本地文件仓库和HTTP 仓库。本地文件仓库适合小团队直接把打包好的 skill 放到一个共享目录里就行skillpack config set registry /shared/skillpack-registryHTTP 仓库需要跑一个简单的服务skillpack server --port 9090 --storage ./registry-storage4.2 打包、发布与安装的完整流程打包命令skillpack build这会在dist/目录下生成一个.skillpack文件本质上是一个 zip 包里面包含了 skill 的所有代码和元数据。发布到私有仓库skillpack publish --registry /shared/skillpack-registry在 Agent 项目里安装cd my-agent-project skillpack install my-skill安装完成后skill 会被放到项目的.skills/目录下同时skillfile.yaml里会自动添加依赖记录。Agent 代码里这样引用from skillpack import load_skill format_json load_skill(format-json) result format_json(raw_text..., target_schema{...})4.3 版本锁定与依赖冲突处理SkillPack 的版本锁定机制和 npm 很像。skillfile.yaml里写^1.2.0表示允许 1.x.x 的最新版本~1.2.0表示只允许 1.2.x1.2.0表示精确锁定。依赖冲突是包管理模式绕不开的问题。假设 Agent A 依赖format-json1.2.0Agent B 依赖format-json2.0.0而这两个版本不兼容。SkillPack 的处理方式是每个 Agent 项目独立安装自己的依赖树互不干扰。这跟 Python 虚拟环境是一个思路。但如果你在一个项目里同时依赖了两个不兼容的 skill 版本SkillPack 会报错并提示你解决冲突。常见的解决方式有三种升级其中一个依赖、使用 skill 的兼容层、或者把冲突的 skill 拆成两个独立的包。我个人的经验是尽量保持 skill 的向后兼容性。每次发布新版本时如果只是加字段就把 minor 版本号加一如果改了字段名或者删了字段才升 major 版本。这样大部分项目用^声明依赖就能自动拿到新功能不用频繁手动升级。5. 常见问题与排查技巧实录5.1 Skill 版本不一致导致的典型故障故障现象Agent 运行时报错KeyError: confidence但 skill 的 handler 里明明已经返回了这个字段。排查思路先确认 Agent 实际加载的是哪个版本的 skill。SkillHub 模式下访问http://registry:8080/skills/format-json/versions查看当前最新版本SkillPack 模式下检查.skills/目录下的skillpack.lock文件。大概率是 Agent 缓存了旧版本或者依赖声明写的是~1.1.0而新版本是1.2.0。解决方法SkillHub 模式下重启 Agent 即可SkillPack 模式下跑skillpack update format-json然后重新安装。5.2 注册中心连接超时的排查步骤SkillHub 依赖网络连接超时是最常见的故障。我整理了一个排查清单排查步骤检查内容常见原因1注册中心服务是否在运行进程崩溃、端口被占用2网络是否可达防火墙规则、DNS 解析失败3Redis 是否正常Redis 宕机、内存满、连接数超限4鉴权配置是否正确Token 过期、IP 白名单变更5注册中心日志查看logs/registry.log中的错误堆栈我遇到最多的是 Redis 内存满导致写入失败。SkillHub 会把 skill 的元数据缓存在 Redis 里如果 Redis 配置了maxmemory且没有设置淘汰策略写满之后就会报错。解决办法是给 Redis 设置maxmemory-policy allkeys-lru或者定期清理过期的缓存键。5.3 Skill 加载失败的常见原因速查表错误信息可能原因解决方法SkillNotFoundskill 名称拼写错误或未发布检查名称确认已发布到注册中心VersionConflict依赖的版本范围无法满足调整依赖声明或发布兼容版本SchemaValidationError输入参数不符合 schema检查调用方传参确认 schema 定义HandlerTimeouthandler 执行超过 timeout优化 handler 逻辑或调大 timeoutImportErrorhandler 依赖的包未安装在 skill 的依赖声明中添加PermissionDenied没有权限访问注册中心检查 Token 或网络访问控制5.4 多 Agent 协作时的 Skill 同步策略最后分享一个我在多 Agent 项目里总结的同步策略。核心原则是按迭代频率分层高频迭代的 skill每周至少改一次用 SkillHub 注册中心模式让所有 Agent 自动获取最新版本。中频迭代的 skill每月改一两次用 SkillPack 包管理模式各 Agent 按需升级。低频迭代的 skill半年不动直接内联在 Agent 代码里不值得抽出来管理。另外我建议给每个 skill 加一个stability字段标记它是experimental、stable还是deprecated。Agent 在加载 skill 时可以根据这个字段决定是否启用降级逻辑。比如experimental的 skill 加载失败时Agent 可以回退到内置的简单实现而不是直接崩溃。这个策略听起来有点复杂但实际用下来能省很多事。毕竟 skill 管理的目标不是“管得最严”而是“在可控的前提下让迭代最快”。找到适合自己团队的平衡点比照搬任何最佳实践都重要。

相关新闻

曲线钢轨受力分析与病害防治:从轮轨关系到养护实践

曲线钢轨受力分析与病害防治:从轮轨关系到养护实践

1. 曲线轨道上钢轨的受力之谜:它凭什么“跳舞”想起之前跟一位刚入行的工务兄弟聊天,他看着曲线段换下来的旧钢轨,跟我说:“你看这轨面,亮得跟镜子似的,用手一摸还全是毛刺,这到底是咋磨成这样的…

2026/10/14 12:49:52 阅读更多 →
AI Agent 沙箱搭建实战:容器化隔离方案与踩坑经验

AI Agent 沙箱搭建实战:容器化隔离方案与踩坑经验

1. 从零搭建一个 AI Agent 沙箱:我踩过的坑和最终跑通的方案最近半年,我一直在折腾 AI Agent 相关的东西。从最早的简单对话机器人,到后来能调用工具、能读写文件、能执行代码的复杂 Agent,越往后做越发现一个问题:Age…

2026/10/14 12:49:52 阅读更多 →
智慧养老院系统落地设计:从设备协议到等保合规的全栈实践

智慧养老院系统落地设计:从设备协议到等保合规的全栈实践

简介:本资源是一份面向养老机构信息化建设者、智能化系统集成商及智慧养老项目规划人员的专业级设计方案,聚焦解决传统养老院在安全监护、服务响应、健康管理和运营效率等方面的数字化短板。文件为单个PPTX格式演示文稿(8.32MB)&a…

2026/10/14 12:49:52 阅读更多 →

最新新闻

库存扣减的并发控制:乐观锁的应用

库存扣减的并发控制:乐观锁的应用

财务主管跨界写技术文,先交代缘由:公司商城搞限时促销,活动结束对账,账面库存和实物对不上,多卖了四十七件。排查一周,病根是库存扣减没做并发控制,两个请求同时读到同样的库存数,各…

2026/10/14 19:10:22 阅读更多 →
Python案例练习:图书管理系统

Python案例练习:图书管理系统

Python案例练习:图书管理系统、新增图书、查看所有图书、按书名搜索、修改图书信息、删除图书、保存数据到本地文件、从文件加载数据 """ 图书管理系统 新增图书、 查看所有图书、 按书名搜索、 修改图书信息、 删除图书、 保存数据到本地文件、 从文…

2026/10/14 19:10:22 阅读更多 →
防拍照泄密核心知识点合集精讲

防拍照泄密核心知识点合集精讲

在企业数据安全建设过程里,很多运维新人学习防泄密体系都是碎片化的。大多优先关注 U 盘拷贝、聊天软件外发、邮件附件导出这类传统泄密通道,很容易漏掉手机拍摄电脑屏幕这个低成本、高隐蔽性的泄密途径。很多企业投入预算搭建文档加密体系,管…

2026/10/14 19:10:22 阅读更多 →
Keepalived + DRBD 实现 NFS 文件服务高可用:架构、配置与避坑指南

Keepalived + DRBD 实现 NFS 文件服务高可用:架构、配置与避坑指南

简介:这份资源面向运维工程师与VoIP通信系统开发者,聚焦Freeswitch高可用架构的落地实践,通过Keepalived实现主备节点故障自动切换,解决单点故障导致通信服务中断的问题。压缩包共4个文件,约38KB,包含2个Sh…

2026/10/14 19:10:22 阅读更多 →
Reactor 3背压机制深度解析与生产级实践

Reactor 3背压机制深度解析与生产级实践

1. 项目概述:为什么背压不是“可选项”,而是Reactor 3的生存底线 你写完第一个 Flux.create() ,用 onNext() 疯狂发射数据,下游用 subscribe(System.out::println) 接收——一切丝滑。直到某天压测时,控制台突然…

2026/10/14 19:10:22 阅读更多 →
Python车险理赔车型识别与合规校验:数据工程实践指南

Python车险理赔车型识别与合规校验:数据工程实践指南

1. 项目背景与整体设计思路1.1 车型信息在车险理赔中的关键作用车险理赔看起来是“拍照—定损—打款”的简单流程,但真正做过车险数据的人都知道,车型信息是贯穿整个理赔链路的一个隐形骨架。从承保端的车型定价,到理赔端的配件价格与工时费计…

2026/10/14 19:09:21 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →