dev.to #ai短讯
Verdantra:一款利用 AI 引导户外观察的开源植物野外日记应用
Verdantra 是 Hacktoberfest 开源 AI 挑战赛的参赛作品,旨在鼓励用户走出屏幕探索自然。该应用允许用户上传户外拍摄的照片(如树叶、植物、岩石等),利用 AI 技术辅助识别并引导用户进行更深入的观察,而非替代真实体验。这是一个结合计算机视觉与自然教育的开源项目。
这是 Hacktoberfest 开源 AI 挑战第一周“接触自然(Touch Grass)”主题的参赛作品。
我构建了什么
🌿 Verdantra —— 仔细观察户外世界。
Verdantra 是一款开源的、由人工智能驱动的植物园野外日记,旨在鼓励人们离开屏幕,探索自然界。
理念很简单:拍摄一片叶子、植物、岩石、水坑或其他户外主体的照片,利用人工智能引导你的观察,而非取代它。
主要功能
- 基于照片的观察:上传户外照片,进行 AI 辅助分析。
- 可见证据:接收图像中可见特征的描述,如叶子的颜色、形状和图案。
- 诚实的不确定性:AI 会明确指出无法从照片中可靠确定的内容,而不是将猜测当作事实呈现。
- 安全的小实验:提供简短的观察活动,鼓励现实世界的探索,同时避免采摘、品尝或损坏植物。
- 个人野外日记:保存你的照片、AI 预测结果以及你自己的观察记录,以便日后回顾。
- 在线和离线 AI 模式:在线模式下使用 Google 的 Gemini API,离线模式下通过 Ollama 使用本地 Gemma 模型。可以明确选择每种模式。
Verdantra 围绕一个重要原则构建:人工智能应激发人们对现实世界的好奇心,而不是取代我们自己的观察。
演示
GitHub 仓库:https://github.com/codewithvishuuu/verdantra
该项目目前仅在本地运行。尚未提供公开的部署演示。
仓库中包含在本地运行后端和前端的说明、配置 AI 提供商以及测试应用程序的步骤。
代码
浏览完整的源代码:
在 GitHub 上查看 Verdantra
该仓库包含 React 前端、FastAPI 后端、AI 集成、日记功能、测试以及单独的项目文档文件。
我是如何构建它的
我使用现代 Web 技术栈构建了 Verdantra,重点在于实用的 AI 集成、隐私意识以及可靠的本地开发。
技术栈
- 前端:React、TypeScript、Vite 和 Tailwind CSS
- 后端:Python 和 FastAPI
- AI — 在线:使用 gemma-4-26b-a4b-it 的 Google Gemini API
- AI — 离线:通过 Ollama 使用 gemma4:e2b 模型的 Gemma 4 E2B
- 数据存储:SQLite 用于存储日记条目
- 测试:Pytest 用于后端测试,TypeScript 检查以及 Vite 生产构建
应用程序使用共享的 AI 服务接口,使得观察工作流程可以在两个提供商之间无缝切换,而无需分别构建前端。
对于在线使用,后端将图像发送到配置的 Gemini API。对于离线使用,后端与本地 Ollama 服务器通信,一旦模型安装并运行,即可在没有互联网连接的情况下进行图像分析。
AI 指令强调基于照片的证据、通俗语言、明确的不确定性以及安全的观察活动。预测结果被标记为“未验证”,以便用户了解 AI 生成的描述可能是错误的。
我还为后端行为和输出约束添加了自动化测试。通过的测试验证了实现行为;它们并不能保证每一条 AI 生成的观察结果在植物学上都是正确的。
为什么开放创新很重要?
自然探索不应依赖于昂贵的硬件或单一的在线 AI 服务。
开源工具使得构建和审查整个应用程序成为可能,能够组合不同的 AI 推理选项,并让用户在选择托管处理和本地处理之间拥有选择权。
通过 Ollama 进行的本地推理在互联网不可用时也提供了一种替代方案。托管选项提供了不同的模型和推理路径,而本地选项则将图像处理保留在用户的机器上。
开放创新使得像 Verdantra 这样的项目更容易让其他开发者进行检查、学习、改进,并为其所在社区进行适配。
我希望其他贡献者能帮助提升观察记录的质量、可访问性、离线可用性以及整体的野外日志体验。
我的 Agent 会话
本部分为可选内容。由于我目前没有经过验证且可分享的 DevRelay agent-session 链接,因此我选择不包含此部分,以免链接到不存在的会话。
奖项类别
我的参赛作品属于“Hacktoberfest 开源 AI 挑战赛”——第一周:亲近自然(Touch Grass)。
我没有添加任何额外的合作伙伴奖项类别,因为我尚未核实哪些合作伙伴类别适用于本项目。
由好奇心、开源工具以及更多户外时光共同构建。
Verdantra —— 仔细观察窗外世界。🌱
译文已达到本站中文翻译的字数上限,剩余内容请查看原文。