1. 为什么 PRP 提示词库总在“第二次需求”就崩掉PRP 是 Product Requirement Prompts 的缩写你可以把它理解成“给 AI 看的产品需求文档 代码库情报 执行手册”三合一。它和传统 PRD 最大的区别是PRD 只描述“要什么”刻意回避“怎么做”而 PRP 会明确写清文件路径、示例代码、验证命令让 Claude Code 这类工具能直接落地成生产级代码。适合谁适合已经在用 Claude Code、Cursor、Cline 做 AI 辅助开发但每次新需求都要重新“喂上下文”的开发者。我见过太多人第一次用 PRP 效果惊艳第二次就翻车。原因不在提示词写得不好而在三个隐性坑第一Key 分散在多个工具里Claude Code 一套、脚本一套、测试一套环境一变就 401第二PRP 模板里的模型 ID 写死在命令里换模型要改一堆文件第三需求到代码的验证动作没有闭环PRP 执行完不知道对不对。这篇就按“可复用、可迭代”的目标给你一套能直接抄的 PRP 目录结构再用 TaoToken 统一 Key/API 通道把 Claude Code 和 PRP 执行脚本接到同一条链路上最后跑一次从需求到代码的完整验证。核心检索词就三个PRP 提示词库、AI 辅助开发、Claude Code 统一 Key。先说清楚 PRP 和普通提示词的区别不然后面配置会懵。普通提示词是“你帮我写个登录接口”PRP 是“在 src/auth/login.py 实现 login 函数参考 src/auth/register.py 的异常处理风格用 pytest 跑 tests/test_login.py 验证失败时返回 401 而不是 500”。后者把代码库情报和验证机制都塞进去了所以它能一键生成生产级代码而不是玩具代码。但这也带来一个现实问题PRP 执行时要读文件、跑测试、调模型这三件事如果走不同通道Key 管理就会爆炸。TaoToken 在这里的角色不是“又一个模型供应商”而是把模型调用收敛成一个 Base URL 一个 Key 一个 Model ID让 PRP 脚本和 Claude Code 共用同一套凭证。这样你迭代 PRP 模板时只需要改提示词不用碰环境变量。下面从目录结构开始一步步搭起来。你不需要一次全做完可以先跑通最小闭环再往里加命令和模板。2. TaoToken 前置把 Key 和 Base URL 收敛成一份配置在动手改 PRP 之前先把 TaoToken 的接入信息准备好。这一步的目标是不管后面是 Claude Code 还是 PRP 的 Python 执行器都从同一份配置读 Base URL、Key、Model ID避免“这个工具能跑那个工具 401”的经典问题。先拿 Key。打开 https://taotoken.net/api-keys 登录后创建一个 API Key复制出来。注意这个 Key 只在创建时完整显示一次丢了就重建。拿到后不要直接写进代码先放到项目根目录的.env里后面所有工具都读这个文件。# .env TAOTOKEN_API_KEYsk-你的key TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_MODELclaude-sonnet-4-5-20250929这里 Model ID 用claude-sonnet-4-5-20250929只是示例你可以在 https://taotoken.net/models 查当前可用的模型列表换成你实际要用的。重点是把 Model ID 也放进配置而不是写死在 PRP 模板里这样换模型只改一行。接下来验证 Key 是否可用。用 curl 发一个最小请求确认 Base URL 和 Key 都对curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-5-20250929, messages: [{role: user, content: 回复 ok}], max_tokens: 16 }如果返回里有choices字段和内容说明通道通了。如果返回 401先检查 Key 有没有多余空格如果返回local proxy failed检查 Base URL 是不是写成了带路径的完整地址正确写法就是https://taotoken.net/api不要自己加/v1。Claude Code 的接入也走同一份配置。Claude Code 读的是环境变量你可以在 shell 里 export也可以写进~/.claude/settings.json。推荐后者因为 PRP 脚本也能读同一个文件。settings.json 的写法{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的key, ANTHROPIC_MODEL: claude-sonnet-4-5-20250929 } }注意 Claude Code 用的是ANTHROPIC_前缀而 PRP 的 Python 脚本用TAOTOKEN_前缀两者指向同一个 Base URL 和 Key。这样你在 Claude Code 里跑/create-base-prp生成 PRP再用脚本执行 PRP走的是同一条通道不会出现“Claude Code 能跑、脚本 401”的割裂。如果你用 Cline 或 CC Switch 管理多套配置逻辑一样Base URL 填https://taotoken.net/apiKey 填同一个Model ID 填同一个。三件套齐了工具之间才能无缝切换。这一步做完前置就结束了下面进目录结构。3. 可复制配置PRP 目录结构 settings 片段PRP 的可复用性八成取决于目录结构。excerpt 里给的结构是.claude/commands/PRPs/templates/PRPs/scripts/PRPs/ai_docs/这个骨架是对的但实际用起来还要补两个东西一个是把模型配置从脚本里抽出来另一个是给每个 PRP 配一个可执行的验证脚本。先建目录。在项目根目录执行mkdir -p .claude/commands mkdir -p PRPs/templates mkdir -p PRPs/scripts mkdir -p PRPs/ai_docs mkdir -p PRPs/featuresPRPs/features/是我加的用来放每个具体需求的 PRP 文件和模板分开。模板是“怎么写 PRP”features 是“这个需求的 PRP 是什么”混在一起时间长了会乱。然后从 PRPs-agentic-eng 仓库复制命令和模板。如果你已经 clone 了仓库cp -r /path/to/PRPs-agentic-eng/.claude/commands/* .claude/commands/ cp -r /path/to/PRPs-agentic-eng/PRPs/templates/* PRPs/templates/ cp -r /path/to/PRPs-agentic-eng/PRPs/scripts/* PRPs/scripts/复制完检查一下.claude/commands/里有没有create-base-prp.md、review-general.md、create-pr.md这几个文件。这些是 Claude Code 的斜杠命令在 Claude Code 里输入/create-base-prp就会触发。接下来是关键改动让 PRP 执行脚本读.env而不是写死配置。打开PRPs/scripts/prp_runner.py找到初始化模型客户端的地方改成从环境变量读import os from openai import OpenAI client OpenAI( base_urlos.getenv(TAOTOKEN_BASE_URL, https://taotoken.net/api), api_keyos.getenv(TAOTOKEN_API_KEY), ) MODEL_ID os.getenv(TAOTOKEN_MODEL, claude-sonnet-4-5-20250929)如果你的脚本用的是 Anthropic SDK写法类似把base_url和api_key换成环境变量即可。改完这一处以后换模型只改.env一行不用动脚本。再给 Claude Code 补一个项目级 settings放在.claude/settings.json这样团队里每个人 clone 下来只要填自己的 Key 就能跑{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的key, ANTHROPIC_MODEL: claude-sonnet-4-5-20250929 }, permissions: { allow: [Bash(uv run PRPs/scripts/prp_runner.py:*)] } }permissions.allow这行是让 Claude Code 执行 PRP 脚本时不用每次确认实测能省不少点击。注意 Key 不要提交到 git把.claude/settings.json加进.gitignore团队共享用.claude/settings.example.json。目录结构最终长这样.claude/ ├── commands/ # Claude Code 斜杠命令 └── settings.json # 项目级模型配置 PRPs/ ├── templates/ # PRP 模板 ├── scripts/ # 执行器 ├── ai_docs/ # 文档库 └── features/ # 具体需求的 PRP .env # Key 和 Base URL这个结构的好处是模板和需求分离配置和代码分离Claude Code 和脚本共用一套凭证。下面用一个真实需求跑一遍。4. 验证请求从需求到代码跑通一次 PRP现在用一个具体需求验证整条链路给一个 FastAPI 项目加 JWT 登录接口。这个需求足够小能一次跑完又涉及文件路径、依赖、测试能体现 PRP 的价值。第一步在 Claude Code 里生成 PRP。打开 Claude Code输入/create-base-prp 给 FastAPI 项目加 JWT 登录接口参考 src/auth/register.py 的异常处理风格用 pytest 验证失败返回 401Claude Code 会读你的代码库生成一个 PRP 文件。把它保存到PRPs/features/jwt-login.md。生成的内容应该包含目标文件路径、参考代码片段、依赖列表、验证命令。如果生成的内容里没有文件路径说明你的代码库情报不够手动补上。第二步检查 PRP 里的模型配置。打开PRPs/features/jwt-login.md确认里面没有写死模型 ID。如果有改成引用环境变量或者直接删掉让脚本用.env里的默认值。第三步执行 PRP。在项目根目录跑uv run PRPs/scripts/prp_runner.py --prp jwt-login --interactive--interactive会让脚本在每一步问你确认第一次跑建议加上看清它读了哪些文件、调了什么模型。如果不想交互去掉这个参数直接跑。跑的过程中你会看到脚本依次做这些事读 PRP 文件、读参考代码、调模型生成代码、写文件、跑测试。如果测试失败脚本会把失败信息回传给模型让它修这就是 PRP 的验证闭环。第四步确认结果。跑完后检查src/auth/login.py是否生成tests/test_login.py是否存在然后手动跑一次测试uv run pytest tests/test_login.py -v如果测试通过说明从需求到代码的链路通了。这时候你可以回到 Claude Code用/review-general让 AI 审查一遍生成的代码审查请求同样走 TaoToken 通道。这一步的关键不是“生成了代码”而是“生成了带验证的代码”。PRP 和普通提示词的区别就在这里普通提示词给你一段代码你得自己判断对不对PRP 给你代码加测试测试跑通才算完成。而 TaoToken 的作用是让生成和审查走同一条通道不用在两个工具之间同步 Key。如果你想让这个过程更顺可以在.claude/commands/里加一个自定义命令把“生成 PRP → 执行 PRP → 跑测试”串成一条。命令文件写成一个 markdown里面用自然语言描述步骤Claude Code 会按步骤执行。这样以后新需求只要输入一个命令就行。5. 本篇常见错排查401、local proxy failed、reading choices跑 PRP 的过程中报错基本集中在四类。下面按真实报错信息对照排查每条都给定位方法。第一类401 Unauthorized。报错长这样Error code: 401 - {error: {message: Invalid API key}}原因通常是 Key 没读到或读错了。先确认.env里的TAOTOKEN_API_KEY没有多余空格和引号。然后确认脚本真的加载了.envPython 里需要from dotenv import load_dotenv; load_dotenv()很多人忘了这行脚本读的是空值。最后确认 Claude Code 的settings.json里ANTHROPIC_API_KEY和.env里是同一个 Key两边不一致会导致“Claude Code 能跑、脚本 401”。第二类local proxy failed。报错长这样APIConnectionError: Connection error - local proxy failed这个不是 Key 的问题是 Base URL 写错了。正确写法是https://taotoken.net/api不要加/v1不要加/chat/completions。有些 SDK 会自动拼路径你手动加了就变成双份。检查.env和settings.json里的 Base URL确保都是https://taotoken.net/api。第三类reading choices。报错长这样TypeError: Cannot read properties of undefined (reading choices)这是响应结构不对通常是模型 ID 写错了或者请求发到了错误的端点。先确认TAOTOKEN_MODEL是 https://taotoken.net/models 里存在的 ID。然后确认请求走的是/v1/chat/completions如果你用的是 Anthropic SDK端点不一样别混用。还有一种可能是流式响应没处理脚本按非流式解析也会读不到choices。第四类OAuth 相关报错。报错长这样OAuth error: invalid_grant如果你在 Claude Code 里看到这个说明它还在走默认的 OAuth 登录没读你的settings.json。检查settings.json的位置对不对项目级是.claude/settings.json用户级是~/.claude/settings.json。改完重启 Claude Code。如果用的是 Codex检查~/.codex/auth.json里的配置Base URL 和 Key 要和.env一致。排查顺序建议先 curl 验证 Key 和 Base URL再验证脚本单独跑最后验证 Claude Code。一层层往上查比一上来就改代码快。另外PRP 执行失败时先看是模型调用失败还是测试失败。模型调用失败看上面四类测试失败看 PRP 里的验证命令写得对不对。6. 把 PRP 用成可迭代资产下一步怎么走跑通一次之后别急着加新需求先把这次的 PRP 沉淀成模板。打开PRPs/features/jwt-login.md把里面和 JWT 无关的结构抽出来补进PRPs/templates/prp_base.md。比如“参考代码路径”“验证命令”“失败处理”这几段每个需求都要写就固化到模板里。下次生成 PRP 时Claude Code 会按模板填质量更稳。然后给 PRP 加版本。在PRPs/features/里用jwt-login-v1.md、jwt-login-v2.md命名每次迭代保留旧版。这样出问题时能对比哪次改动导致的也能看出提示词是怎么演进的。实测下来一个需求迭代三次左右PRP 就能稳定产出可合并的代码。模型切换也走配置。想换更强的模型跑复杂 PRP只改.env里的TAOTOKEN_MODELClaude Code 和脚本同时生效。想给不同 PRP 用不同模型在 PRP 文件头部加一行model: xxx脚本读这个字段覆盖默认值。这样你可以在简单需求上用快模型复杂需求上用强模型成本和质量都可控。最后把常用命令固化到.claude/commands/。比如写一个run-prp.md内容是“读 PRPs/features/$ARGUMENTS.md执行 PRP跑验证命令失败则回传错误让模型修”。以后在 Claude Code 里输入/run-prp jwt-login就能跑完整流程。命令、模板、配置三件套齐了PRP 才真正变成可复用资产而不是一次性提示词。如果你还没开始建议今天就拿一个小需求跑一遍从.env配置到uv run PRPs/scripts/prp_runner.py执行中间卡住就对照第 5 节排查。跑通一次后面就是复制粘贴改需求的事了。