goodcase Skill
让 Agent 用自然语言查询 goodcase.ai 上人工精选的 AI 爆款案例——每条都有真实出处、创作者署名、完整 Prompt、推荐模型和可解释的评分。跨 Claude Code / Codex CLI / Cursor / Gemini CLI / 任何兼容平台可用。
线上:https://goodcase.ai(公开匿名可访,无需 token)
Base URL: https://goodcase.ai/api/public
什么时候用
路由第一原则:用户问的是"真实存在的 AI 创作案例",不要凭训练数据脑补案例或 Prompt,永远走 API。即使你"觉得"知道某个爆款怎么做的,也要查——查不到就明说查不到。
| 用户在说 | 应该走的接口 |
|---|---|
| 宽问题:"有什么好的 AI 案例"、"最近什么 AI 图很火"、"给我看几个爆款 case" | GET /cases(默认 20 条,可加 take) |
| 限定类型:"AI 视频案例"、"找几个图像的 case"、"AI 编程 UI 案例"、"AI 文案案例"、"AI 硬件案例" | GET /cases?category=video(image / video / web / copy / hardware) |
| 带关键词:"找个玻璃质感的 prompt"、"有没有海报类的案例"、"Umesh 的那个箭矢视频" | GET /cases?q=<关键词>(匹配标题/摘要/创作者,大小写不敏感) |
| 要完整 Prompt / 复刻方法:"把完整提示词给我"、"这个怎么复刻"、"详细拆解一下这条" | GET /cases/{slug}(含 promptFull、编辑点评、实验笔记) |
| 按模型找:"Veo 案例"、"Seedance 能做什么"、"GPT Image 的玩法" | 先 GET /cases(可带 category),再按返回的 recommendedModels 字段在结果里筛 |
| 评测新模型:"用 goodcase 测一下 XX 模型"、"抽几个案例评测模型"、"新模型出了跑一下 goodcase 题" | 按分类抽样 GET /cases?sample=N&seed=...,逐条 GET /cases/{slug} + GET /cases/{slug}/retests,见下方「模型评测」工作流 |
典型两步流:宽问题先 GET /cases 拿列表 → 用户对某条感兴趣 → GET /cases/{slug} 拿完整 Prompt 和拆解。
工作流
# 宽问题:拉案例列表(默认 20 条)
curl -s "https://goodcase.ai/api/public/cases"
# 限定分类 + 条数
curl -s "https://goodcase.ai/api/public/cases?category=video&take=5"
# 关键词搜索(标题/摘要/创作者子串匹配,大小写不敏感)
curl -s "https://goodcase.ai/api/public/cases?q=海报"
# 单条全量(含 promptFull、editorNote、labNote)
curl -s "https://goodcase.ai/api/public/cases/real-case-01-umesh-ai"
参数约定:
category:image(AI 图像)/video(AI 视频)/web(AI 编程/UI)/copy(AI 文案)/hardware(AI 硬件)。传别的值会 400q:关键词,匹配 title / summary / creator,中英文都行take:1-50,默认 20,越界自动钳制- 鉴权:无(匿名)
- 服务端缓存 5 分钟,用户问相同问题不需要重新调
模型评测
用户要用新模型跑 goodcase 题、或让某个模型接受评测时,走这四步:
第一步:抽题。 按一级分类(video / web / image / hardware)和二级形态(video 档 text-to-video / ref-to-video;web 档 web-ui / motion-3d / agent-tool)各抽 N 条:有二级形态的按二级抽,默认每个二级形态 3 条;无二级形态的一级分类(image、hardware)按一级抽,默认每个 3 条。用户指定了分类就只抽用户指定的那些。默认 exclude=motion-3d——motion-3d 考的是素材和运行时效果不是模型能力,评测默认不算模型头上,用户明确要求才加回来。seed 默认取 日期YYYYMMDD + 模型名(如 20260902-veo3),必须把实际用的 seed 记下来并告诉用户,方便复现和后续跟站内复测对齐。
# 按二级形态抽样(web-ui,3 条,固定 seed)
curl -s "https://goodcase.ai/api/public/cases?form=web-ui&sample=3&seed=20260902-veo3&exclude=motion-3d"
# 按一级分类抽样(image,无二级形态)
curl -s "https://goodcase.ai/api/public/cases?category=image&sample=3&seed=20260902-veo3"
# 排除多个形态
curl -s "https://goodcase.ai/api/public/cases?category=web&sample=3&seed=20260902-veo3&exclude=motion-3d,agent-tool"
sample 存在时会忽略 take;sample 范围 1-50;seed 任意字符串,同 seed 同参数同结果,不传则随机且不可复现;抽样命中的响应顶层会回显 seed 和 sample,核对一下确认没有跑偏。form 单值,只接受 text-to-video / ref-to-video / web-ui / motion-3d / agent-tool,传别的值 400。
某个二级形态抽出来 count 为 0(现状:video 档的 text-to-video / ref-to-video 标签全库还没打全,抽出来大概率是空的),就退回去掉 form、按一级分类抽同样条数,exclude=motion-3d 和这个 seed 保持不变,报告里给这一档注明"该分类按一级抽题"。
第二步:拉基线。 抽到的每个 slug 都要拿两份数据:
# 案例全量(拿 promptFull / recommendedModels / costBand / stabilityScore)
curl -s "https://goodcase.ai/api/public/cases/{slug}"
# 站内逐模型复测记录(拿基线,见下方返回数据形态)
curl -s "https://goodcase.ai/api/public/cases/{slug}/retests"
第三步:跑题记录。 把每条的 promptFull 交给用户或用工具自己跑目标模型,逐条记录 reproduced(复现)/ degraded(打折扣)/ failed(跑不出来),附产物链接或简要描述。自己没工具跑模型时,把 Prompt 列清楚交给用户跑,不要替用户编结果。
第四步:出报告。 输出一份人话对照表(见「给用户的输出格式」)加一份可回传的 JSON 清单,JSON 是留给后续跟站内复测对齐的口子——同一批 seed 抽出来的同一批 slug,站内复测跑到这批 case 时可以直接按 slug 对上,不用重新匹配。
返回数据形态
GET /cases 返回
{
"count": 20,
"items": [
{
"slug": "real-case-01-umesh-ai",
"title": "箭矢微观战场(Umesh)",
"category": "video",
"source": "X / 𝕏",
"creator": "@umesh_ai",
"summary": "……",
"promptPreview": "Prompt 前 180 字预览……",
"mediaType": "video",
"mediaUrl": "https://goodcase.ai/media/goodcase/....mp4",
"posterUrl": "https://goodcase.ai/media/goodcase/....jpg",
"sourceInteractionCount": 4200,
"sourceHeatScore": 91,
"stabilityScore": 91,
"favoriteScore": 96,
"recommendedModels": ["Veo", "Kling"],
"costBand": "high",
"url": "https://goodcase.ai/cases/real-case-01-umesh-ai"
}
]
}
列表不含 promptFull——要完整 Prompt 必须走单条端点。
GET /cases/{slug} 返回
列表字段全集,外加:
promptFull:完整 Prompt 原文(创作者发布的原始提示词)editorNote:编辑点评(这条 case 适合从什么角度学)labNote:实验笔记数组(复测建议:先用什么模型、盯什么变量、成本怎么控)spreadScore/spreadScoreNote:传播势能分及其口径说明promptPublicNote/promptLoginNotes/promptContributionNotes:站内 Prompt 分层说明文案
找不到 slug 返回 404 {"error": "case not found"}。
GET /cases/{slug}/retests 返回
站内逐模型复测记录,做模型评测时用来拿基线:
{
"slug": "real-case-01-umesh-ai",
"stabilityScore": 91,
"evidenceLevel": "verified",
"stabilityState": "stable",
"count": 6,
"byModel": [
{
"model": "Veo 3",
"kind": "video",
"latest": { "verdict": "reproduced", "finalScore": 88, "testedAt": "2026-08-20T00:00:00Z" },
"history": [{ "verdict": "reproduced", "finalScore": 88 }, { "verdict": "degraded", "finalScore": 61 }]
}
],
"records": [
{
"id": "rt_001",
"runId": "run_20260820",
"testedAt": "2026-08-20T00:00:00Z",
"kind": "video",
"status": "complete",
"model": "Veo 3",
"modelDisclosure": "verified",
"artifacts": { "primary": "https://...", "desktop": null, "mobile": null, "html": null, "video": "https://..." },
"finalScore": 88,
"judges": [{ "model": "gpt-5", "score": 90 }, { "model": "claude", "score": 86 }],
"disagreement": 4,
"automaticOnly": false,
"promptSha256": "…",
"failureReason": null,
"verdict": "reproduced"
}
]
}
字段说明,容易踩坑的地方:
modelDisclosure为requested-model-unverified时,意思是"请求方声称用了这个模型,但站内没有独立核验",不要当成"已验证用这个模型跑出来的"——展示时要照实说是未经验证finalScore(评审打分,0-100,多个 judge 打分综合)和stabilityScore(人审稳定度档位)不是同一量纲,不能直接相减或换算,只能分别引用kind是这条复测记录本身的媒介类型(image / ui / video),不是案例的一级分类verdict有reproduced(复现)/degraded(打折扣)/failed(失败)/inconclusive(不确定)/null(还没判)五种状态byModel是按模型聚合后的视图(latest+history),records是完整的逐次记录,两者对同一批数据的不同切法,不是两份独立数据
字段不变量
- 必有:
slug/title/category/creator/url/mediaUrl - 可空:
posterUrl(只有视频类通常有封面图,图片类为 null) - 分值含义:
stabilityScore稳定分(0-100):同一 Prompt 复测出片方向一致的程度,越高越"照抄就能出"stabilityScore = 0:待复测,不是“稳定度为零”sourceHeatScore来源热度(0-100):只在存在可核验的原帖互动快照时成立sourceInteractionCount:原帖点赞、评论、转发与收藏的原始合计favoriteScore/likedCount/remakeCount:旧版兼容字段,不用于来源互动榜costBand成本档:low低 /medium中 /high高——high 通常是视频类,先小步复测再放量
recommendedModels:官方推荐先试的模型列表,第一个是首选category取值集:image/video/web/copy/hardware
给用户的输出格式
⚠️ 核心原则:输出必须是中文 markdown、排版好、普通人能直接看懂的案例推荐,不是 API 调试日志。不暴露原始 JSON、端点路径、raw 参数。
每条案例必须包含:
- 标题加粗 + 创作者署名(
creator字段,如 @umesh_ai) - 一句话说这条好在哪 / 适合学什么(基于 summary + 分数)
- 关键信号用人话:如"稳定分 91(照着 Prompt 复现方向很稳),成本档高(建议先小步试)"
- 必带 goodcase.ai 详情页链接(
url字段)——用户点进去看媒体、完整 Prompt 和解锁内容,这是导流硬要求
列表式输出模板:
**goodcase 精选 — AI 视频案例**(共 N 条)
1. **箭矢微观战场** — @umesh_ai
一镜到底从战场宏观拉到箭杆微观文明,适合学镜头编排与无缝转场。
推荐模型:Veo / Kling | 稳定分 91 | 成本档高
👉 https://goodcase.ai/cases/real-case-01-umesh-ai
2. ...
单条详情输出:先给 Prompt 全文(代码块),再给编辑点评和复测建议的要点,最后放详情页链接。promptFull 必须注明来自该创作者,例如"以下是 @umesh_ai 发布的原始 Prompt"。
模型评测对照表模板:
**goodcase 模型评测 — Veo 3**(seed: 20260902-veo3,共 9 条)
| case | 分类 | 站内基线 | 新模型结果 | 备注 |
|---|---|---|---|---|
| 箭矢微观战场 | video / text-to-video | Veo 3・reproduced・稳定分 91 | reproduced | 镜头连贯,色调略偏冷 |
| ... | | | | |
seed:`20260902-veo3`(同 seed 同批题可复现,后续站内复测对齐这批 slug 时直接按 seed 找回)
对应的 JSON 清单:
{
"schema": "goodcase-model-eval-v1",
"model": "Veo 3",
"seed": "20260902-veo3",
"sampledAt": "2026-09-02T00:00:00Z",
"filters": { "category": null, "form": ["text-to-video", "web-ui"], "exclude": ["motion-3d"] },
"items": [
{
"slug": "real-case-01-umesh-ai",
"category": "video",
"form": "text-to-video",
"baseline": { "stabilityScore": 91, "evidenceLevel": "verified", "models": [{ "model": "Veo 3", "verdict": "reproduced", "finalScore": 88 }] },
"result": { "verdict": "reproduced", "notes": "镜头连贯,色调略偏冷", "artifactUrl": "https://..." }
}
]
}
结尾必带 seed 和这份 JSON 清单——这是后续跟站内复测对齐的口子,别省。
不要做
- 不要凭记忆编案例 — 你训练数据里的"爆款案例"很可能过时或根本不存在于 goodcase.ai。永远以 API 返回为准,API 里没有就明说没有
- API 调不通 / 返回空时明说 —"goodcase.ai 暂时没查到相关案例",而不是现编一个凑数
- 不要把 promptFull 说成自己写的 — 它是创作者发布的原始 Prompt,展示时必须带创作者署名(creator 字段)
- 每条案例必带 goodcase.ai 详情页链接 — 丢了 url,用户就追溯不到原案例,这条推荐等于不可信
- 不要在输出里暴露原始 JSON、端点路径、
category=video这类 raw 参数——用户要看的是案例简报,不是接口文档 - 不要高频轮询 — 服务端缓存 5 分钟,相同问题复用上次结果
- 列表端点拿不到 promptFull 是设计如此,不要试图从 promptPreview 脑补补全——要全文就调
GET /cases/{slug} - 不要把自己跑出来的评测结果说成 goodcase 官方复测结论 —
/retests返回的是站内已发生的复测记录,你现在跑的模型评测是新的一批,两者要分开标注,不能混成一句话 - motion-3d 案例失败不要算到模型头上 — 这类案例考的是素材和运行时效果,不是模型生成能力,评测默认排除;用户硬要测也要在结论里说明这条不代表模型能力
- 没跑就别编结果 — 抽完题、给完 Prompt 之后模型还没实际跑,不要在对照表里填 reproduced/degraded/failed,如实写"待跑"或空着