[控场AI]
· 6 分钟阅读· 3,245 字

Step Out:用Gemma和Ollama打造离线AI户外休息规划器

Step Out:用Gemma和Ollama打造离线AI户外休息规划器

Step Out用Gemma 3 1B与Ollama在本地离线生成户外休息计划,探索小模型的任务聚焦之路。

Step Out是一个来自MLH x DEV写作挑战赛的本地AI户外休息规划器,由开发者Cynthia Wahome构建。它用Google开源的Gemma 3 1B模型配合Ollama在自己的电脑上生成活动计划,不需要云端推理API。用户选择时间和空间等偏好后,系统返回包含指令、时间安排与反思提示的活动卡片,无账号、无GPS、无打卡。开发者实测冷启动约7.45秒,热请求5.45至7.54秒,并验证了断网后仍能生成新计划。技术上天平倾向应用代码:后端负责时间计算与活动筛选,Zod 4生成的JSON schema约束模型输出,模型只做选择与调整。作者还亲自体验了一次十分钟坐姿活动,实际耗时9分30秒,全程未看屏幕。

Step Out:用Gemma和Ollama打造离线AI户外休息规划器

这个项目来自MLH x DEV写作挑战赛,开发者Cynthia Wahome构建了一个名为Step Out的本地AI户外休息规划器。它使用Gemma 3 1B模型配合Ollama,在本地电脑上生成简短的户外活动计划,不需要云推理API。

Step Out项目封面

为什么需要离线AI休息规划器

"出去走走"是个好建议,直到你看向窗外,发现只有水泥地、停着的车,还有邻居正信心十足地倒车入库。

对于身兼数职、整天面对屏幕的人来说,户外休息必须融入日常生活。可能只有十分钟空闲时间和一个熟悉的院子,风景优美的徒步路线不太可能出现在两场会议之间。

Step Out的核心思路很直接:花一点时间做计划,然后离开屏幕。用户选择四个偏好——可用时间(5/10/15/20分钟)、熟悉的户外空间(小区院子、熟悉的街道或户外座位区)、目标(安静暂停、轻度运动或观察周围环境)、行动偏好(行走/站立或坐姿活动)——系统返回一张活动卡片,包含指令、时间安排和反思提示。

没有账号注册,不需要交出精确GPS位置,也没有连续打卡记录在明天等着评判你。

本地推理的实测数据

据开发者测试,Gemma 3 1B在Apple M1笔记本上本地运行。冷启动请求耗时7.45秒,热请求范围在5.45到7.54秒之间。这些是特定硬件环境下的测量结果,本地推理性能取决于硬件、内存以及电脑同时运行的其他任务。

开发者还测试了关闭Wi-Fi、无其他网络连接情况下的全新生成。模型和应用依赖安装完成后,本地应用仍能生成新计划。模型运行在笔记本上,当前版本不支持手机端运行。

Gemma 3 1B与Ollama是什么。 Gemma是Google发布的一系列开源权重语言模型,1B指约10亿参数的最小尺寸版本,适合在消费级笔记本上运行。Ollama是一个本地模型运行时,负责下载模型权重、管理内存并暴露一个兼容OpenAI风格的HTTP API(默认监听11434端口),应用只需向本地端口发请求即可,无需自行编译推理引擎。两者结合让开发者可以在不联网的情况下调用大模型。

冷启动与热请求的区别。 冷启动指模型尚未载入内存时需要先加载权重,因此耗时较长;热请求指模型已驻留内存、仅执行推理的状态。首字延迟主要受内存带宽和模型加载速度影响,这也是为什么在8GB或16GB内存的笔记本上关闭其他程序会明显改善体验。

实际使用体验

2026年10月9日,开发者在家属院院子里尝试了一个十分钟的坐姿活动,选择"安静暂停",生成的活动是"注意户外声音"。

时间安排为:准备并到达户外地点1分钟,观察周围声音8分钟,返回并安顿1分钟。指令要求不使用手机、全程保持坐姿、注意三种声音。

这次休息实际耗时9分30秒,查看屏幕零次。在石凳上听鸟鸣和社区的环境音,然后返回并在浏览器中保存了反思。这个小小的休息给了项目一个有用的现实检验:当不再看界面时,指令是否仍然合理?

技术架构:Gemma、Ollama与代码的分工

项目使用Google的开源权重模型Gemma 3 1B(标签gemma3:1b),由Ollama在本地提供服务。Next.js后端将生成请求发送到本地的127.0.0.1:11434端口。偏好处理在同一台电脑上完成,反思内容保存在浏览器本地存储中。

没有付费推理API的token费用,但仍有硬件和电力成本,电脑算力也是有限的。"本地"不意味着"凭空运转"。演示版本一次只处理一个生成请求,避免外部提供商的使用配额并不等于消除了应用自身的容量限制。

代码负责时间计算

开发者将时间计算排除在模型的职责之外。后端负责分配1分钟准备、1或3分钟返回,剩余时间给活动,这些阶段加起来等于用户选择的时长。Gemma负责选择和调整活动,但它不会决定一个十分钟的休息包含十四分钟的步行。

在推理之前,后端会根据选择的空间、目标和行动偏好,从一个精选的五项活动集合中筛选。坐姿选择会排除行走类活动。这些规则缩小了模型的选择范围,但它们不验证户外位置的安全性,也不证明生成的每句话都合适。

用Zod约束结构化输出

小模型可能产生看似合理但对应用而言错误的值。比如活动IDseated-movement-001看起来完全正常,实际上可能指向目录中不存在的内容。

开发者使用Zod 4生成的JSON schema来约束响应。可选活动ID在响应schema中形成枚举,通过Ollama的format参数传递。后端随后验证返回的JSON,并检查所选活动是否在可选列表中。目的是约束响应结构和允许的ID,同时保留应用层面的检查。这提高了可靠性,但不会让模型的指令普遍正确,也不会把生成文本变成完全确定性的系统。

什么是JSON Schema与结构化输出。 大模型的默认输出是自由文本,而应用往往需要机器可解析的字段(如活动ID、时长、指令)。JSON Schema是一种描述数据结构和取值范围的规范,Zod是一个TypeScript优先的校验库,可以从TypeScript类型自动生成对应的JSON Schema。Ollama的format参数接受这样的schema,在解码阶段限制模型只能输出符合结构的token,从而大幅降低格式错误的概率。

枚举校验为什么重要。 小模型可能凭语言直觉生成看似合理但实际不存在的ID。把可选活动ID写成枚举后,模型只能在有限集合里选择;后端再对照真实目录做一次二次检查,形成模型约束加应用校验的双重防线。

Next.js与TypeScript

应用使用Next.js 16的App Router和TypeScript,将界面和API路由放在同一个项目中。请求流程为:浏览器收集四个偏好→后端验证并筛选活动集合→Ollama使用这些约束运行本地模型→后端验证响应并添加时间安排→界面显示活动卡片。

纯CSS提供了带标签的控件、可见的键盘焦点和响应式布局,不依赖外部样式表或字体CDN。深青色、暖奶油色和少量陶土色点缀营造了平静友好的界面氛围。

开源权重的意义与代价

开源权重让开发者可以在自己的硬件上运行推理,保持本地生成流程独立于托管AI API。也可以选择适合任务的模型、修改提示词、编辑活动集合,其他开发者可以检查代码并在自己的环境中运行应用。

代价是开发者也要承担整个环境:模型下载、可用内存、慢启动和连接错误。Gemma按自己的模型条款使用,应用许可证不能替代这些条款。

开源权重与开放源代码的区别。 开源权重指模型参数可以下载和本地执行,但训练代码、训练数据以及使用条款未必开放。Gemma采用自定义的Gemma使用条款,对用途、再分发和衍生模型有明确规定。因此应用层的开源许可证(如MIT)只约束你写的代码,不能替代或覆盖模型本身的条款,商用前需要单独确认模型许可。

开发经验总结

这个项目在Hacktoberfest 2026第一周完成,开发者总结了三条经验:

小模型在任务聚焦时很有用。 Gemma 3 1B不需要规划整个生活,它只需要把几个偏好和可选活动转化成一次简短的户外休息。

应用代码仍有自己的职责。 输入验证、活动筛选、时间计算和响应检查都属于后端。有说服力的提示词不能替代这些控制。

一个应用可以通过帮助用户离开它来获得成功。 目标是一份清晰的计划让用户带到户外,在界面中停留更久反而会偏离这个目标。

院子测试让项目变得真实。在调试提示词和schema之后,开发者终于自己遵循了那些指令。这一次,合上笔记本是验收测试的一部分。

#Step Out#Gemma 3 1B#Ollama本地推理#离线AI应用#Next.js AI项目#开源权重模型#结构化输出 Zod
分享:

相关推荐