Agent 链式调用两个 Hugging Face Spaces 构建 3D 巴黎画廊
How an Agent Built a 3D Paris Gallery by Chaining Two Hugging Face Spaces
Hugging Face 通过 `agents.md` 文件使每个 Gradio Space 暴露可调用的 API schema、端点、文件上传和认证方式,让 coding agent 无需客户端库即可端到端驱动多媒体模型。作者让一个 agent 链式调用两个 Spaces——图像生成 Space 和 `VAST-AI/TripoSplat`(单图像到 3D Gaussian splat 重建)——自动生成巴黎地标的 3D 画廊,包括翻转 Y 轴、压缩 `.ply` 为 `.ksplat`、构建 Three.js 查看器并部署为静态 Space。整个过程无需人工打开图像生成器或 3D 重建工具,仅通过审美调整对话完成。
](https://huggingface.co/mishig)
一个 agent 利用两个 Hugging Face Spaces 构建了一个 3D 巴黎画廊。
我让一个 coding agent 搭建一个漂亮的网站,将巴黎地标展示为 3D Gaussian splat。我从未打开过图像生成器,也从未碰过 3D 重建工具。这个 agent 通过直接调用两个 Hugging Face Spaces 生成了所有素材(图像和 3D splat),然后将它们整合到一个电影感十足的查看器中。
以下是结果,以静态 Space 形式呈现:
这篇文章将探讨这如何成为可能,以及为什么我认为这预示着未来大量多媒体软件的构建方式。
积木经济降临多媒体领域
Mitchell Hashimoto 最近描述了一种他称之为积木经济的转变:构建软件最有效的路径不再是打磨一个庞大的单体,而是使用小巧、文档完备的组件,让其他人(尤其是 agent)来组装。他的关键观察是:AI 从头构建一切的能力尚可,但它在拼接经过验证的组件方面非常擅长。
这个论点主要围绕代码库展开。但同样的力量正在冲击多媒体 AI。使用最先进的图像模型、视频模型、TTS 模型或 3D 重建模型的难点从来不是模型本身,而是集成:SDK、权重、GPU、输入格式、轮询。如果每个模型都是一个有文档、可调用的模块,那么 agent 就能像拼接 npm 包一样将它们粘合在一起。
这正是 Hugging Face Spaces 悄然演变而成的形态。
每个 Space 都是一个积木块,通过 agents.md 实现
Hub 上托管着数千个最先进的模型(其中很大一部分是开放权重的),并且大多数都部署为交互式 Spaces。现在,每个 Gradio Space 都暴露了一个纯文本的 agents.md 文件,它精确地告诉 agent 如何调用它:
curl https://huggingface.co/spaces/VAST-AI/TripoSplat/agents.md
一次性返回所有必要信息:schema URL、调用和轮询模板、如何上传文件以及认证提示:
API schema: GET .../gradio_api/info
Call endpoint: POST .../gradio_api/call/v2/{endpoint} {"param_name": value, ...}
Poll result: GET .../gradio_api/call/{endpoint}/{event_id}
File inputs: POST .../gradio_api/upload -F "files=@file.ext"
Auth: Bearer $HF_TOKEN
无需客户端库,无需硬编码集成。Agent 读取这些信息后,就能端到端地驱动这个 Space。设置好 HF_TOKEN 即可开始。
真正的解锁在于链式调用:一个 Space 的输出成为下一个 Space 的输入。Prompt → 图像 → 3D。这正是这个画廊背后的完整流水线。
实际案例:巴黎地标 → 3D splat
Agent 链式调用了两个 Spaces:
- 图像: 一个图像生成 Space 将每个地标转化为干净、深色背景的"标本"照片(埃菲尔铁塔则变成了底座上的小立体模型)。输入 prompt,输出图像。
- Splat:
VAST-AI/TripoSplat从每张单张图像重建出 3D Gaussian splat(.ply格式)。输入图像,输出 3D。
生成的图像
重建的 splat
Agent 生成的六张源图像,全部以黑色背景隔离,准备进行单图像 3D 重建:
之后,agent 还完成了"粘合"工作。它注意到 TripoSplat 的输出是 Y 轴向下,于是将其翻转直立,自动为每个地标取景,将 .ply 文件压缩为 .ksplat(体积缩小约 3 倍,加载更快),构建了一个带有滚动切换和拖拽旋转 UI 的 Three.js 查看器,并将整个项目部署为一个静态 Space。唯一的人工输入是审美层面的调整:"拉远一点","把方尖碑换成更适合 splat 的东西","过渡时间太长了"。
其中几个步骤是 agent 根据实际情况做出的反应。宽大的玻璃金字塔 splat 效果不佳;细长的方尖碑很乏味;单视角重建会推断背面。这正是积木经济所预测的"外包研发,快速迭代"循环,只不过这里的研发是一场对话。
为什么这很重要
- 模型变得可组合。 来自不同组织的 SOTA splat 模型和 SOTA 图像模型,无需集成代码即可链式调用。Hub 的开放权重目录变成了一个可调用的多媒体原语库。
- Agent 偏好有文档且可访问的组件。
agents.md让一个 Space 变得极易访问,因此 agent 会选择它,而不是需要手动设置的模型。这与 Hashimoto 指出的开源库动态相同。 - 集成曾是障碍,如今基本消失。 "将 prompt 转化为旋转的 3D 地标"过去是一个项目。在这里,它只是流水线中的一个步骤。
自己动手试试
将你自己的 agent 指向一个 Space 的 agents.md,让它自由发挥:
# 图像生成
curl https://huggingface.co/spaces/ideogram-ai/ideogram4/agents.md
# 单图像到 3D Gaussian splat
curl https://huggingface.co/spaces/VAST-AI/TripoSplat/agents.md
将任一链接粘贴到你的 coding agent(如 Claude Code 等)中,设置好你的 HF_TOKEN,然后让它构建一些东西。这个画廊完整、可复现的流水线,以及调用这两个 agents.md 端点的脚本,都存放在 Space 仓库中。
积木块就摆在 Hub 上。Agent 已经知道如何拼接。




