☰
播客内容如何高效转Skills:用TaoToken统一Key把87个Lenny‘s Product Skills接进Claude Code与Cursor
2026/9/28 19:36:59 网站建设 项目流程

1. 播客转 Skills 的真实卡点:不是转写,是“接不进去”

把播客变成 Skills,很多人第一反应是“先转写”。我一开始也这么想,结果转写稿堆了几十万字,真正能用的 SKILL.md 一个都没落地。问题不在转写质量,而在链路断成了三截:音频转写只产出长文本,长文本没有按“用户任务”切分,切分完的片段又没有稳定的模型通道去批量抽取和验证。更麻烦的是,Claude Code 和 Cursor 各自要配一套 Key、一套 Base URL,87 个 Lenny's Product Skills 想同时接进两个工具,光环境变量就能把人绕晕。

这篇就按我实际跑通的顺序写:先把播客转写切成可匹配的 chunk,再用统一 Key 的 API 通道批量抽取成 SKILL.md,最后把 87 个 Skills 分别挂到 Claude Code 和 Cursor 里做端到端验证。核心检索词就三个:SKILL.md 怎么写、Claude Code 怎么加载 Skills、Cursor 怎么复用同一套 Key。适合已经在用 Claude Code 或 Cursor、手里有一堆播客/文章素材、想把它们变成可复用工作流的人。

我试过最笨的办法:手动把每期播客的精华段落复制到一个 Markdown 里,再让模型总结。做到第 5 期就放弃了,因为格式不统一、引用找不到出处、换一个工具又要重配。后来改成“先定 taxonomy,再批量抽取,最后统一通道验证”,87 个 Skills 才真正跑起来。

2. 前置准备:用 TaoToken 统一 Key 打通 Claude Code 与 Cursor

2.1 为什么需要统一 Key

Claude Code 走的是 Anthropic 协议,Cursor 走的是 OpenAI 兼容协议,两边默认的接入点不一样。如果分别申请 Key,你会遇到三个问题:额度分散、模型版本不一致、排障时不知道是哪条通道出的错。TaoToken 的做法是提供一个统一入口,模型对话、Coding Plan、API Keys 都在一个控制台里管理,Claude Code 和 Cursor 共用同一个 Key,只是 Base URL 和协议头不同。

官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= API 地址:https://taotoken.net/api

2.2 拿到 Key 并确认可用模型

登录后进控制台,在 API Keys 页面创建一个 Key。建议按用途分两个:一个给批量抽取脚本用,一个给 Claude Code / Cursor 日常调用用,方便后面看用量。创建完先别急着配工具,用一条 curl 确认通道通不通。

curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "只回复 ok"}], "max_tokens": 16 }'

返回里有choices[0].message.content就说明 Key 和通道都正常。这一步别跳过,后面 Claude Code 报 401 时你会感谢自己先验过。

2.3 把 Key 写进环境变量

不要硬编码在脚本里。macOS / Linux 写进~/.zshrc或~/.bashrc:

export TAOTOKEN_API_KEY="sk-你的key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"

Windows 用系统环境变量面板加同名变量,或者 PowerShell 里$env:TAOTOKEN_API_KEY="sk-..."临时生效。配完source ~/.zshrc再echo $TAOTOKEN_API_KEY确认。

3. 可复制配置:SKILL.md 骨架 + Claude Code + Cursor

3.1 SKILL.md 骨架(87 个 Skills 共用)

Lenny's Product Skills 仓库里每个 skill 是一个目录,核心是SKILL.md。我按它的结构抽了一个通用骨架,你批量生成时把变量替换掉即可。关键是description里的触发条件要写清楚,Claude Code 靠它决定什么时候自动加载。

--- name: writing-prds description: Use when someone is writing, reviewing, or improving a PRD, product spec, or feature brief. Triggers on "写 PRD", "product requirements", "feature spec". --- # Writing PRDs ## How to Help 你是一个严格的产品评审官,不是只会点头的助手。先诊断,再给大纲,最后补全。 ## Diagnostic Questions 1. Why now?不做会有什么代价? 2. 首要成功指标是什么?guardrail 是什么? 3. 首版必须覆盖的 3 个高频场景是什么? ## Core Principles - Working Backwards:先写 PR/FAQ,再写功能列表。 - Demos before Memos:AI 功能先跑通 20 条对话用例。 - 成功指标必须可量化,禁止写“提升体验”。 ## Common Mistakes to Flag - 只写功能列表,不写 out of scope。 - 成功指标模糊,无法验证。 - 忽略幻觉与兜底策略。 ## Output Structure 背景与 Why Now → 目标与指标 → 用户与场景 → 方案概述 → 风险与护栏 → 试点与迭代

批量生成时,name用 skill 的 slug,description用“Use when someone is...”句式,Core Principles从播客转写里抽 3–5 条,Common Mistakes至少 3 条。87 个 Skills 的差异主要在这三块,骨架本身不用改。

3.2 Claude Code 配置:settings.json

Claude Code 读~/.claude/settings.json。把 Base URL 指向 TaoToken,Key 用环境变量引用,避免明文。

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "${TAOTOKEN_API_KEY}", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" }, "permissions": { "allow": ["Read", "Write", "Bash(npx skills:*)"] } }

Skills 放到项目的.claude/skills/下,每个 skill 一个子目录。Claude Code 启动时会扫描这个目录,description匹配到你的提问就自动加载。也可以显式调用/writing-prds。

3.3 Cursor 配置:config.toml

Cursor 走 OpenAI 兼容协议,配置在~/.cursor/config.toml(或项目级.cursor/config.toml)。同一个 Key,只换协议字段。

[models.custom.taotoken] provider = "openai" base_url = "https://taotoken.net/api/v1" api_key = "${TAOTOKEN_API_KEY}" model = "claude-sonnet-4-20250514" [chat] default_model = "taotoken"

Cursor 没有 Claude Code 那种自动扫描 skills 目录的机制,所以 SKILL.md 要手动@File引入上下文。我的做法是把 87 个 Skills 放在项目skills/目录,提问时@skills/writing-prds/SKILL.md,一次只带 1–3 个,避免上下文过长。

3.4 批量抽取脚本:播客转写 → SKILL.md

这是整条链路里最耗时的部分。思路是:转写稿按##/###切块,每块送进模型判断属于哪个 skill,再抽结构化 mention。下面是一个可跑的 Python 片段,用统一 Key 调 TaoToken。

import os, json, requests API = os.environ["TAOTOKEN_BASE_URL"] + "/v1/chat/completions" KEY = os.environ["TAOTOKEN_API_KEY"] TAXONOMY = [ {"slug": "writing-prds", "def": "写产品需求文档"}, {"slug": "prioritizing-roadmap", "def": "排优先级与路线图"}, # ... 87 个 ] def extract(chunk, section_path): prompt = f"""你在为 skills 数据库做抽取。 taxonomy: {json.dumps(TAXONOMY, ensure_ascii=False)} section_path: {section_path} chunk: {chunk} 任务: 1) 判断该 chunk 属于哪个 skill_slug,不属于返回 null 2) 若属于,抽 1-3 条 mentions,每条含 quote/insight/tactical 3) tactical 必须动词开头、不超过 15 字 输出严格 JSON。""" r = requests.post(API, headers={ "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" }, json={ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": prompt}], "max_tokens": 1024 }, timeout=60) return r.json()["choices"][0]["message"]["content"] if __name__ == "__main__": print(extract("写 PRD 要先明确 Why now...", "2.1 PRD / 2.1.1 背景"))

跑完 297 期转写,你会得到一个skills.json,结构大致是每个 skill 聚合多条 mention,每条带 quote、insight、tactical。再写一个渲染脚本,把skills.json按 3.1 的骨架生成 87 个SKILL.md。

4. 验证请求:端到端跑通一次

4.1 验证 Claude Code 加载 Skills

在项目根目录建.claude/skills/writing-prds/SKILL.md,内容用 3.1 的骨架。启动 Claude Code,输入:

帮我写一份 AI 导购功能的 PRD 大纲

如果description写对了,Claude Code 会自动加载writing-prds,输出会先问诊断问题,再给大纲,而不是直接列功能。你也可以显式/writing-prds确认加载成功。

4.2 验证 Cursor 复用同一 Key

Cursor 里@skills/writing-prds/SKILL.md,然后问同样的问题。因为 Base URL 指向同一个 TaoToken 通道,模型版本和 Claude Code 一致,输出风格应该接近。这一步验证的是“统一 Key 是否真的让两个工具行为一致”。

4.3 验证批量抽取结果

用 3.4 的脚本跑 10 个 chunk,检查返回 JSON 里skill_slug是否落在 taxonomy 内、tactical是否动词开头。如果大量返回null,说明 taxonomy 覆盖不够,需要补 skill 或调整 chunk 切分粒度。

5. 本篇常见错排查

5.1 Claude Code 报 401 / 403

先确认ANTHROPIC_AUTH_TOKEN引用的环境变量在当前 shell 里存在。settings.json里用${TAOTOKEN_API_KEY}是 Claude Code 的变量替换语法,不是 shell 展开,所以 Key 必须在环境变量里。再确认ANTHROPIC_BASE_URL没有多写/v1,Claude Code 走 Anthropic 协议,路径由它自己拼。

5.2 Cursor 报 model not found

Cursor 的base_url要带/v1,和 Claude Code 不同。model字段必须和 TaoToken 控制台里可用的模型名完全一致,大小写敏感。如果控制台显示的是claude-sonnet-4-20250514,就不要写成claude-sonnet-4。

5.3 Skills 不自动加载

九成是description没写触发条件。Claude Code 靠description里的 “Use when someone is...” 做语义匹配,如果只写 “PRD skill”,它不知道什么时候该加载。把用户可能说的原话写进去,中英文都写。

5.4 批量抽取返回空 JSON

模型偶尔会在 JSON 前后加解释文字。解析前先做一次content.strip().split("```")清洗,或者用json.loads前找第一个{和最后一个}。另外max_tokens给太小会截断,抽 mention 建议至少 1024。

5.5 上下文太长导致输出变差

一次带超过 3 个 SKILL.md,模型注意力会分散。我的规则是:主 skill 一个,补充视角一个,最多再加一个 guardrail 类 skill。如果必须带很多材料,先让模型生成 10–15 条要点摘要,下一轮只带摘要。

6. 把 87 个 Skills 稳定接进工作流的下一步

链路跑通后,剩下的是工程化:把批量抽取脚本做成定时任务,播客更新后自动转写、切块、抽取、生成 SKILL.md;把 87 个 Skills 用 git submodule 管理,Claude Code 和 Cursor 共用同一份目录;Key 按用途拆分,批量抽取和日常对话分开计量。

如果你还没配好通道,先去 API Keys 页面创建 Key,再对照接入文档把 Claude Code 和 Cursor 的 Base URL 配好。验证模型是否可用时,可以直接在模型对话里发一条测试请求,确认返回正常再往下走。长期做编码和 Agent 的话,Coding Plan 的额度模型更适合高频调用,不用每次担心单次计费。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询