1. 为什么我要在 ECS 上彻底清掉 summarize
如果你在阿里云 ECS 上用 npm 装过@steipete/summarize这个 CLI,又恰好把它接进了 OpenClaw 的技能目录,那你大概率会遇到一个很别扭的情况:技能列表里还挂着 summarize,命令行里which summarize也还能找到路径,但真正跑起来却因为模型接口不兼容直接报错。我这次要处理的就是这种“删了一半”的状态——技能目录、全局 npm 包、用户配置、shell 环境变量、包装脚本,任何一处没清干净,它都会在下次启动时被重新加载。
这篇内容聚焦一个很具体的场景:在 ECS 上通过 npm 安装 summarize CLI 之后,如何把 summarize 技能和 CLI 一起彻底删除,并且用可复制的config.toml/settings.json骨架把 TaoToken 的统一 Key 接入方式重新理顺,最后给出删除后验证 CLI 不再加载 summarize 的具体命令和预期输出。适合已经装过 summarize、现在想换成统一模型入口的人,也适合正在整理 OpenClaw 技能目录、不想留残留配置的运维同学。
核心检索词先摆出来:summarize 是什么?它是一个命令行摘要工具,通过 npm 全局安装后提供summarize命令;CLI 是它的调用入口;npm 是安装来源;ECS 是运行环境;OpenClaw 是加载技能的地方。我们要做的是把这四者之间的关联全部切断,而不是只删一个目录。
2. 删除前先确认:summarize 到底藏在哪几个位置
动手之前先做一次全量排查,避免删漏。在 ECS 终端里依次执行下面几条命令,它们分别对应可执行文件、全局 npm 包、OpenClaw 技能目录、用户级配置目录四个位置。
which summarize npm list -g --depth=0 | grep summarize ls ~/.openclaw/workspace/skills/ | grep summarize ls ~/.summarize我实测下来的输出大致是这样,你可以对照自己的环境:
[root@iZ2ze11111jjihfdsaZ ~]# which summarize /root/.nvm/versions/node/v22.22.2/bin/summarize [root@iZ2ze11111jjihfdsaZ ~]# npm list -g --depth=0 | grep summarize ├── @steipete/summarize@0.14.1 [root@iZ2ze11111jjihfdsaZ ~]# ls ~/.openclaw/workspace/skills/ | grep summarize summarize [root@iZ2ze11111jjihfdsaZ ~]# ls ~/.summarize cache cache.sqlite这四行输出说明问题不止一个:which找到的是 nvm 下的软链,npm list说明全局包还在,技能目录里有一个summarize文件夹,用户目录下还有缓存数据库。只删其中任何一个,剩下的都会让 OpenClaw 在刷新技能时重新识别到它。
注意:
~/.summarize里的cache.sqlite是历史摘要缓存,删除后不影响其他工具,但如果你还想保留摘要记录,可以先备份再删。
3. TaoToken 前置:统一 Key 接入,替代零散的 summarize 配置
删掉 summarize 之后,摘要类需求并不会消失,所以更稳的做法是把模型调用收敛到一个统一入口。TaoToken 在这里扮演的就是这个角色:它提供统一的 API Key 和兼容接口,让你不用再为每个 CLI 单独配一套OPENAI_API_KEY和OPENAI_BASE_URL。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。
接入前你需要先拿到 Key,这一步在控制台的 API Keys 页面完成:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。拿到之后不要急着写进~/.bashrc,因为环境变量最容易变成“删不干净”的源头。更推荐写进项目级或工具级的配置文件,这样删除时目标明确。
如果你只是想先验证模型能不能通,可以直接用模型对话页面试一条请求:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。确认返回正常后,再落到下面的配置文件里。
4. 可复制配置:config.toml 与 settings.json 骨架
删除 summarize 之后,OpenClaw 的技能加载和模型调用需要重新指向统一入口。下面给两份骨架,按你的实际工具选择。第一份是config.toml,适合放在项目根目录或 OpenClaw 的配置目录:
# config.toml [model] provider = "taotoken" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoTokenKey" model = "claude-3-5-sonnet" [skills] # 显式声明启用的技能,避免残留技能被自动加载 enabled = ["search", "code", "file"] disabled = ["summarize"] [workspace] skills_dir = "~/.openclaw/workspace/skills"第二份是settings.json,适合用 JSON 配置的工具链:
{ "model": { "provider": "taotoken", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoTokenKey", "model": "claude-3-5-sonnet" }, "skills": { "enabled": ["search", "code", "file"], "disabled": ["summarize"] }, "workspace": { "skillsDir": "~/.openclaw/workspace/skills" } }关键点是disabled里显式写上summarize。即使目录删除有遗漏,配置层也会阻止它被加载。base_url统一指向https://taotoken.net/api,这样后续换模型只需要改model字段,不用再动环境变量。
提示:不要把 Key 提交到 Git。生产环境建议用环境变量注入,但注入的变量名要统一,比如
TAOTOKEN_API_KEY,而不是散落的OPENAI_API_KEY。
5. 删除步骤:从技能目录到 npm 缓存逐层清理
配置准备好之后,开始正式删除。顺序很重要:先删技能目录,再卸 npm 包,最后清配置和缓存。
第一步,删除 OpenClaw 中的 summarize 技能:
rm -rf ~/.openclaw/workspace/skills/summarize如果还装过其他变体,比如summarize-llm,可以一并处理:
rm -rf ~/.openclaw/workspace/skills/summarize*第二步,卸载全局 npm 包:
npm uninstall -g @steipete/summarize执行后立刻验证:
summarize --version预期输出是command not found或-bash: summarize: 未找到命令。如果还能输出版本号,说明软链没断,继续往下走。
第三步,删除用户级配置目录:
rm -rf ~/.summarize第四步,清理 shell 环境变量。用编辑器打开~/.bashrc:
nano ~/.bashrc查找并删除包含summarize、summarize_deepseek、OPENAI_API_KEY、OPENAI_BASE_URL的行。这里要特别小心:OPENAI_API_KEY和OPENAI_BASE_URL如果还被llm或curl等其他工具使用,就必须保留;只有确认它们仅为 summarize 设置时才删除。保存流程是Ctrl+O→ 回车 →Ctrl+X,然后重新加载:
source ~/.bashrc第五步,删除可能的包装脚本:
rm -f /usr/local/bin/summarize第六步,清理 npm 缓存:
npm cache clean --force第七步,进入 OpenClaw 聊天界面,输入refresh skills,此时技能列表中不应再出现 summarize。
6. 验证请求:确认 CLI 不再加载 summarize
删除完成后,用下面四条命令做最终验证。它们分别检查可执行文件、全局包、技能目录、用户配置目录。
which summarize npm list -g --depth=0 | grep summarize ls ~/.openclaw/workspace/skills/ | grep summarize ls ~/.summarize预期结果是:which summarize显示which: no summarize in (...);npm list无输出;技能目录 grep 无输出;~/.summarize提示No such file or directory。四条全部符合,才算彻底删除。
接着验证 TaoToken 接入是否正常。用 curl 发一条最小请求:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-3-5-sonnet", "messages": [{"role": "user", "content": "ping"}] }'预期返回 JSON 中包含choices字段和模型回复内容。如果返回 401,检查 Key 是否写错;如果返回 404,检查base_url是否漏了/api。这一步通了,说明摘要类需求可以走统一入口,不再依赖 summarize CLI。
7. 本篇常见错排查
错误一:summarize --version仍然输出版本号。说明 nvm 下的软链还在。检查which summarize返回的路径,手动删除对应文件,再执行npm uninstall -g @steipete/summarize。
错误二:refresh skills后 summarize 还在列表里。大概率是技能目录没删干净,或者存在summarize-llm之类的变体。用ls ~/.openclaw/workspace/skills/ | grep summarize再查一遍,配合rm -rf删除。
错误三:删了OPENAI_API_KEY之后其他工具报错。这就是前面提醒的保留问题。重新在~/.bashrc里加回该变量,只删除 summarize 专属的别名和函数。
错误四:curl 请求返回 401 或 404。401 是 Key 问题,去控制台重新生成;404 是路径问题,确认base_url为https://taotoken.net/api,不要多加或少加/v1。
错误五:npm cache clean --force报权限错误。在 ECS 上如果 npm 是全局安装,可能需要sudo,或者检查 nvm 目录权限。不建议直接chmod 777,优先用sudo -E保留环境变量。
8. 后续接入与长期编码建议
删除 summarize 只是清理动作,真正省事的是把模型调用统一到 TaoToken。如果你后续还要在 ECS 上跑编码类任务或 Agent,建议直接看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。它适合长期编码、批量任务和需要稳定 Key 的场景,比每个 CLI 单独配一套环境变量要清晰得多。
接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有完整的接口说明和参数对照。如果你用的是 Claude Code 这类工具,可以参考 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code&utm_campaign=rewrite 里的接入方式,把base_url指向统一入口。
最后留一个实用习惯:每次装新 CLI 之前,先想清楚它的 Key 从哪来、配置写在哪、删除时删哪几个路径。把这三件事写进自己的运维笔记,下次清理就不会再出现“删了技能但 CLI 还在”的情况。