Flaneur 创造手记

TL; DR

我们团队于 4 月 8 日 ~ 4 月 10 日参加了即刻公司举办的 Hack Engine 活动，本文描述了我们的项目 Flaneur 诞生的过程，她是一个使用人工智能生成音乐、声音和内容的网站，旨在让用户感觉像是与一个老朋友一起散步。作者还讨论了其他在 Hack Engine 活动中展示的项目，包括旅行规划和泛知识管理。

Hack Engine 是做什么的

以下是 Hack Engine 的官方介绍：

Q: Hack Engine 和 Hackathon 有什么区别？
A: 没有区别。只是除了 Hackathon，我们也是孵化器、基金、alumni 创业者网络。
Q: 那不就是 Y Combinator 吗？
A: 是的。

简单来说，Hack Engine 组织了一个 AI 主题的 Hackathon 活动，一支队伍最多 5 人，需要在 48hr 内完成一个小产品的开发并进行演示。

我们团队也非常关注生成式 AI 的发展和应用，加上我自己是老即刻用户，很快便决定参加了。我们很好奇大家能把 AI 用成什么样子，也想认识一下熟悉的 ID 背后的真人。

我们团队由 5 人构成：后端工程师 @ 晓，前端工程师 @ Edison，设计师 @ Brant，打杂的 @ Jason，另外从滑雪群里 (?) 抓来了算法工程师 @ York 作为外援。我们团队几乎没有参加 hackathon 的经验，所以出发前请教了一下 @Junyu。豌豆荚应该是国内最早办 hackathon 的公司，通常是 24 小时内开发一款小应用；我问到最深刻的事情，@Junyu 抬头看了看天 (调用云计算？)，讲起有一年 hackathon 刚好碰上北京下特大暴雨，正好大家一起通宵，中间还考虑要不要出去救人。@Junyu 给了我三个锦囊妙计：最重要的是开发完，其次是有趣，再其次…… 没了。

因为题目是 kickoff 当天才会公布，我们并没有做太多其他准备。工程上，我们部署了一台可以运行 Stable Diffusion 的服务器，另外准备了两个不同账号的 OpenAI API，以防临时被封。另外结合 @Junyu 的锦囊妙计我们确定了选题的几个原则：

好玩有趣，足够小 / 垂直

两天能做出来

或者两天做不出来但是足够震撼（可以只放一个视频作为 demo? ((fake it till you make it

Copilot for ?

周六上午 9:30，题目公布：Copilot for X。

Copilot for X，X = anything，所以就是什么都没说啊！为了避免思路过早收敛，我们决定先各自想想，再碰头讨论。我本来想趁此机会 social 一波，没想到其他队伍都在热火朝天地讨论甚至已经开始动手了，惊。等到我们该碰头讨论了，肚子已经饿了，还是先去填饱肚子吧。

活动在五角场，我们都不熟，也不知道去哪里吃饭，干脆一边溜达一边讨论，于是灵感来了！

上海是一座非常适合散步的城市，我想起多年前有次在上海散步，大概是夏天的晚上，我一个人在衡山路溜达，吹着晚风，听着歌，十分惬意。当时听的歌是舒淇的 Tram ，来自 LV SoundWalk 系列中的香港专辑 (没错是香港)。LV 选了香港一些标志性的地点，请了当地的音乐家谱曲，请舒淇配音介绍，融入故事，非常好听。不过这个系列在国内只有北京、上海、香港三张专辑，一下就听完了。北京是巩俐配音，上海是陈冲配音，强烈推荐真的按照专辑里的地点顺序走一走，一边听歌。

Tram - 舒淇

整个系列里我最喜欢的还是这首 Tram，舒淇的声音实在太好听了！所以我想到，如果用 AI 生成类似的内容，还可以加上 AI 生成的背景音乐，应该挺不错的。

我们讨论了下，确实可行，想法也有了一些延伸：比如可以加上一些更有时效性的信息，如当时的天气、用户的运动状态、步频，这样哪怕在同样的地点打开，每次听到的内容也会不一样；可以多抓取一些信息来介绍附近的地标建筑。

我们梳理了需求，这个小产品大概会有以下特点：

完全不需要操作，打开就能用

根据当前的位置、天气、运动状态等信息，生成匹配步速的背景音乐

用好听的女声向你介绍附近街区的历史、故事，就像有个真人在陪着你散步

会预先生成所在街区和附近街区的内容，这样你可以一直散步，内容不会中断

最终的效果是一个简配版的 LV SoundWalk。或者从另一个角度理解，LV SoundWalk 过于精英了，只有有限的几个地点。而事实上我们生活的每一寸土地都有自己的故事，每个地方都值得拥有自己的 SoundWalk，所以也可以理解为 SoundWalk 民主化。

周六下午两点完成构思和分工，开干！

Flaneur 的诞生

@Junyu: 做产品的第一步，先买一个域名

首先，我们需要给这个产品起一个名字。

上海是一座非常洋气的城市。我刚来上海那天，从机场坐地铁到市区，走出地铁站看到有位衣着非常考究的少女，手里捧着一束花，用英文报纸包着。上海真洋气啊！我不禁感慨。走近一看，我发现我错了，不是英文报纸，是法文报纸。上海真是太洋气了！我不禁感慨。

由于是在上海散步给我的灵感，我们也是在上海开始创造这个小产品，那么一定得要一个洋气的名字才行！

于是我们给这个产品取名 Flaneur，法语中「漫游」的意思，特指「无所事事的漫游」。鉴于 Flaneur 没有任何交互功能，这个名字实在非常贴切。

Flaneur 的实现大概可以归纳为以下几个步骤：

获取用户的状态信息，如地理位置，运动状态

抓取该地理位置相关的信息，如当时的天气、维基百科介绍、POIs

用 GPT 生成一段描述，涵盖 #2 中的信息

将 #3 中生成的描述，用 TTS 转换成真人的发音（舒淇）

根据 #1 & #2 中的位置、天气、运动状态等，生成一段合适的 BGM；如果是散步则舒缓，如果用户在跑步则可以高亢一些

把 #4 & #5 合并音轨播放出来

为了方便演示，我们还是需要一个界面，可以滚动展示 #3 中的描述

工程上并没有太多难度，唯一遇到的问题是网页无法获取用户的运动状态，我们决定放弃这个信息。有趣的部分在于 AI 相关的实现，这部分过程也让我们很有启发。AI 部分可以分为：文本生成，文本转语音 (TTS)，音乐生成三个部分。

LV SoundWalk 系列的念白都非常有味道，结合了当地的历史和特色，让 GPT 生成类似风格的文本就很关键。GPT 主要由我来调教。我以五角场为例，找了一些维基百科上的资料作为 prompt 给 GPT，让他扮演「伴游」来介绍五角场，但是这样生成的文本都非常「导游」。我想到可以加入一些更有「临场」的描述，如「你刚刚路过一扇古朴的门」，这样效果好了一些，可 GPT 还是忍不住说「欢迎来到五角场」或是「你好，老朋友」这样的话，而我认为好的效果是一个温柔的女声直接「闯」进你的耳朵，不用客套寒暄，直接开始和你对话（不然我会不好意思，毕竟是一个声音很好听的女声）。

后来我突然想到，让 GPT 扮演「向盲人朋友介绍附近街区」，这个设定下效果非常不错！但 GPT 总是忍不住在最后加上一句「尽管你看不见，但……」这样的安慰。同样思路下我调整了 prompt，于是最终 prompt 和效果是这样：

TTS 是整个过程中最有挑战的部分！TTS 即语音转文字其实有很多成熟的方案了，比如经常在抖音上听到的「家人们，谁懂啊」和「注意看，这个男人叫小美」，但 Flaneur 显然不能用这么没有逼格的声音，不是舒淇也至少得是高圆圆吧！所以我们调研了一下定制化的 TTS，发现有两个方案：

MockingBird：一个开源的模型，只需要几秒钟的源音频就可以生成任何文字的朗读，需要自己部署，演示效果尚可

11Labs：上传一段 10m 的音频文件就可以生成任何文字的朗读，效果非常惊艳！付费（看起来不贵）。缺点是只支持英文。

其他还有些国产厂商的声音定制方案，但是需要 15+ 工作日和十几万的费用。。。似乎他们用的都是很古早的技术，所以成本高企。

@ York 花了非常多的精力部署 MockingBird 模型并进行优化，但最终效果依然乏善可陈。我们研究了模型背后的技术，MockingBird 是基于上一代的 GAN 的，可能这是效果一般的原因。

@ York 苦逼调模型的同时我开始玩 11labs 了。我首先尝试了舒淇的声音 + 中文朗读，出来的效果像是刚考 HSK 的老外念中文。舒淇的声音 + 英文则少了点感觉，没有那么惊艳。那如果用大家熟悉的外国女星呢？我第一反应就想到了 Scarlet Johansson 和 HER 这部电影。

结果效果非常惊艳！虽然没能「拥有」舒淇，但我却意外收获了 Samantha，还要什么自行车！

家人们谁懂啊！

音乐生成则是最平常的部分。很多年前就有根据步频生成对应 BPM 的 BGM 的软件了，没有太多想象力。加上时间有限，背景音乐我认为不花太多精力，因此决定用 AI 预先生成一堆不同 BGM 的音乐，demo 的时候播放现成的就可以了。

因为界面很简单，我们第一天就完成了界面的开发和接口适配；花时间最多应该的应该是 @晓 负责的后端和 @ York 负责的 TTS 部分，我们在第二天傍晚调通了所有接口；两天都是 12 点准时打开离开会场，很多团队还在肝。

溜了溜了

在？看看效果

下面请看我们的演示视频：

假装有视频

简单讲解一下：

打开网页就能用，无需任何操作

所有内容都是 AI 生成的，包括内容、音乐和 Samantha 性感的声音（音乐虽然是预先生成好的但也是 AI 生成的

我们甚至植入了一段广告作为彩蛋（说不定真的可以商业化呢

体验地址：https://flaneur.polytimeapp.com/
文末阅读原文也可以打开，请在移动端打开

打开后需要点一些气泡中间开始播放，现在加载还是有些慢，生成的信息也有些单调，请给 Flaneur 一些耐心。

我们最早构思的时候，完全以 LV SoundWalk 为灵感。但当我真的用的时候，听到 Samantha 声音的介绍，我很想和她对话聊天！

我很喜欢散步，有时候是为了思考，有时候是和朋友一起。最舒服的状态其实是去一个陌生的街区，和「一个很熟悉的朋友」散步，我经常有些奇怪的联想和很冷的吐槽段子，陌生的环境会让我有更多灵感和线索，边散步边讲这些还有人回应就是最舒服的状态。

进一步地，如果加上调用手机的摄像头能力，用 CLIP 模型理解图像并把这个作为 prompt 的一部分给 GPT 生成内容，就真的可以让 Samantha 啊不对 Flaneur 看到你看见的东西，她真的就像一个陪你散步的老朋友，听你扯淡，陪着你走过一条又一条街道。就像电影 HER 里一样。Her 已经是整整十年前的电影了，Her 的取景地也恰好在上海。

有种梦想照进现实的感觉，wow

Demo Day!

Demo Day 就是一百支队伍要在一天内展示自己的成果，非常炫酷！
每支队伍只有 5min 时间，超时会被无情打断，非常残酷！
迫不及待看到大家的作品，一库一库！

我们的展示被排在倒数第四个进行，到那个时候我其实已经很困了。。不过进行的很顺利，想讲的东西也讲出来了，所以并没有太多可写的。

我认真听了几乎所有项目，并给喜欢 / 有趣 / 印象深刻的项目做了笔记。还是不如前辈勤奋，@junyu 给每个项目都认真做了记录。因为主办方应该有些保密的考虑，所以我只写写抽象的感想吧。

看到了几个 AI 与科技向善的结合，非常喜欢。生成式 AI 的这波火爆让很多朋友担心自己未来会不会被 AI 取代（尤其是律师、程序员、投研这样的职业），恰好昨天和朋友聊起人类历史上的技术变革，其实每次都是对人本身的解放 —— 短期也许会有一些人受影响失业，但很快就会发现人们其实是被从「不那么人的工作中」解放出来去做「更适合人本身做的工作」。AI 可以帮营销号灌水，也可以帮视障群体更加无障碍地与世界交互。

有好多个项目是旅行规划为主题的。我们也考虑过这个主题，但发现可能面临的问题是我们没有数据可以用。航班的动态价格、酒店的房间报价、甚至地图路线，这些都是约束条件，而这些数据全都被 OTA 服务商掌握并有严格的反爬策略，所以很可能做出一个美丽的产品却没有任何数据可用。移动互联网时代以来，数据被大公司牢牢把控，并被困在一个个 app 孤岛中，用户也形成了「打车去滴滴」「视频去抖音」「活腻了去百度」这样的认知，然而他们本质上都是「信息」，而不是「视频 / 文字 / 语音 / 地图」或是「笔记 / 邮件 / 日程 / TODO」，很难说这不是「互联网的一段弯路」。

Hack Engine 最多团队做也是我最感兴趣的主题其实是「泛知识管理」。GPT 本身是一个语言模型，不具备逻辑推理能力，而人类的知识其实存在于各种逻辑关系中，「地球是圆的」这个命题不重要，「重力使得地球的物质向中心聚集，因此地球形成近似球体」这个命题是重要的，知识论将知识定义为 Justified True Belief，JTB，即知识需要同时满足以下三个条件：

某人相信某件事；

这个信念事实上是真的；

这个信念是有理由证明的。

三个条件缺一不可，举几个反例：重力使得地球的物质向中心聚集，因此地球变成了一个 Bagel（信念事实上是假的）；因为地球内部有个仓鼠在跑轮子，所以地球是圆的（该信念的证明是错的）。

GPT 全名 Generative Pre-Trained Transformer，本身是一个「大语言模型」，ChatGPT 的推出更像是一个临时的、用来抢占用户注意力和数据的举动，并不一定 GPT 最好的形态 / 应用就是「对话式的」，而现在大家都在做对话，我认为有点被 OpenAI 带沟里去了。另外刚才论述过，GPT 不具备逻辑推理能力，因此问 GPT 知识性的问题是不明智的，相信大家都看过 GPT 一本正经地胡说八道（所以 GPT 又名狗屁通）。

另一方面，我个人认为 GPT 非常适用于「限定信息下的」内容处理及生成，例如 Flaneur 的所有原始信息是由我们提供的；例如先帮我筛选一遍 Read it later 列表；例如生成文章的总结（文章开头的 TL;DR 就是 GPT 帮我写的）；例如帮我自动建立知识库中的关联（其实只需要 embedding 就可以了）；例如根据我写的碎片信息生成一篇新的文章等等……

我把这些称为「泛知识管理」，这个主题我非常有兴趣和热情，同样对这个主题感兴趣的朋友欢迎一起交流！

共建人类巨灵

Ending

整个 Hack Engine 非常紧凑，demo 按时甚至提前展示完，周一当天晚上就公布了结果。Flaneur 并没有入选，还是会感到一些遗憾的。不过这两天我们都非常享受过程本身，度过了一个难忘的周末；上海这几天天气也很好，天气预报本来有雨，*** 一来，天气晴朗！

上海好像总是给我类似的感受：有很美好的开始和过程，在结尾留下一些遗憾。

Anyway，非常感谢我的团队，额外感谢 @ York 同学从杭州跑来参加（我们居然忘记合影了 TAT）

需要特别感谢一下主办方即刻团队，我们在现场有近乎完美的体验，没有遇到任何问题，完全不像是第一次办这样的活动。Hack Engine 在细节处也非常用心，例如参赛证是专门设计过的，这细节，啧啧。

比字节的工牌还高级，祝即刻公司早日收购字节跳动

虽然没有入选，Flaneur 还是受到了广泛的喜欢，好多朋友问我 Flaneur 会不会继续开发，这让我们非常开心。说实话我们也没想好，做一个 demo 和做一个真正的产品还是很不一样的，现有的技术能否达到我们预期的效果也需要继续调研，我们团队也面临一些困难很难腾出精力和资源再做一款新产品了。

Anyway, 如果你也喜欢 Flaneur，请不吝赞美告诉我们！

--
2023/04/13 @Shanghai