dev.to #ai短讯
WanderInk:用开源AI将你的散步变成故事
WanderInk是一个参与Hacktoberfest开源AI挑战的项目,旨在利用开源AI技术将用户的散步照片转化为叙事性故事。
这是 Hacktoberfest 开源 AI 挑战第一周“回归自然(Touch Grass)”的参赛作品。
🌿 WanderInk:用开源 AI 将你的漫步转化为故事
每一次漫步都成为一段故事。
我们经常走出户外,以清空思绪、探索新地方,或从屏幕前暂时抽离。沿途,我们会注意到一些细微之处——被树木环绕的小径、透过树叶洒下的阳光、一朵有趣的花,或是从未到访之处的宁静氛围。
我们拍几张照片,继续前行,最终却忘记了那些让体验变得独特的细节。
如果这些照片能变成相册里记忆之外的某种存在呢?
这个想法激励我构建了 WanderInk,一款由 AI 驱动的户外探索日记应用,它能将寥寥数张照片转化为个性化的冒险故事。
WanderInk 鼓励你放下屏幕,走进户外,观察周围的世界,捕捉几个有意义的瞬间,并让 AI 协助你将它们编织成值得重温的故事。
🌱 我构建了什么
WanderInk 是一款 Web 应用程序,旨在通过 AI 生成的叙事让户外探索更加难忘。
体验设计得刻意简单:
- 走到户外。去散步、探索公园、造访新地方,或者只是留意一下周围的环境。
- 捕捉细微之处。拍摄风景、植物、有趣的纹理、光线、景色,或任何吸引你注意的事物。
- 上传 3–5 张照片。从你的探索中选择一组少量的瞬间。
- 让 AI 串联这些瞬间。WanderInk 分析照片并将其转化为个性化的第一人称冒险日记。
- 保存或分享你的旅程。保持冒险私密,或将其发布到社区画廊。
结果不仅仅是一组图片说明。WanderInk 会生成完整的日记条目,包括标题、摘要、叙事、亮点和情绪评分。
目标不是记录漫步的每一步,而是保留那种体验的感觉。
✨ WanderInk 有何不同?
AI 驱动的视觉叙事
WanderInk 使用多阶段 AI 管道在撰写故事之前理解照片。它不是将每张图片视为孤立的说明,而是将视觉观察整合为更连贯的叙事。
个性化冒险日记
生成的叙事采用第一人称视角撰写,帮助这种体验感觉像个人反思,而非对照片的通用描述。
实时生成进度
故事生成可能需要一点时间,因此 WanderInk 使用服务器发送事件(SSE)向界面流式传输进度更新。用户可以跟随生成过程,而不是在没有反馈的情况下等待。
你记忆的私密空间
旅程默认是私密的,但可以选择发布到社区画廊。你可以将 WanderInk 用作个人日记,而无需让每次冒险都公开。
围绕户外体验设计
WanderInk 并非旨在让你在探索时不断滚动屏幕。其理念是捕捉几个有意义的瞬间,把手机收起来,然后回到你的周围环境。
技术应支持体验,而不应取代它。
🚀 演示
在线应用:https://wander-ink.vercel.app
你可以浏览该应用,体验将平凡的户外时刻转化为 AI 辅助日记条目的理念。
为了获得最有意义的测试,请短途散步,拍摄几张并使用它们创建你自己的冒险故事。
💻 代码
CodesWithSubham / wanderink
一款由 AI 驱动的户外探索日记,能将 3–5 张照片转化为引人入胜的个性化冒险叙事。
📑 目录
- 概览
- 系统架构
- 核心功能
- 技术栈
- 项目结构
- 环境变量
- 入门指南:先决条件、安装、Cloudflare R2 设置、OmniRoute AI 设置
- API 参考:认证、上传、冒险记录、公共画廊、用户统计
- 部署:Vercel(前端)、Oracle VM / Linux(OmniRoute AI)、MongoDB Atlas
- 可用脚本
- 许可证
🧭 概览
WanderInk 填补了户外探索与个人日记之间的空白。与其让照片被埋没在相机胶卷中,WanderInk 邀请用户进行一次漫步,捕捉 3–5 张关于周围环境的深思熟虑的照片(风景、植物、纹理、建筑奇观),并将它们提交给一个双模型 AI 叙事管道。
WanderInk 管道
- 客户端压缩:照片在浏览器中进行优化和压缩,以降低延迟和带宽消耗。
- 直接 S3/R2 摄入:通过预签名 URL,上传绕过应用程序服务器……
WanderInk 是一个根据 MIT 许可证发布的开源项目。
欢迎探索其实现方式,学习其架构,报告问题,并贡献能让体验变得更好的想法。
🛠️ 我是如何构建它的
我希望 WanderInk 做的不仅仅是将图片上传表单连接到文本生成 API。核心挑战在于设计一个工作流程,使其能够理解多张照片,识别它们之间的关系,并利用这些观察结果生成有意义的叙事。
以下是应用程序的组装方式。
- 技术栈
该项目使用基于现代 TypeScript 的 Web 技术栈:
- Next.js 16 和 React 19 用于应用程序和用户界面。
- TypeScript 6 确保整个代码库的类型安全。
- Tailwind CSS 4 用于样式设计。
- MongoDB Atlas 和 Mongoose 用于持久化应用程序数据。
- Better Auth 用于身份认证。
- Cloudflare R2 用于照片存储。
- TanStack React Query v5 用于客户端服务器状态管理。
- Zod 用于模式验证。
- browser-image-compression 用于在浏览器中减小图像尺寸。
- 一个兼容 OpenAI 的 OmniRoute 网关,用于连接 AI 模型。
每个部分都有其特定用途,从管理用户账户和存储冒险记录,到处理照片和生成故事。
- 两阶段 AI 叙事管道
这是 WanderInk 的核心。
从多张照片生成一个好故事,不仅仅要求语言模型描述它看到的内容。该系统将视觉理解与叙事生成分离开来。
第一阶段:理解照片
视觉模型分析上传的图像并提取有用的观察结果,包括:
- 可见的风景和环境。
- 重要物体和视觉焦点。
- 光线和氛围。
- 照片所暗示的情绪。
- 图像之间潜在的关联或叙事线索。
这些观察结果形成对视觉材料的结构化理解。
第二阶段:将这些观察转化为故事
结构化的视觉合成随后传递给辅助语言模型。利用这些信息,模型生成日记条目,包括:
- 合适的标题。
- 简洁的摘要。
- 完整的第一人称叙事。
- 冒险中的亮点。
- 情绪评分。
将这些阶段分开,使叙事模型比一堆不相关的图像描述获得更有用的上下文。这也使得工作流程更易于理解,并允许独立配置视觉模型和故事模型。
模型 ID 可通过环境变量进行配置,因此这两个阶段不必永久绑定到特定的某个模型。
- 使用服务器发送事件(SSE)进行实时生成
AI 生成并不总是即时的。WanderInk 不使用让用户等待单个大型响应的方式,而是使用服务器发送事件(SSE)将生成进度流式传输到客户端。
这有助于界面在故事生成过程中传达当前状态,使整个流程更具响应感。
- 高效的图片上传与存储
照片文件通常较大,尤其是使用现代智能手机摄像头拍摄时。不必要地上传原始文件会降低体验速度并消耗更多带宽。
WanderInk 通过以下实用方案解决了这一问题:
- 图片在上传前会在客户端进行压缩。
- 预签名 URL 允许浏览器直接将图片上传至 Cloudflare R2。
- 私有的图片资源可通过签名的 GET URL 访问。
这使得应用的存储工作流与主应用服务器分离,从而更高效地管理上传的媒体内容。
- 认证、持久化与分享
WanderInk 使用 Better Auth 进行身份认证,并使用 MongoDB Atlas 配合 Mongoose 处理应用数据。
这为将冒险记录与用户关联、保留生成的日记条目以及区分私人旅程与发布到社区画廊的内容奠定了基础。
隐私是产品的默认体验:除非用户选择分享,否则冒险记录均为私密状态。
- 保持 AI 层的灵活性
AI 集成采用自托管的 OmniRoute 网关,支持 OpenAI 兼容的模型接口。
视觉模型和故事模型通过环境变量单独配置:
- VISION_MODEL 控制用于视觉分析的模型。
- STORY_MODEL 控制用于叙事生成的模型。
这种分离使得实验更加便捷。开发者可以评估不同模型在视觉理解、叙事质量、延迟及任务适用性方面的表现,而无需重新设计整个应用程序。
部署中使用的具体模型取决于其配置。
🤖 为什么开放创新很重要?
对我而言,开放创新之所以重要,是因为基于 AI 的产品不应被迫绑定于单一模型提供商或封闭的实现方式。
WanderInk 围绕一种能够针对不同任务尝试不同模型的工作流构建。视觉分析与创意写作有不同的需求,在一个任务上表现优异的模型未必是另一个任务的最佳选择。
一个开放且灵活的 AI 生态系统使得以下工作更容易实现:
超越单一供应商进行实验
开发者可以评估不同的兼容模型,并根据应用需求进行选择,而不是围绕某个固定选项设计一切。
构建专门的 AI 工作流
WanderInk 展示了多个 AI 阶段如何协同工作。视觉模型提取有用的观察结果,而语言模型则将这些观察转化为个人叙事。
理解并改进实现
开源代码库允许其他开发者检查架构、提出改进建议、识别问题,并在现有基础上进行开发。
为社区驱动的想法留出空间
有人可能会提出不同的叙事风格、更好的照片连接方式,或是整理户外日记的新方法。易于访问的代码库使得这些想法更便于协作探索。
开放创新不仅仅是拥有更多的模型选择。它还赋予开发者和社区自由去实验、学习并改进他们所使用的工具。
当然,模型的灵活性并不能自动保证更低的成本、完全的隐私或离线运行。这些取决于实际的模型部署、基础设施和应用设计。其好处在于拥有更多空间来审慎地做出这些决策。
🌍 更大的理念:鼓励你断开连接的科技
我发现 AI 的一个有趣之处在于,我们通常用它来增加在设备上的时间——生成更多内容、消费更多信息,并自动化更多的数字任务。
但 AI 也可以支持那些发生在屏幕之外的体验。
WanderInk 探索了第二种可能性。
该应用赋予你留意周遭环境、拍摄几张照片并以富有创意的方式保存体验的理由。一旦照片拍摄完成,你就可以把手机收起来,享受散步的乐趣。故事创作发生在之后。
安静的散步不必成为一项生产力任务。一张照片也不必成为社交媒体帖子。户外体验也不应以其产生的内容量来衡量。
有时,几个小细节就足以让记忆重现生机。
这正是我希望 WanderInk 所保留的感觉。
💚 接下来做什么?
随着我继续探索人工智能、故事创作与户外健康的交叉领域,WanderInk 还有很大的发展空间。
一些值得探索的领域包括:
- 更多的叙事风格和故事创作偏好。
- 更好地连接照片中视觉细节的方法。
- 用于实验的其他 AI 模型。
- 对日记创建体验的改进。
- 人们发现和分享户外冒险的新方式。
这些是待探索的方向,而非我已声称已实现的功能。
我很想听听其他开发者对这个想法的看法。你会如何利用人工智能让日常体验更有意义?什么样的设计能让 WanderInk 这样的工具更实用,同时又不让人们花更多时间盯着手机?
🌿 尝试 WanderInk
在线演示:https://wander-ink.vercel.app
开源仓库:https://github.com/CodesWithSubham/wanderink
如果你尝试使用它,建议使用真实散步时拍摄的照片,并分享这次体验为你创造了怎样的故事。
我特别希望收到关于故事创作质量、创建日记的体验以及让项目变得更好的想法方面的反馈。
WanderInk 最精彩的部分并非 AI 模型或技术栈。而是其背后的理念:
当你放下手机去散步时,你的下一个精彩故事或许就此开始。🌱
译文已达到本站中文翻译的字数上限,剩余内容请查看原文。