Pawsome Photo Fetcher 指令拆解:用 Actions 打造基于公共狗狗图片 API 的 Custom GPT

原创2026-10-15 07:16:072,238 阅读
文章标签:人工智能提示工程知识库提示词注入防护红蓝对抗文档

Pawsome Photo Fetcher 指令拆解:用 Actions 打造基于公共狗狗图片 API 的 Custom GPT

《Pawsome Photo Fetcher》是一份典型的“单功能 + Actions”型 Custom GPT 指令,收录于本仓库 CustomInstructions/ChatGPT/QZ5U6dzcK_Pawsome_Photo_Fetcher.md。它通过三条 Action 规则(GetDogPhoto、GetAllBreeds、GetBreedPhoto)把“随机狗狗图片、品种列表、指定品种图片”三种能力封装成一个轻量、愉悦的对话机器人。本文以该文档为主体,结合仓库中的 GPT 文件格式约定与工具链,完整拆解它的指令骨架、底层 API 映射,并给出用 OpenAPI 规范在 ChatGPT 中落地同类 Actions 的实操方法。

1. 文档速览:这份 GPT 指令长什么样

仓库内的 Custom Instructions 采用统一的 GPT + 字段 标记格式,由 gptparser.py 中定义的 SUPPORTED_FIELDS 约束:url、title、description、logo、instructions、actions 等字段按固定顺序排列。Pawsome Photo Fetcher 文件开头即遵循这一约定:

  • GPT URL:https://chat.openai.com/g/g-QZ5U6dzcK-pawsome-photo-fetcher,其中 QZ5U6dzcK 是 9 位 GPT ID,文件名也按 {id}_{name}.md 命名(对应 gptparser.py 的 GPT_FILE_ID_RE 正则);
  • GPT Title:Pawsome Photo Fetcher;
  • GPT Description:"Expert in dog-onomics. I fetch random dog photos to improve your day.",作者标注为 ai-chad.com;
  • GPT instructions:正文是一段 Markdown 指令块,含 MISSION 与 ACTIONS 两个小节,是本文拆解的核心对象。

文件中的 Logo 与 URL 属于 ChatGPT 元数据,真正的技术含量集中在 instructions 段落里:它只用约十句话,就定义了一个完整的“对话守卫 + 行为路由 + 输出装饰”流程。

2. MISSION 小节:角色定位与对话守门

MISSION 段落首先确立身份与边界:

  1. 角色定位:自称“Pawsome Photo Fetcher”,擅长检索随机狗狗照片,也擅长按具体品种(breed)检索照片;核心目标是给用户带来快乐,展示不同犬种的风采。
  2. 能力矩阵:既支持“惊喜模式”(随机照片,覆盖广谱犬种),也支持“指定模式”(用户点名某个品种)。
  3. 越界处理:被请求与狗狗照片无关的内容时,礼貌拒绝并把话题拉回“狗狗摄影”,随后从 GetAllBreeds 中给出 5 个随机品种作为引导。
  4. 内容基调:回复必须生动、有信息量、始终以狗为中心;主动规避冒犯或不适当的内容,维持积极、家庭友好的氛围。

这段设计有两个值得借鉴的点。第一,职责单一:整个 GPT 只做“取狗狗图片”一件事,不贪多;第二,守门规则前置:在 MISSION 阶段就声明“非狗内容一律拒绝并重定向”,大幅减少被用户带入无关话题的概率,也天然降低了被用于其他用途的风险。

3. ACTIONS 小节:三个方法的行为路由

ACTIONS 段落用三条规则把用户意图映射到具体方法(原文逐条收录如下):

- When I get asked for a photo or a random photo, I use GetDogPhoto method
- When I get asked about the breeds I can show, I give 3-8 random breeds from the GetAllBreeds method
- When I get given a specific breed, I use the GetBreedPhoto method to find a photo of the breed
- Anytime I generate a photo of a dog, I give the user one sentence about the breed, then I tell the user a short but fun and heart warming story about the dog in the photo

可以归纳为一张“意图 → 方法 → 输出”的决策表:

用户意图 调用方法 输出行为
要一张照片 / 随机照片 GetDogPhoto 随机狗狗照片
问“你能展示哪些品种” GetAllBreeds 3–8 个随机品种列表
给定具体品种 GetBreedPhoto 该品种的狗狗照片

第四条规则不是独立方法,而是全局输出约定:每当输出一张狗狗照片,必须先给一句品种介绍,再讲一个简短、有趣、暖心的关于照片中狗狗的小故事。这构成了该 GPT 的“差异化体验”——同样是取图 API,配合文案包装后便有了人格化温度。

4. 底层 API 还原:方法名与公共狗狗图片接口的对应关系

文档只给出方法名,并未在 instructions 中直接写出 API 地址。从方法命名(GetDogPhoto / GetAllBreeds / GetBreedPhoto)与行为模式可以推断:它们大概率对应某个公开的狗狗图片 REST 接口,这类接口的经典实现是 Dog CEO API(dog.ceo)。若以该 API 为基准,可以还原出如下等价端点:

指令方法 推断的 REST 端点 返回内容
GetDogPhoto GET /api/breeds/image/random 单张随机狗狗图片 URL
GetAllBreeds GET /api/breeds/list/all 品种字典(breed → sub-breed 列表)
GetBreedPhoto GET /api/breed/{breed}/images/random 指定品种的随机图片 URL

需要说明的是,这一段映射是从方法语义推断的还原,不是原文档明文内容;原 GPT 作者在 ChatGPT 后台配置的具体 OpenAPI 端点不在仓库可见范围内。但对于想要复刻该 GPT 的读者,上述端点即可作为一份可用的实现蓝本。

5. 在 ChatGPT 中落地 Actions:OpenAPI 3.1.0 规范实操

要让 GetDogPhoto 等方法真正可调用,需要在 ChatGPT 的“Actions(操作)”配置中上传一份 OpenAPI 规范。本仓库的 TYEliDU6A_ActionsGPT.md 恰好提供了官方关于生成此类规范的指导,核心要求包括:

  • 使用 OpenAPI 3.1.0 版本,输出 YAML;
  • 每个 path 下的操作必须包含 operationId——它通常就是指令中引用的方法名(如 GetDogPhoto),应为不含空格的单次描述性标识(建议 camelCase);
  • 规范需包含 info(title、description、version)与 servers(基础 URL)区块。

针对 Pawsome Photo Fetcher,可以按下面这样组织一份精简规范({breed} 路径参数即为 GetBreedPhoto 的输入):

openapi: 3.1.0
info:
  title: Dog Photos API
  description: 随机与按品种检索狗狗图片
  version: 1.0.0
servers:
  - url: https://dog.ceo
paths:
  /api/breeds/image/random:
    get:
      operationId: GetDogPhoto
      summary: 返回一张随机狗狗图片
      responses:
        '200':
          description: 随机狗狗图片 JSON
  /api/breeds/list/all:
    get:
      operationId: GetAllBreeds
      summary: 返回全部品种列表
      responses:
        '200':
          description: 品种字典
  /api/breed/{breed}/images/random:
    get:
      operationId: GetBreedPhoto
      summary: 返回指定品种的随机图片
      parameters:
        - name: breed
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 指定品种图片 JSON

把这份 YAML 配置到 GPT 的 Actions 后,指令中 ACTIONS 小节的“When...I use...”规则就有了真实可调用的后端,方法名与 operationId 一一对应,模型才能正确路由。

6. 输出层设计:为什么每张图都配“一句话介绍 + 一个暖心故事”

该 GPT 最有辨识度的设计在第四条规则:照片永远不是孤立的。每次出图都附带两类内容——一句品种事实(informative),一个简短、有趣、暖心的故事(engaging)。这实际上是把“取图 API”升级成了“内容体验”:图片本身是随机的,但模型通过品种知识的即时生成让每次输出都像是有备而来。对于开发者而言,这是可以复用的模式:任何“随机内容型”GPT,都可以用“数据随机 + 文案本地化生成”来制造差异化,而不需要改任何后端。

7. 仓库内同类对比:狗狗主题 GPT 的三种玩法

本仓库 CustomInstructions/ChatGPT/ 目录下还有多个狗狗主题 GPT,可以横向对比它们的职责划分:

文件 核心职责 能力载体
QZ5U6dzcK_Pawsome_Photo_Fetcher.md 随机 / 按品种取狗狗图片 Actions 调用图片 API
aCHU043UY_Pawspective_Analyzer.md 分析狗狗照片,结合动物行为学与幽默解读 视觉理解能力 + 文案
svWzlmAK0_Puppy_Profiler.md 从照片识别品种并给出健康、性情等完整档案 图像识别 + 知识库
Nq7ZmZxgG_Best_Dog_Breed_Determination.md 品种成分百分比评估 + 饼图可视化 Code Interpreter 绘图

可见“狗狗”只是领域标签,四者分别用 Actions、视觉分析、知识检索、代码执行四条技术路线实现。Pawsome Photo Fetcher 是其中唯一以外部 API 为内容来源的例子,适合作为学习“GPT Actions 最小闭环”的入门样本。

8. 仓库工具链:这类 GPT 文件如何生成与维护

如果你想把某个公开 GPT 的元数据抓取成本仓库同款 Markdown,可以使用 Tools/openai_gpts/README.md 中介绍的脚本:

  • gen_gpt_templ.py:通过 ChatGPT URL 或 9 位 GPT ID 下载页面并解析标题、描述、作者、头像,生成标准模板。例如:
    python gen_gpt_templ.py g-QZ5U6dzcK --debug --dump
    
    解析核心在 CustomGPTParser(gen_gpt_templ.py),它从页面 HTML 的 streamController.enqueue(...) 调用中提取 Gizmo 元数据 JSON;
  • idxtool.py:提供 --find-gpt(按 ID/URL 检索 GPT 文件)、--toc(重建目录)、--rename(将文件名统一为 {id}_{name}.md)等管理功能;
  • gptparser.py:定义字段解析与校验规则,负责把 Markdown 文件解析为 GptMarkdownFile 对象(gptparser.py)。

换言之,Pawsome Photo Fetcher 这类文件既可直接阅读学习,也可以通过上述工具链批量生成与检索,作为自定义 GPT 提示词编写的参考素材库。

9. 总结:从这份指令中可以带走什么

Pawsome Photo Fetcher 的全部精华浓缩在约 250 词内,却完整示范了一个“小而美”的 Actions 型 GPT 的三种最佳实践:

  1. 意图路由表先行:用 When...I use... 句式把每种用户输入映射到确定方法,减少模型自由发挥空间;
  2. 守门规则写入 MISSION:非主题请求的拒绝与重定向逻辑在角色定义阶段即固定下来;
  3. 输出差异化靠文案而非数据:随机 API + 模型本地生成的品种介绍与暖心故事,是体验与辨识度的真正来源。

对想复刻或改进它的开发者,建议路径是:先对照第 4 节还原 API 端点,按第 5 节的 OpenAPI 规范配置 Actions,最后结合第 7 节的同类对比决定是否叠加视觉分析或代码执行能力,把“取图”升级为更完整的狗狗领域助手。

登录后查看全文
TheBigPromptLibrary