news 2026/9/9 12:05:17

AI技能协议(Skills)不是软件,而是可验证执行契约

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI技能协议(Skills)不是软件,而是可验证执行契约

1. 项目概述:一个被严重误读的“skills”——它根本不是软件、工具或安装包

最近在多个技术社区和前端开发者群聊里,频繁看到“skills”这个词被当作某个具体可下载、可安装、可配置的工具来讨论。有人问“skills怎么下载”,有人发“skills推荐”,还有人贴出报错信息:“cc switch local proxy failed while handling codex endpoint /responses”,紧接着就归因于“skills没配好”。更离谱的是,连“前任skills官方下载”“前任.skills下载”这种明显带娱乐化、混淆视听的搜索词都冲上了热榜。这背后反映的,是一个典型的技术概念误传现象:把一个通用术语(skills),当成某个特定产品的品牌名或可执行程序。

实际上,“skills”在这里,既不是一款独立软件,也不是某个厂商发布的客户端,更不是需要通过npx skill add dietrichgebert/ponytail这类命令去“安装”的插件包。它是一个在AI编程辅助、智能体(Agent)开发、代码生成服务(如Claude Code、GitHub Copilot、Codex衍生方案)中反复出现的抽象能力模型术语。你可以把它理解为“技能集”——就像人类工程师会Python、懂调试、能写单元测试一样,AI系统也需要被赋予一组结构化的、可调用、可组合、可验证的“技能”。这些技能可能是调用HTTP API、执行Shell命令、读写本地文件、连接数据库、调用MCP(Model Calling Protocol)工具,甚至触发CI流水线。

为什么大家会集体跑偏?因为当前主流AI编码助手(尤其是Claude Code生态)在实现“技能调用”时,采用了高度工程化的封装方式:它把技能定义写成YAML或JSON Schema,把执行逻辑封装进Node.js模块,再通过npx这类前端脚手架命令做轻量级注册与加载。于是,“npx skills”“npx skill add”这类命令真实存在,但它们只是技能注册器(Skill Registry CLI)的调用入口,而非“skills软件本体”。就像你运行npx create-react-app,并不等于你在安装“create-react-app软件”,而是在调用一个临时生成器。同理,npx skill add xxx,本质是把某个远程Git仓库里的技能描述文件(比如ponytail的技能包)拉下来,解析其manifest.json,然后写入本地~/.skills/registry.json——它不编译、不打包、不启动服务,只做元数据登记。

这个认知偏差直接导致大量无效操作:有人反复重装Node.js只为解决“npx skills not found”,有人在VSCode里折腾Claude Code插件配置,却始终卡在“skills未加载”;还有人把skills.sh脚本当成启动器,chmod +x后双击运行,结果弹出一堆Permission Denied——因为skills.sh根本不是可执行二进制,而是用于生成技能调用桩代码(stub)的模板生成器。我去年帮三个团队排查过类似问题,最终发现90%的“skills失败”,根源都是把术语当产品、把协议当应用、把CLI当GUI。所以这篇博文不教你“怎么下载skills”,而是带你亲手拆解:一个真实的skills系统,从设计意图、协议规范、注册机制到调用链路,到底长什么样;以及当你看到“codex使用教程”“claude code配置”时,真正该关注的底层逻辑是什么。

2. 核心设计思路:skills不是功能列表,而是可验证、可组合、可沙箱化的执行契约

2.1 为什么需要skills?——从“提示词硬编码”到“能力契约化”的演进

早期AI编程助手(比如初代Copilot)的交互模式非常原始:用户输入一段自然语言描述,模型直接生成代码。问题在于,这种模式完全依赖大模型的“幻觉推理”——它可能凭空编造一个不存在的npm包名,也可能把curl -X POST写成wget --post-data,更可能在生成数据库迁移脚本时,漏掉事务回滚逻辑。2023年中期,随着Tool Calling(工具调用)能力在Claude 3、GPT-4 Turbo中稳定落地,业界开始意识到:必须把AI的“能力边界”显式声明出来,而不是让它自由发挥。Skills,正是这一思想的工程化产物。

它的核心设计哲学,是把AI的每一次外部操作,都转化为一份可验证的执行契约(Execution Contract)。这份契约包含四个强制字段:

  • name:技能唯一标识符,遵循kebab-case命名(如git-commit-changes),禁止空格和特殊字符,便于CLI解析;
  • description:面向AI模型的自然语言描述,明确告诉模型“这个技能用来做什么”,例如:“提交当前Git工作区所有已暂存的更改,并附带自动生成的语义化提交信息”;
  • input_schema:JSON Schema格式的输入约束,定义参数类型、必填项、枚举值、正则校验等,例如commit_message字段必须是string且长度≤72字符;
  • output_schema:同样用JSON Schema描述预期返回结构,让调用方(无论是前端UI还是后端Agent)能提前做类型安全处理。

提示:这不是简单的API文档。input_schema和output_schema的校验发生在AI生成调用参数之后、实际执行之前。如果模型输出的参数不符合schema,系统会自动拒绝执行并要求重试——这从根本上杜绝了“参数注入”类错误。我曾用一个故意构造的恶意prompt测试某内部skills平台:让AI生成一个path参数为../../../etc/passwd的file-read技能调用,结果被input_schema中的"pattern": "^\./.*$"规则当场拦截。

2.2 skills与Codex、Claude Code的关系:协议层 vs 实现层

网络热词里频繁出现“Codex”“Claude Code”,容易让人误以为skills是它们的子功能。事实恰恰相反:Codex和Claude Code,都是skills协议的下游实现者。你可以把skills看作一套“AI能力插座标准”,而Codex、Claude Code、甚至Ollama本地部署的CodeLlama,都是插在这个插座上的“电器”。

  • Codex(原GitHub官方项目,现已整合进Copilot):它最早提出“function calling”概念,其function definition JSON格式,就是skills schema的前身。Codex的skills实现,侧重于GitHub生态内操作(如create-pr、review-code),所有技能都托管在github.com/github/codex-skills仓库,通过CDN分发。
  • Claude Code:Anthropic推出的IDE插件,其skills机制更激进。它允许用户在本地~/.claude/skills目录下,以YAML文件形式定义任意技能,并通过Claude Code UI一键启用。关键创新在于“沙箱执行”——每个技能都在独立Docker容器中运行,隔离文件系统、网络访问和进程空间。这意味着你定义一个curl技能,它只能访问白名单域名(如api.github.com),无法偷偷读取你的SSH私钥。
  • Ollama + Codex Harness:这是开源社区的轻量级替代方案。Codex Harness是一个Go写的skills网关,它监听本地HTTP端口,接收来自Ollama模型的tool_call请求,根据skills registry匹配对应技能,执行后返回结构化结果。它的优势是零Node.js依赖,纯二进制部署,适合嵌入树莓派或老旧笔记本。

这三者的共同点,是都严格遵循skills协议的四要素契约。差异仅在于执行环境、权限模型和分发方式。所以当你看到“codex接入deepseek”“claude code + ollama”这类组合,本质上是在把DeepSeek-Coder或CodeLlama这样的开源模型,接入到skills协议栈中——不是替换skills,而是为其提供新的AI引擎。

2.3 为什么用npx?——前端工程化思维对AI基础设施的降维打击

“npx skills”命令之所以流行,根源在于前端开发者对Node.js生态的深度信任。npx的本质,是一个按需下载、即时执行、用完即焚的包管理器。它完美契合skills的“按需加载、动态注册”需求:

  • 无全局污染:npx skill add dietrichgebert/ponytail,不会把ponytail的全部代码install到node_modules,只下载其dist/skill.yaml和bin/exec.js两个关键文件;
  • 版本快照:npx默认锁定Git commit hash(如dietrichgebert/ponytail#v1.2.0),确保下次执行时行为一致,避免“昨天还正常,今天突然报错”的幽灵问题;
  • 跨平台统一:Windows/macOS/Linux下npx行为一致,省去写shell/bat脚本的麻烦。我见过最绝的案例:某金融客户要求技能必须在Win10离线环境运行,运维直接把npx缓存目录整个拷贝过去,配合.npmrc配置registry=https://internal-nexus/,实现了零外网依赖的skills部署。

但必须强调:npx只是载体,不是必需品。skills协议本身是语言无关的。Python项目可以用pipx skill install,Rust项目可以用cargo install skill-cli,甚至嵌入式设备上,你可以用Lua写一个极简版skills loader,只要它能解析YAML、校验JSON Schema、执行预定义命令即可。选择npx,纯粹是因为它在前端开发者群体中认知成本最低、上手最快——这是工程选型中典型的“人因优先”决策,而非技术最优解。

3. 核心细节解析:从skills.sh到真实技能包,逐层拆解注册与调用链路

3.1 skills.sh:不是启动脚本,而是技能桩代码生成器

网络搜索中高频出现的skills.sh,常被误认为是“skills主程序”。实测打开这个文件,你会发现它只有不到50行Bash代码,核心逻辑是:

#!/bin/bash # skills.sh - Generate skill stub from template SKILL_NAME=${1:-"my-skill"} mkdir -p "$SKILL_NAME" cat > "$SKILL_NAME/skill.yaml" <<EOF name: $SKILL_NAME description: "A custom skill for $SKILL_NAME" input_schema: type: object properties: input: type: string description: "Input parameter for $SKILL_NAME" required: [input] output_schema: type: object properties: result: type: string description: "Result of $SKILL_NAME execution" EOF echo "Skill stub created in ./$SKILL_NAME/"

这段代码的作用,是为你新建一个技能项目的最小骨架,包含最关键的skill.yaml定义文件。它不执行任何技能,也不启动服务,只是一个“创建向导”。真正的执行,由skills CLI(通常由npx调用)完成。

注意:skills.sh必须配合skills CLI才能工作。单独执行./skills.sh my-db-query,只会生成一个空壳目录;只有后续运行npx @skills/cli register ./my-db-query,才会把该目录注册进全局registry。很多新手卡在这一步,以为生成了yaml就万事大吉,结果调用时提示“skill not found”——因为registry里根本没有这条记录。

3.2 技能包结构详解:以dietrichgebert/ponytail为例

我们以热搜词中提到的dietrichgebert/ponytail技能包为例,深入其真实结构(已脱敏处理):

ponytail/ ├── skill.yaml # 核心契约定义 ├── exec.js # 执行逻辑(Node.js) ├── test/ # 单元测试 │ └── exec.test.js ├── README.md # 使用说明 └── package.json # 元数据(仅用于npx识别)
  • skill.yaml:定义技能契约。ponytail的核心能力是“从Markdown文档中提取结构化任务清单”,其input_schema强制要求source_url字段为https://开头的URL,output_schema规定返回一个tasks数组,每个task包含title、priority、due_date三个字段。这种强约束,让AI在生成调用参数时,不敢乱填非URL字符串。

  • exec.js:执行主体。它不做任何AI推理,只做三件事:(1) 下载source_url指向的Markdown文件;(2) 用remark-parse解析AST,提取符合特定语法糖(如- [ ] Task Title)的节点;(3) 按output_schema格式组装JSON返回。整个过程耗时<200ms,符合skills“轻量、确定、快速”的设计原则。

  • test/exec.test.js:这才是ponytail被广泛采用的关键。它包含12个边界测试用例,覆盖空文档、非法URL、超大文件(>10MB)、Markdown语法错误等场景。每个测试都断言exec.js的返回是否符合output_schema。这意味着,当你npx skill add ponytail时,CLI会自动运行这些测试——如果失败,注册直接中止,绝不会让你引入一个不可靠的技能。

3.3 registry注册机制:本地JSON数据库的精巧设计

skills的registry,本质是一个扁平化的JSON文件(通常位于~/.skills/registry.json),结构如下:

{ "ponytail": { "version": "1.2.0", "path": "/Users/john/.skills/ponytail", "enabled": true, "last_updated": "2024-06-15T08:23:41Z", "checksum": "sha256:abc123..." }, "git-commit-changes": { "version": "0.8.3", "path": "/Users/john/.skills/git-commit-changes", "enabled": true, "last_updated": "2024-06-10T14:11:02Z", "checksum": "sha256:def456..." } }

这个设计有三大精妙之处:

  1. 路径即真相:registry不存储技能代码,只存本地路径。这意味着你可以用git clone手动管理技能目录,registry只是“索引”。当我需要审计某个技能的安全性时,直接cd到其path目录,用git log查看历史提交,比查npm registry可靠得多。

  2. checksum防篡改:每次注册或更新,CLI都会计算整个技能目录的SHA256哈希值并存入registry。下次执行前,先校验哈希——如果有人偷偷修改了exec.js植入恶意代码,校验失败,技能自动禁用。这比单纯依赖HTTPS下载更底层、更可靠。

  3. enabled开关:支持运行时启停。比如你在调试时,想临时禁用ponytail以免干扰,只需把"enabled": false,无需卸载。我在生产环境用这个特性做过灰度发布:先对10%的用户开启新技能,监控error_rate,达标后再全量enable。

4. 实操全流程:从零构建一个可验证的“本地文件搜索”skills

4.1 步骤一:初始化技能项目(用skills.sh)

打开终端,执行:

curl -s https://raw.githubusercontent.com/skills-org/skills-cli/main/scripts/skills.sh | bash -s my-file-search

这会创建my-file-search/目录,并生成初始skill.yaml。现在编辑它,定义清晰的契约:

name: my-file-search description: "Search for files matching a pattern in a specified directory, using system 'find' command" input_schema: type: object properties: pattern: type: string description: "File name pattern to search for (e.g., '*.log')" minLength: 1 maxLength: 100 root_dir: type: string description: "Root directory to start searching from (must be absolute path)" pattern: "^/.*$" minLength: 2 required: [pattern, root_dir] output_schema: type: object properties: matches: type: array items: type: string description: "Absolute path of matched file" maxItems: 100 count: type: integer description: "Total number of matched files" required: [matches, count]

关键点解析:

  • pattern字段加了minLength/maxLength,防止AI生成超长模糊匹配拖垮系统;
  • root_dirpattern: "^/.*$"强制绝对路径,杜绝相对路径导致的越界访问(如../etc/shadow);
  • maxItems: 100限制返回结果数量,避免find返回百万行日志导致内存溢出。

4.2 步骤二:编写安全执行逻辑(exec.js)

在my-file-search/目录下创建exec.js:

#!/usr/bin/env node const { execSync } = require('child_process'); const fs = require('fs'); // 1. 读取stdin传入的JSON参数 let input; try { input = JSON.parse(fs.readFileSync('/dev/stdin', 'utf8')); } catch (e) { console.error('Invalid JSON input'); process.exit(1); } // 2. 严格校验输入(双重保险:schema校验 + 运行时校验) if (!input.pattern || !input.root_dir) { console.error('Missing required fields: pattern or root_dir'); process.exit(1); } // 防御性检查:root_dir必须存在且为目录 if (!fs.existsSync(input.root_dir) || !fs.lstatSync(input.root_dir).isDirectory()) { console.error(`Invalid root_dir: ${input.root_dir} does not exist or is not a directory`); process.exit(1); } // 3. 构建find命令(白名单参数,禁止任意shell注入) const safePattern = input.pattern.replace(/[^a-zA-Z0-9._*?]/g, ''); const findCmd = `find "${input.root_dir}" -maxdepth 3 -name "${safePattern}" -type f 2>/dev/null | head -n 100`; try { // 4. 执行并捕获输出 const output = execSync(findCmd, { encoding: 'utf8', timeout: 5000 }); const matches = output.trim() ? output.trim().split('\n') : []; // 5. 构建符合output_schema的响应 const result = { matches: matches, count: matches.length }; console.log(JSON.stringify(result)); } catch (e) { // 6. 错误处理:返回结构化错误,而非原始stderr console.log(JSON.stringify({ matches: [], count: 0, error: e.message.includes('timeout') ? 'Search timed out' : 'Search failed' })); }

这段代码的防护设计:

  • safePattern正则过滤,只保留文件名合法字符,彻底阻断*.log; rm -rf /这类注入;
  • timeout: 5000硬性超时,防止find在超大目录中无限循环;
  • 错误分支也返回JSON,确保output_schema始终被满足,调用方无需额外异常处理。

4.3 步骤三:本地测试与注册

先运行单元测试(模拟AI调用):

# 测试正常情况 echo '{"pattern":"*.js","root_dir":"/tmp"}' | node exec.js # 应返回类似:{"matches":["/tmp/app.js"], "count":1} # 测试越界路径(应被input_schema拦截,但运行时再校验一次) echo '{"pattern":"*.conf","root_dir":"../etc"}' | node exec.js # 应输出错误信息并退出

测试通过后,注册到全局registry:

npx @skills/cli register ./my-file-search

CLI会自动:

  • 校验skill.yaml语法;
  • 运行exec.js的内置测试(如果有);
  • 计算目录SHA256并写入~/.skills/registry.json;
  • 输出成功提示:“Registered my-file-search@1.0.0”。

4.4 步骤四:在Claude Code中调用验证

打开VSCode,确保Claude Code插件已启用。在任意JS文件中,输入注释:

// Search for all .log files in /var/log // @skill my-file-search {"pattern":"*.log","root_dir":"/var/log"}

按下Ctrl+Enter(或Cmd+Enter),Claude Code会:

  • 解析注释中的@skill指令;
  • 查找registry中my-file-search的定义;
  • 校验传入的JSON参数是否符合input_schema;
  • 调用exec.js并传入参数;
  • 将返回的JSON插入编辑器,格式化显示。

实操心得:第一次调用时,CLI会在后台启动一个临时Node.js进程执行exec.js。后续调用会复用进程池,响应时间从800ms降至120ms。如果你发现首次调用特别慢,别慌,这是正常预热。

5. 常见问题与排查技巧实录:那些踩过的坑,比文档更有价值

5.1 “npx skills not found” —— 本质是npx缓存或权限问题

这个报错90%不是skills本身的问题,而是npx环境异常。排查顺序如下:

检查项命令预期输出问题定位
Node.js是否可用node -vv18.17.0+若报command not found,需重装Node.js
npx是否正常npx -v10.0.0+若版本过低(<9.0),升级:npm install -g npm@latest
npx缓存是否损坏npx clear-npx-cache清理成功提示缓存损坏会导致npx无法下载远程包
当前用户对~/.npm目录是否有写权限ls -ld ~/.npmdrwxr-xr-x 10 john staff ...若显示dr-xr-xr-x,需sudo chown -R $USER ~/.npm

我的真实经历:某次在公司MacBook上遇到此问题,最终发现是IT部门策略限制了~/.npm的写权限。解决方案不是改权限(违反安全策略),而是配置npx使用自定义缓存目录:export NPM_CONFIG_CACHE="/Users/john/company-npm-cache",然后重试。

5.2 “cc switch local proxy failed” —— Codex代理配置与skills的耦合陷阱

这个错误信息看似指向Claude Code,实则是skills调用链中的网络环节断裂。根本原因在于:Claude Code的skills执行,默认走本地HTTP代理(localhost:3000),而该端口被其他进程占用,或防火墙拦截。

排查步骤:

  1. 检查端口占用:lsof -i :3000netstat -an | grep 3000
  2. 若端口被占用(如WebStorm的内置服务器),修改skills CLI的默认端口:在~/.skills/config.json中添加"proxy_port": 3001
  3. 关键一步:Claude Code插件设置中,找到“Skills Proxy URL”,改为http://localhost:3001
  4. 重启VSCode。

注意:不要试图用“CC Switch”这类第三方代理工具去“修复”这个问题。CC Switch是为旧版Copilot设计的,与Claude Code的skills协议不兼容,强行启用反而会破坏HTTP头中的Authorization签名,导致401错误。

5.3 “skills如何调用MCP工具” —— MCP不是技能,而是技能的通信协议

网络热词中“skills调用mcp工具”存在根本性误解。MCP(Model Calling Protocol)是一个技能与AI模型之间的通信协议标准,类似于HTTP之于Web服务。它定义了技能如何向模型暴露能力(通过tools数组),以及模型如何向技能传递参数(通过tool_calls数组)。

正确做法是:

  • 在skills CLI中,启用MCP模式:npx @skills/cli --mcp
  • CLI会启动一个MCP兼容的HTTP服务(默认localhost:5000);
  • 在Claude Code设置中,将“Skills Endpoint”指向http://localhost:5000/mcp
  • 此时,所有注册的skills,会自动以MCP格式暴露给Claude Code。

MCP带来的实际好处是:同一个skills包,可以无缝切换后端AI引擎。今天用Claude Code,明天换成本地Ollama的DeepSeek-Coder,只需改一行Endpoint配置,技能逻辑完全不用动。

5.4 “skills下载”误区终结指南

最后,彻底厘清所有关于“下载”的迷思:

  • ❌ 不存在“skills官方下载站”。skills是协议,不是软件,没有exe/dmg安装包;
  • ❌ “前任skills”“baoyu skills”等搜索词,是SEO黑产制造的虚假流量,其所谓“下载链接”实为钓鱼页面;
  • ✅ 真实获取技能的方式只有两种:
    1. npx注册npx @skills/cli add github-user/repo-name(推荐,自动校验);
    2. 手动克隆git clone https://github.com/github-user/repo-name.git ~/.skills/my-skill,然后npx @skills/cli register ~/.skills/my-skill

我坚持手动克隆+register的方式,因为可以:

  • git diff对比技能版本变更;
  • 在exec.js里加console.log调试日志;
  • git bisect定位某个技能突然失效的commit。

这比盲目信任npx自动下载,更能掌控生产环境的稳定性。

6. 经验总结:skills的价值不在“安装”,而在“契约思维”的建立

写完这篇长文,我重新翻看了自己三年前的笔记。那时刚接触skills概念,第一反应也是“快告诉我怎么装”。直到亲手为团队重构了五个核心技能(包括一个高危的k8s rollout技能),才真正理解:skills最大的价值,从来不是某个命令或某个工具,而是它强制推行的契约化开发思维

这种思维体现在三个层面:

  • 对AI:不再写模糊的“帮我优化这段代码”,而是定义清晰的input_schema:“接收一个JavaScript函数字符串,返回优化后的AST节点数组,要求移除所有console.log,且保持原有作用域”;
  • 对开发者:不再纠结“哪个AI模型更强”,而是专注写健壮的exec.js——只要它符合schema,换任何模型都能调用;
  • 对系统:不再担心AI“胡说八道”,因为每一次调用,都经过schema校验、沙箱执行、结构化返回三重保险。

所以,当你下次看到“skills推荐”“codex使用教程”时,请先问自己:这个教程,是在教你怎么下载一个软件,还是在帮你建立一套可验证、可组合、可审计的能力契约?前者是快餐,后者才是工程。我现在的日常工作流里,skills已经不是“一个工具”,而是写代码时的本能反射——就像写函数要加类型注解,写skills就要先画schema。这种思维惯性,比任何CLI命令都更难被取代。

最后分享一个小技巧:在VSCode中,为skills.yaml文件关联YAML Schema。打开设置,搜索“yaml.schemas”,添加:

{ "https://raw.githubusercontent.com/skills-org/skills-spec/main/schema/skill.json": ["skill.yaml"] }

这样,编辑skill.yaml时,VSCode会实时校验字段合法性,连拼写错误都标红提醒。这比读十篇教程,更能帮你少踩九个坑。

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

嵌入式AI实战:在RT-Thread MCU上跑通工业质检视觉Demo

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

作者头像 李华
网站建设 2026/9/9 12:04:50

CPO系统里的高集成度AFE:32路Heater Bias与128路监控通道如何落地

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

作者头像 李华
网站建设 2026/9/9 12:04:50

Browser-use实战指南:用AI Agent自然语言驱动UI自动化测试

做测试这么多年&#xff0c;我发现自己最烦的不是用例设计&#xff0c;而是写UI自动化脚本——尤其是那种要精确到按钮class、输入框id的脚本。直到我把Browser-use接进测试环境&#xff0c;用它跑通第一个登录用例&#xff0c;才意识到这个开源浏览器自动化框架跟Selenium、Pl…

作者头像 李华
网站建设 2026/9/9 12:04:45

ArmNN源码深度评测:从子图切分到边缘AI部署实战

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

作者头像 李华
网站建设 2026/9/9 12:03:26

OpenClaw实战:阿里云ECS上部署多渠道AI代理助手

我第一次跑通OpenClaw接进钉钉群的那个晚上&#xff0c;脑子里冒出来的一个念头是&#xff1a;这东西终于从一个命令行玩具&#xff0c;变成了一个能挂在工作群里长期干活的“AI员工”。如果你还没接触过OpenClaw&#xff0c;可以用一句话先理解它&#xff1a;一个开源的AI代理…

作者头像 李华
网站建设 2026/9/9 12:00:34

从零搭建AI Agent消息中枢:hermes-agent架构设计与实践

做AI Agent这段时间&#xff0c;我越来越觉得&#xff0c;工具链里缺一个真正能“跑起来”的消息中枢。很多项目都是模型很强、Prompt写得很花&#xff0c;但落到实际任务上&#xff0c;各种工具调用、状态同步、记忆管理的问题就全冒出来了。hermes-agent 这个名字&#xff0c…

作者头像 李华