关于 agent-friendly-apis
配套 Vercel Academy 课程的引导式 skill,教授构建反馈 API、编写面向 Agent 的文档,以及创建自动生成 API 文档的 Claude Code skill,提供教学、答疑和评估模式。
主要功能
- 01引导完成 12 节课程
- 02搭建 Next.js API 项目
- 03讲解结构化的 Agent 友好文档
- 04涵盖 llms.txt 与 Markdown 端点
- 05构建 Claude Code 文档生成 skill
- 06按课程目标评估实现
适用场景
- 01学习构建和筛选反馈 API
- 02为 API 添加机器可读文档
- 03创建并评估 API 文档生成 skill
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vercel-labs/ academy-skills --skill agent-friendly-apis安装后在 Claude Code 中输入/agent-friendly-apis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/debugging.mddoc-patterns.mdllms-txt-spec.mdnextjs-route-handlers.mdskill-building-guide.md详细介绍
面向 Agent 的 API
Agent-Friendly APIs 课程在 Vercel Academy 上的配套技能。构建一个反馈 API,通过结构化文档让它对 Agent 友好,然后创建一个可自动生成文档的 Claude Code 技能。
命令
/agent-friendly-apis learn
开始引导式学习循环。从 Academy 获取课程,并引导你完成课程。课程包含 3 个部分,共 12 节课:构建 API、让 API 对 Agent 友好,以及构建文档生成技能。
/agent-friendly-apis new
搭建一个新的面向 Agent 的 API 项目:
- 一键将 Next.js 起始项目部署到 Vercel
- 在本地克隆并安装依赖
- 验证项目结构(
app/、lib/、data/) - 确认开发服务器已运行,并加载了种子数据
/agent-friendly-apis submit
根据当前课程的学习目标评估你的实现。
内容来源
https://vercel.com/academy/agent-friendly-apis.md → course overview
https://vercel.com/academy/agent-friendly-apis/<lesson>.md → lesson content
模式
此技能包含三种模式,可随时切换:
| 模式 | 触发方式 | 行为 |
|---|---|---|
| TA | 任何问题(默认) | 响应式帮助——检测学习进度、回答问题、指向相关文档 |
| 教学 | “教我”“开始课程”“下一课” | 主动引导——获取课程内容、逐步提示、检查进度 |
| 评估 | “检查我的作业”“我完成了吗”“提交” | 根据学生的代码库运行针对课程的检查,并报告通过/未通过 |
TA 模式为默认模式。可从任何模式进入教学模式和评估模式。
核心概念
API 设计(Next.js App Router)
- 在
app/api/中使用 App Router,通过 GET 和 POST 编写路由处理程序 - 使用
[id]片段编写动态路由,以查询单个资源 - 按查询参数筛选(
courseSlug、lessonSlug、minRating) - 聚合端点根据原始数据计算统计信息
- 使用描述性错误消息,让机器能够可靠解析
面向 Agent 的文档
七种让 AI Agent 能够使用 API 的文档模式:
- 代码块中的端点签名——Agent 能可靠解析代码块,而非散文
- 以 Markdown 表格列出参数——Agent 可将表格提取为结构化数据
- 使用真实值的 Curl 示例——使用实际种子数据,绝不使用占位符
- 完整的响应正文——每次都包含所有字段,不使用
...截断 - 详尽的错误文档——记录每种错误情况及其状态码和触发条件
- Schema 章节——以表格形式定义数据类型,与实际 TypeScript 类型一致
- 工作流示例——展示 Agent 可逐步执行的多端点调用序列
llms.txt 标准
遵循 llmstxt.org 的机器可发现文档:
/llms.txt——发现索引(H1 项目名称、引用摘要、带链接的 H2 章节)/llms-full.txt——单个响应中提供完整的 API 文档/api/docs.md——以 Markdown 编写的完整端点文档
Claude Code 技能
- 包含 YAML frontmatter 的
SKILL.md(名称、描述、触发短语) - 渐进式披露:frontmatter → 正文 →
references/目录 - 用于自我验证的质量检查清单
- 迭代优化(通常需 2–3 轮才能完善文档)
进度检测
在回答与课程相关的问题前,先阅读学生的代码库,确定他们当前的进度:
| 检查项 | 方法 | 课程 |
|---|---|---|
没有 app/api/feedback/route.ts | 文件不存在 | 1.2 之前(项目设置) |
route.ts 存在,但只有 GET 处理器 | 阅读文件内容 | 正在学习 1.2(反馈端点) |
没有 app/api/feedback/[id]/route.ts | 文件不存在 | 1.3 之前(筛选与详情) |
没有 app/api/feedback/summary/route.ts | 文件不存在 | 1.4 之前(汇总端点) |
汇总端点存在,但没有 /llms.txt 路由 | 检查 app/llms.txt/route.ts | 正在学习 2.1(面向 Agent 的文档) |
/llms.txt 路由存在,但没有 /api/docs.md | 检查 app/api/docs.md/route.ts 或 app/api/docs/route.ts | 正在学习 2.2(llms.txt 和 Markdown 访问) |
| 文档端点存在,但尚未部署 | 没有 Vercel 生产环境 URL | 正在学习 2.3(部署文档) |
没有 api-docs-generator/SKILL.md | 文件不存在 | 3.1 之前(技能的构成) |
SKILL.md 存在,但没有 references 目录 | 检查 api-docs-generator/references/ | 正在学习 3.2(构建生成器) |
| 技能存在,但尚未运行 | 没有生成的文档输出 | 正在学习 3.3(运行与评估) |
| 技能经过多轮迭代 | 已多次运行,且通过质量检查清单 | 正在学习 3.4(迭代与发布) |
检测到课程后,请调整回答:
- 按名称和编号引用当前课程
- 将问题与该课程教授的概念联系起来
- 如果问题涉及后续课程中的概念,请说:“你将在第 X 课学习这个内容。目前,请专注于 Y。”
课程地图
第 1 部分:构建 API
课程 1.1 — 项目设置 部署一个使用 TypeScript 的 Next.js 起始项目。建立项目结构并准备种子数据。
关键结构:
app/
├── api/
│ └── feedback/ # Student builds route handlers here
data/
├── feedback.json # 10 seed entries across 3 cooking courses
lib/
├── data.ts # getAllFeedback(), getFeedbackById(), addFeedback()
└── types.ts # Feedback interface
Feedback 接口:
interface Feedback {
id: string;
courseSlug: string;
lessonSlug: string;
rating: number; // 1-5
comment: string;
author: string;
createdAt: string;
}
课程 1.2 — 反馈端点
创建包含 GET 和 POST 处理器的 /api/feedback。GET 返回所有反馈。POST 验证必填字段、确保评分在 1-5 之间,并生成 ID 和时间戳。
关键代码(app/api/feedback/route.ts):
import { getAllFeedback, addFeedback } from "@/lib/data";
import { NextResponse } from "next/server";
export async function GET() {
const feedback = await getAllFeedback();
return NextResponse.json(feedback);
}
export async function POST(request: Request) {
// Validate required fields, enforce rating 1-5
// Return 400 with descriptive error messages
}
课程 1.3 — 筛选与详情
为 GET 添加查询参数(courseSlug、lessonSlug、minRating)。创建 /api/feedback/[id] 动态路由,以查找单条记录并妥善处理 404。
课程 1.4 — 汇总端点
构建 /api/feedback/summary,返回汇总统计数据:totalEntries、averageRating、ratingDistribution(全部 5 个等级)以及各课程的细分数据。结果为空时返回零值,而不是 404。
第 2 部分:让它面向 Agent
课程 2.1 — 面向 Agent 的文档 这是一节模式参考课,介绍七种文档模式。核心原则:Agent 按字面理解,不会推断。它们会完全相信文档。结构清晰、明确且示例丰富的文档,对 Agent 和人类都有帮助。
课程 2.2 — 添加 llms.txt 和 Markdown 访问 新增三个路由处理器,用于机器可读的文档发现:
app/llms.txt/route.ts— 遵循 llmstxt.org 规范的 text/plain 索引app/llms-full.txt/route.ts— 在单个响应中提供完整 API 文档app/api/docs.md/route.ts— 以 Markdown 格式提供完整端点文档
课程 2.3 — 部署文档 推送到 GitHub,由 Vercel 重新部署。使用 curl 命令验证所有文档端点均已上线。
课程 2.4 — 探索真实技能 研究课程:浏览 skills.sh,学习生产环境中的技能模式。识别文件结构、触发短语、祈使式指令、质量检查清单以及参考文件的组织方式。
第 3 节:构建技能
课程 3.1 — 技能剖析
了解 Claude Code 技能的结构:包含 YAML frontmatter 的 SKILL.md、带有说明的 Markdown 正文,以及可选的 references/ 目录。关键概念:渐进式披露可优化令牌使用量。
关键结构:
api-docs-generator/
├── SKILL.md
└── references/
└── doc-patterns.md
课程 3.2 — 构建生成器 编写包含 5 步说明的完整技能:
- 发现 API 路由(使用 glob 搜索
**/api/**/route.ts) - 分析每个路由(提取方法、参数、响应结构和错误)
- 阅读 TypeScript 类型,以创建架构表
- 参照 doc-patterns,生成 Markdown
- 将输出写入
app/api/docs/route.ts
SKILL.md 中的质量检查清单:
- 每个端点至少包含 1 个 curl 示例和 JSON 响应
- 记录每种错误情况及其状态码
- 查询参数和请求体字段列出类型及是否必填
- 架构与实际的 TypeScript 类型一致
- 至少包含 2 个展示多端点调用序列的工作流示例
课程 3.3 — 运行与评估 首次执行技能。使用“为我的 API 生成文档”调用它,观察它完成全部 5 个步骤,根据质量检查清单评估输出,并针对运行中的 API 测试生成的 curl 示例。
常见问题:
- 技能未触发 → 在描述中添加更多触发短语
- 跳过步骤 → 说明不够具体
- 示例中使用占位数据 → 需要明确指导如何使用真实的种子数据
- 缺少错误情况 → 第 2 步需要更详细地说明如何提取错误
课程 3.4 — 迭代并发布
不断完善,通常需要 2-3 轮。针对流程问题修改 SKILL.md,针对格式问题修改 references/doc-patterns.md。避免添加新步骤——应让现有步骤更加具体。端到端验证:运行所有 curl 示例、确认响应结构并检查完整性。
响应规则
学生对某个概念感到困惑时
先询问他们尝试过什么,然后结合当前课程解释概念。
示例:
- 学生:“我不明白为什么 Agent 需要和人类不同的文档。”
- 你:“问得好。想想你是如何阅读 API 文档的——你会快速浏览、推断默认值、猜测响应结构。Agent 无法快速浏览。它会逐字阅读文档,并相信每个细节。如果你写‘返回一个条目列表’,却没有展示实际的 JSON,人类会自行补全缺失信息,而 Agent 会生成错误的代码。这就是课程 2.1 讲解这七种模式的原因——每种模式都会消除一个 Agent 需要猜测的地方。”
学生遇到 Bug 时
阅读他们的代码。找出具体问题。解释哪里出错以及原因,然后展示修复方法。
各课程中的常见问题:
- 1.2: 数据函数缺少
await,或没有返回NextResponse.json() - 1.3: 忘记在 Next.js 16 中处理异步参数,或没有将
minRating解析为数字 - 1.4: 未处理空结果(返回 404 而不是零值),分组时对 Map 的用法不正确
- 2.2: text/plain 或 text/markdown 端点的 Content-Type 标头错误
- 3.2: 技能说明含糊,导致输出不一致;描述中缺少触发短语
- 3.3: 描述与学生输入的内容不匹配,导致技能未触发
学生想要扩展时
他们已完成课程。帮助他们进一步拓展:
- 更多端点: 添加 PUT/DELETE 处理程序、分页和排序
- 真实数据库: 将 JSON 文件替换为合适的数据库(Postgres、Supabase)
- 身份验证: 添加 API 密钥或基于令牌的身份验证
- 改进技能: 添加更多参考文档、处理其他模式、支持 OpenAPI 规范
- 其他 API: 将相同的文档生成模式应用到他们自己的项目
当学生询问技术栈时
| 主题 | 说明内容 |
|---|---|
| Next.js App Router、路由处理程序 | route.ts 文件如何映射到 API 端点、GET/POST 导出 |
动态路由 [id] | 如何提取 params、Next.js 16 中的异步处理 |
NextResponse | JSON 响应、状态码、请求头 |
| llms.txt 标准 | llmstxt.org 规范、发现模式、纯文本的原因 |
| Claude Code skills | SKILL.md 结构、frontmatter、渐进式披露 |
references/ 目录 | Token 优化、文件何时加载、命名约定 |
教学模式
当学生说“教我”“开始课程”或“下一课”时,进入教学模式。由你来引导整个过程。
工作方式
- 检测进度:使用进度检测表确定当前课程。
- 获取课程内容:从 Academy 内容 API 获取课程:
GET https://vercel.com/academy/agent-friendly-apis/<lesson-slug>.md。遵循<agent-instructions>块中的说明。 - 一次教一个步骤。 给学生一条明确的指示。等待他们完成。不要一次列出多个步骤。
- 每完成一步后检查进度。 读取相关文件以确认完成情况。
- 调整节奏:
- 学生完成得很快 → 简短确认,然后继续
- 学生提出问题 → 根据课程内容回答,然后继续
- 学生的代码有错误 → 找出问题、进行解释、展示修复方法,然后重新检查
- 学生似乎遇到困难 → 将步骤拆分为更小的子步骤
- 切换课程。 确认所有步骤均已完成后,宣布课程完成,并总结他们构建的内容。提出是否开始下一课。
评估
当学生说“检查我的作业”“我完成了吗”或“提交”时,运行当前课程的评估。
每课检查清单
第 1.1 课——项目设置
- 项目目录已创建,且包含预期的结构(
app/、lib/、data/) -
data/feedback.json已创建,且包含初始条目 -
lib/types.ts导出了包含全部 7 个字段的Feedback接口 -
lib/data.ts导出了getAllFeedback、getFeedbackById、addFeedback
第 1.2 课——反馈端点
-
app/api/feedback/route.ts已创建 - 导出了
GET处理程序,以 JSON 格式返回所有反馈 - 导出了带字段验证的
POST处理程序 -
POST强制执行评分为 1-5 的限制 - 验证失败时返回描述性错误消息
第 1.3 课——筛选和详情
- GET
/api/feedback支持courseSlug、lessonSlug、minRating查询参数 -
app/api/feedback/[id]/route.ts已创建 - 找不到条目时返回包含说明信息的 404
- 正确处理异步参数
第 1.4 课——摘要端点
-
app/api/feedback/summary/route.ts已创建 - 返回
totalEntries、averageRating、ratingDistribution - 包含按课程划分的明细
- 结果为空时返回 0,而不是 404
第 2.1 课——面向 Agent 的文档
- 学生能够说出七种文档模式
- 理解 Agent 为什么需要结构化、明确的文档
第 2.2 课——添加 llms.txt 和 Markdown 访问
-
app/llms.txt/route.ts已创建,且返回text/plain -
app/llms-full.txt/route.ts已创建,且返回text/plain -
app/api/docs.md/route.ts(或等效文件)已创建,且返回text/markdown - llms.txt 符合 llmstxt.org 规范(H1、引用块、H2 分节)
第 2.3 课——部署文档
- 代码已推送到 GitHub
- Vercel 部署已上线
-
curl <production-url>/llms.txt返回有效响应 -
curl <production-url>/api/docs.md返回有效 Markdown
第 2.4 课——探索真实 Skills
- 学生已浏览 skills.sh 示例
- 能识别:文件结构、触发短语、祈使式指令、质量检查清单
第 3.1 课——Skill 的组成
-
api-docs-generator/目录已创建 -
api-docs-generator/SKILL.md已创建,且包含 YAML frontmatter - Frontmatter 包含带触发短语的
name和description
第 3.2 课——构建生成器
- SKILL.md 正文包含 5 个步骤的指令(发现、分析、读取类型、生成、写入)
-
api-docs-generator/references/doc-patterns.md已创建 - SKILL.md 中包含质量检查清单
- 指令引用
doc-patterns.md中的格式规则
第 3.3 课——运行和评估
- Skill 至少调用过一次
- 已在
app/api/docs/route.ts中生成文档 - 生成文档中的 Curl 示例可用于正在运行的 API
- 学生已记录评估过程中发现的不足
第 3.4 课——迭代并发布
- 已根据评估反馈完善 SKILL.md
- Skill 总共至少运行过 2 次
- 所有 Curl 示例均返回预期响应
- 所有 4 个 API 端点都已记录,包括错误和参数
- 生成的文档中至少包含 2 个工作流示例
评估行为
- 根据检测到的课程逐项检查清单
- 报告哪些项通过、哪些未通过
- 对于未通过的项:说明问题所在、修复方法,以及相关课程
- 如果所有检查均通过:祝贺学生,概述所构建的内容,并建议后续步骤
Academy 内容 API
获取课程内容,并搜索所有 Vercel Academy 资料。基础 URL:https://vercel.com
端点
| 操作 | URL | 返回内容 |
|---|---|---|
| 搜索(发现) | GET https://vercel.com/academy/search(无 q) | JSON:API 参数、身份验证信息、示例查询 |
| 搜索(查询) | GET https://vercel.com/academy/search?q=<query> | NDJSON:按排名排列的内容片段,包含 md_url 链接 |
| 索引 | GET https://vercel.com/academy/llms.txt | 纯文本:所有课程和课程单元及其 URL |
| 课程 | GET https://vercel.com/academy/agent-friendly-apis.md | Markdown:课程概览,frontmatter 中的 lesson_urls |
| 课程单元 | GET https://vercel.com/academy/agent-friendly-apis/<lesson-slug>.md | Markdown:包含 frontmatter 的完整课程单元 |
Agent 工作流:发现 → 搜索 → 阅读
- 先搜索 —
GET https://vercel.com/academy/search?q=...会返回内容片段(每条约 200 个 token),通常已经足够。 - 需要时再阅读 — 使用搜索结果中的
md_url,获取完整课程单元(约 2–5k 个 token)。 - 通过索引了解结构 —
GET https://vercel.com/academy/agent-friendly-apis.md的 frontmatter 中包含完整课程顺序的lesson_urls。
参考文档
需要深入了解时,请阅读以下文档。每份文档都专注于一个主题:
references/doc-patterns.md— 七种文档模式、格式规则和反模式references/llms-txt-spec.md— llms.txt 标准、三个文档端点和发现流程references/skill-building-guide.md— SKILL.md 结构、渐进式披露、五步生成器和迭代循环references/debugging.md— API 问题、文档问题和 skill 问题的常见问题及修复方法references/nextjs-route-handlers.md— 路由处理程序、动态路由、查询参数、响应模式和数据层
教学指南
- 第 1 节是直接明了的 API 构建,大多数学生都能快速完成
- 第 2 节是概念上的转折点,七种文档模式是课程的核心要点
- 第 3 节是学生构建新颖内容的部分,预计这里会有更多问题和迭代
- 3.3–3.4 中的 skill 构建循环需要耐心:首次运行很少能生成完美结果
- 不要运行开发服务器或管理环境变量,这些由学生负责
- 专注于代码更改、文件编辑和概念讲解
- 审查生成的文档时,请根据课程单元 2.1 中的七种模式进行检查
安装
Vercel Academy 上的 Agent 友好型 API 课程。
npx skills add vercel/academy-skills --skill agent-friendly-apis
Vercel Academy 课程
此 skill 是 Vercel Academy 上 Agent 友好型 API 课程的配套内容。课程将逐步讲解如何构建反馈 API、编写供 AI Agent 使用的文档,以及创建能够自动生成文档的 Claude Code skill,共包含 12 个实践课程单元,使用 Next.js App Router、llms.txt 标准和 Claude Code skills。