我如何用 AI 把数百座城市画成世界级艺术家的风格

中国北京
中国北京
美国旧金山
美国旧金山
日本京都
日本京都
比利时布鲁塞尔
比利时布鲁塞尔
梵蒂冈城
梵蒂冈城
巴西里约热内卢
巴西里约热内卢

这里的每一张都是由 AI 生成的。每一幅都以不同艺术家的风格创作,经过精心挑选以匹配那座城市的历史与文化。没有图库插图,没有滤镜特效。AI 不只是在生成一张图片;它在选择一种美学并将其呈现出来。

我为 ExploreFocus 构建了这套系统。这是一款番茄钟风格的专注计时器,每完成 30 分钟的任务,就能解锁一张世界城市的明信片。我希望这种奖励像是在旧货架上发现了一件艺术珍品,而不是看一眼索然无味的图库素材。

为了让它真正运转起来,我花了近一年时间,投入了几千美金,最后还发现了一个让我意想不到的模型。

近一年时间与几千美金

我原本打算这只是个周末项目:挑个模型,写几句像样的 Prompt,然后批量生成就行了。

我先试了几个大名鼎鼎的模型:Midjourney、Recraft V3、GPT-image-1。结果,它们无一例外都陷入了同样的困境,只是翻车的方式各有千秋。

事实准确性:模型会凭空捏造地标

AI 图像模型不擅长处理那些它没有真正理解的建筑。如果你要一个著名地标,它给你的东西看起来合情合理,甚至像模像样,但细节错漏百出。起初我以为是我的要求有问题,后来发现根本不是。

Midjourney 拉萨失败案例
Midjourney · 拉萨:宫殿不对,比例不对,层数不对。信心十足地呈现出来。
Recraft 罗马失败案例
Recraft V3 · 罗马:两座斗兽场并排而立。模型把这座城市最具辨识度的建筑复制了一份。
GPT 海参崴失败案例
GPT-image-1 · 海参崴:鲁斯基大桥应有两座由缆索相连的桥塔,结果只画出了一跨。

细节:模型只渲染结构,不注入灵魂

GPT-image-1 一开始看起来更有希望:幻觉更少,偶尔出错重新生成也能解决。但图像是平的。结构上说得通,却没有质感,没有个性,没有一丝地方感。你看着它,根本猜不出是哪座城市。

GPT 上海失败案例
上海:尝试了风格,却毫无细节
GPT 杭州失败案例
杭州:卡通感,无质感
GPT 未知城市失败案例
可能是任何一座城市

风格化:模型完全无视艺术家

我需要数千种截然不同的艺术风格,每一种都对应一位具名艺术家。

同一条 Prompt,每次生成的结果大相径庭。我让 Midjourney 以吴冠中的风格画上海(那位笔线飞舞、色点散落的抒情水墨大师),用完全相同的 Prompt 跑了两遍,回来的是两种截然不同的风格,而且两种都不是吴冠中。

吴冠中风格尝试第一次
同一 Prompt · 第一次尝试
吴冠中风格尝试第二次
同一 Prompt · 第二次尝试

GPT-image-1 的问题恰好相反:它完全不变。它会锁定某种通用的画风,然后把它套用到大部分城市。尤其是知名度较低的城市,看起来简直如出一辙:同样的卡通调性,同样的色盘,同样的笔触。几千张明信片,感觉全来自同一个地方。

GPT 风格漂移 1
GPT 风格漂移 2
GPT 风格漂移 3
GPT 风格漂移 4

四座不同的城市,同一种风格。无论指定了哪位艺术家,GPT-image-1 都默认套上同一套厚重的表现主义色调。

到这个阶段,我已经测试过 Recraft V3、Flux、GPT-image-1、Midjourney,以及大概上百种提示词变体,生成了数千张图片,烧掉了不少钱。每个模型都以自己的方式失败了:要么对世界充满自信却满口胡言,要么技术上说得过去却毫无个性,要么无论你怎么要求都锁死在同一种风格里。

我几乎要认栽了,觉得市面上没有任何模型能同时搞定这三件事。就在这时,Google 发布了新模型:Nano Banana Progemini-3-pro-image-preview)。我试着跑了第一批图,心里虽然还有期待,但也做好了再次翻车的准备。没想到,地标是对的,光线也对味。我一直把整批图都生成完了,才敢相信这不是运气。这是我第一次看生成的图,不是在玩“找茬”。

香港
第比利斯
芝加哥
巴库
Nano Banana Pro
Nano Banana Pro · 香港
Nano Banana Pro · 第比利斯
Nano Banana Pro · 芝加哥
Nano Banana Pro · 巴库
GPT-image-1
GPT-image-1 · 香港
GPT-image-1 · 第比利斯
GPT-image-1 · 芝加哥
GPT-image-1 · 巴库

莫奈问题

每座城市都需要一位属于它的艺术家:巴黎对应 Claude Monet,芝加哥对应 Edward Hopper,伦敦对应 J.M.W. Turner。我构建了一个 Agent,给定一座城市,它会找到一位与该地区匹配的艺术家,并生成一条量身定制的图片 Prompt。

问题在于:放任模型自行选择,它会表现出强烈的偏好。Turner 会出现在二十多座城市里,莫奈则会覆盖半个欧洲。当我查看完整列表时,同样的几个名字反复出现。模型已经向其训练数据中最频繁的关联特征坍缩,完全无视了我的要求。

我试着在 Prompt 里解决这个问题,要求它多样化:选地区性艺术家,避免重复,多探索知名度较低的名字。

给定城市 {city},{country},找一位风格和文化背景最能代表该地的艺术家。优先选择本地出生或与该地区有历史渊源的艺术家。确保整个合集的多样性,避免重复选用 Monet 或 Turner 等热门艺术家。

但折腾半天,Turner 还是会反复出现。模型根本不记得它已经用了这个艺术家十九次:对他来说,每座城市都是一个全新的请求,不存在任何上下文共享。

突破口在于加入一个记忆层。在每次请求前,我会查询数据库,取出所有已分配的艺术家,把这份名单作为硬性约束塞进 Prompt 里。

Prompt 变成了这样:

以下艺术家已被使用。请勿再次选择任何一位:
  J.M.W. Turner(x21),Claude Monet(x14),Winslow Homer(x8)……

给定城市 {city},{country},找一位风格和文化背景最能代表该地的艺术家。优先选择本地出生或与该地区有历史渊源的艺术家。确保整个合集的多样性。

这招果然见效。摩纳哥分到了 Tamara de Lempicka。马赛分到了 Paul Signac。里昂分到了卢米埃尔兄弟(Lumière Brothers,电影发明者,生于里昂)。科隆分到了 Gerhard Richter。

摩纳哥 — Tamara de Lempicka
摩纳哥 — Tamara de Lempicka
马赛 — Paul Signac
马赛 — Paul Signac
里昂 — 卢米埃尔兄弟
里昂 — 卢米埃尔兄弟
科隆 — Gerhard Richter
科隆 — Gerhard Richter

那些你不知道自己需要的规则

多样性问题解决了。接着模型开始生产没人要求的东西,有些甚至让人哭笑不得:

艺术家签名失败案例
模型用那位艺术家的风格在画作上签名
博物馆画框失败案例
把图像装裱成画廊展品
添加文字失败案例
印章、横幅、产生幻觉的城市名称

模型怀着高度的投入,会用它所模仿的艺术家的风格在画作上落款。另一个“最爱”:把整幅图像装裱成仿佛已经挂在画廊里的样子。用心良苦,完全不想要。

这些问题不是一个一个冒出来的。一个批次回来,签名、画框、莫名其妙的文字可能同时出现。修复它们需要多轮迭代:修掉看得见的,再跑一遍,再发现漏掉的。那些迭代积累下来的,本质上就是一份 Negative Prompt 列表:no text, no signatures, no borders, no frames。每一行,都是我亲眼见到之前从没想到要禁止的东西。

先造了一个错误的系统

我有了可用的模型,可用的艺术家系统,还有一份越来越长的约束条件。现在要把整套流程跑遍几百座城市,还不能让它中途崩掉。

我的第一直觉是构建一条传统的流水线:线性的步骤序列,每一步都有自己的错误处理、重试逻辑和数据库状态管理。我开始手动编写代码来处理每一个边缘情况:

我在这上面浪费了大量心血。逻辑越来越复杂,每遇到一种边缘情况,都得往里塞更多代码。

正当我写着又一个重试逻辑时,灵光一闪:能不能干脆让 Agent 自己来解决这件事?我放弃了死板的工作流,直接给它配上工具。

让人惊讶的是,这样做的效果远超那套臃肿的旧流程。现在加一座新城市,不用再写代码了,只需要给它发一条简单的消息:“在东南亚找个城市。”它会自动检索、定位,然后自行跑完整套流程。


一些感悟

在这个项目刚开始的时候,“Agentic”还没火到满大街都是。在那时,给 AI 配上记忆和工具、让它自己推理解题,还是个极具挑战性的实验。没有框架,只能边摸索边踩坑。这就是最有意思的地方,也彻底颠覆了我对软件工程的认知。


在我人生第一堂绘画课上,我认认真真、颇为自豪地画了一只 Hello Kitty。同学们毫不客气地告诉我,这个选择”不太爷们儿”。从那之后,我再也没有带着那种喜悦拿起过铅笔。

我至今不会画画。但我花了好几个月挑选艺术家、撰写 Prompt,看着那些画从我从未到访过的城市里回来。我不知道该如何定义这件事,但它感觉像是某种真实的东西。


附录

关于 ExploreFocus

ExploreFocus 是一款面向 iOS 的番茄钟(Pomodoro)风格专注计时器。每完成一个 30 分钟的工作时段,就会解锁世界某座城市的一张明信片,而且以该地区本土艺术家的风格绘制。明信片可收集,合集随时间不断增长,而这份奖励的设计初衷,就是让人感觉像是从旧货架上抽出一张真正的艺术作品。

App screenshot 1
App screenshot 2
App screenshot 3
App screenshot 4
App screenshot 5

如果用完全不搭的风格画一座城市?

系统的逻辑是让艺术家配回他们原本所在的城市。但如果反过来呢?比如把阿姆斯特丹画成水墨风格,把纽约画成浮世绘?

中国水墨 — 阿姆斯特丹
中国水墨 · 阿姆斯特丹
美国写实 — 东京
美国写实 · 东京
City Pop — 香港
City Pop · 香港
浮世绘 — 纽约
浮世绘 · 纽约
文艺复兴 — 上海
文艺复兴 · 上海

错位往往比”正确答案”更有意思。水墨画出来的阿姆斯特丹运河,是荷兰黄金时代的画家从没想过要画的。美式写实放到东京,反而像它本来就该长这样。


为叙事选择合适的 LLM

每座城市还需要一段约 100 字的电影感描述。我测试了 Claude、Gemini、GPT、Grok、Qwen 以及其他一些模型。我发现每个模型都有自己独特的”口味”,无论提示词怎么写,都会向某种默认腔调滑落。GPT 刻板而结构化,对风格方向有较强的抵触。Gemini 流畅却空洞,美丽的句子里什么具体的东西都没说。Grok 在电影感腔调与密集事实之间踩到了甜蜜点,尽管它在遵循提示词结构方面不那么稳定。

伦敦,GPT 和 Gemini 的版本:

GPT

Roman Londinium grew around a river crossing, its timber wharves feeding markets and, after the Great Fire of 1666, Christopher Wren’s spires rose like new compass points. In coffeehouses, marine risks were tallied and stock prices chalked, seeding Lloyd’s and the Stock Exchange. Today, the Square Mile and Canary Wharf hum with screens where code prices the tides, while studios, stages, and labs from Soho to King’s Cross test ideas before the world. The Tube’s refrain — Mind the gap — could be the city’s creed: a place that bridges old lanes and bold skylines, Dickensian alleys and The Shard’s edge, turning trade and conversation into its enduring glow.

Gemini

From a bustling Roman trading post on the Thames, London grew beyond its ancient walls, ceaselessly redefining itself. Its enduring heart remains a nexus of global commerce, where the Square Mile orchestrates international finance and tech hubs sprout new futures. Simultaneously, the city’s vibrant cultural districts, from West End theatres to cutting-edge galleries, draw millions, embodying its celebrated blend of tradition and avant-garde. This ceaseless pulse of innovation and heritage ensures London remains a dynamic, influential world city, constantly evolving, forever captivating.


当被要求用中文生成时,GPT-5 的输出几乎无法阅读,生硬且机器翻译感扑面而来。Gemini 则截然相反,产出了真正优雅的中文散文,而且两种语言之间的腔调保持了一致。对于一款多语言产品来说,这不是小事。

Gemini — 伦敦(中文版):

伦敦的故事,始于古罗马的伦丁尼姆,一个泰晤士河畔的边陲贸易站。历经千年风雨,它从”雾都”的传奇中走出,蜕变为全球金融的心脏、创意产业的沃土和顶尖学府的聚集地。这座古典与现代交织的城市,大本钟的古老钟声与创新脉动并存,是名副其实的多元文化熔炉。伦敦,以其独特的包容与活力,持续书写着世界级都市的辉煌篇章。

GPT-5 — 伦敦(中文版):

当罗马人在泰晤士潮汐边插下一枚桩,称它为伦迪尼姆,商旅顺水来。火与雾锻过骨骼,木梁化作石街,仓栈蜕成玻璃群岛,旧船坞点亮金丝雀夜。莎翁回声在西区延续,硅环岛光标与交易钟声交错,令雾都心跳由资本、代码与戏曲合奏。


GPT 图像泛黄问题

回顾一下本文前面的 GPT-image-1 示例。除了风格漂移之外,它们还有一个共同点:整体笼罩着一层温暖、混浊的黄色调。这不是巧合。

GPT 泛黄色调 1
温暖的黄色调
GPT 泛黄色调 2
同样的色调,不同的城市

这是一个有据可查的问题。搜一下就能找到大量开发者在尝试同样的修复方法:风格指令、光线描述、后处理。但没有一个能稳定起效。

令人惊讶的是,在每条提示词末尾加上 "color temperature 6500K" 有所帮助。6500K 是日光平衡白;它能把模型从默认的偏暖倾向中拉回来,往更中性的方向靠。这虽不是完美的解决方案,但效果明显更好。

Junping Yi
Junping Yi

独立开发者,对 AI、设计和人究竟是怎么学会东西的有些执念。了解更多 →