Memoria 项目实训日志 #7 | 跨生态移植与 AI 助理交互升级:赋予回忆“对话”的能力
文章目录
项目名称: 智能影记 - Memoria
团队名称: Mnemosyne
时间: 2026.05.11 - 2026.05.17
当前阶段: Phase 5 (体验打磨与多端集成)
一、 本周工作概述:让应用走向成熟
在过去的几周里,我们成功打通了从图片扫描、语义理解到最终 FFmpeg 视听合成的完整底层管线。随着核心技术链路的闭环,本周团队的开发重心从“搭骨架”转向了“丰血肉”。
本周,团队兵分多路,在以下三个维度取得了重要突破:
-
苹果生态跨平台移植:成功将应用适配至 iOS 平台,实现真正的跨生态运行。
-
多媒体视听特效扩充:利用 Flutter 原生绘制能力,新增了故障风(Glitch)、呼吸云边(Cloud Border)等电影级动态/静态滤镜。
-
记忆助理上线:在客户端引入全局悬浮窗,打造了能够与用户进行自然语言交互并联动本地相册的 AI 智能助手。
二、 平台跨界:iOS 生态移植与硬件加速适配
“智能影记”的初衷是让更多用户享受智能化的回忆管理,因此跨平台支持是我们的核心考核指标之一。本周,负责后端与跨平台的同学成功将项目完整移植到了苹果生态(iOS/iPadOS)。
在移植过程中,团队主要攻克了以下技术难点:
-
底层 C++ 库交叉编译:原先在 Android 端运行的 NCNN 和 ONNX 动态链接库(.so),在 iOS 端需要重新交叉编译为 .framework。我们修改了 CMakeLists 与编译脚本,确保了 Flutter FFI 在 iOS 端依然能以 < 5ms 的延迟调用底层视觉大模型。
-
VideoToolbox 硬件编码:针对视频导出模块,我们将 Android 端的 MediaCodec 硬件加速管线无缝切换至 iOS 的 VideoToolbox。凭借 Apple Silicon 芯片强大的多媒体处理能力,iOS 端 1080P 卡点视频的导出速度甚至比预期更快。
-
权限与沙盒机制:重构了文件读取逻辑,适配了 iOS 严苛的相册权限申请(PhotoLibrary 授权)与应用沙盒机制,确保了本地图库扫描的合规与稳定。
三、 视觉升维:Shader 级别的原生动效实现
为了让生成的卡点视频更具“大片感”,我们抛弃了常规的静态图片切换,而是直接在 Flutter 渲染树中手写了一套高性能的特效组件库。得益于上周建立的 RepaintBoundary 内存抓轨管线,这些特效无需后期处理,在渲染时即可被直接录制!
1. 故障风(Glitch Effect)与 RGB 色差偏移
通过 Transform.translate 与 ColorFiltered 的巧妙结合,我们在 Flutter UI 层完美复刻了 GLSL Shader 中的 Chromatic Aberration(色差)效果:
// 截取自 glitch_effect.dart
// 🟥 红色通道偏移 (向左移),模拟画面撕裂与色散
if (intensity > 0.05)
Transform.translate(
offset: Offset(-rgbOffset, 0), // rgbOffset 随节拍能量值波动
child: Opacity(
opacity: 0.4 * intensity.clamp(0.0, 1.0),
child: ColorFiltered(
colorFilter: const ColorFilter.mode(
Colors.red,
BlendMode.modulate,
),
child: child, // 原始图片帧
),
),
),
结合随机生成的横向条带裁剪,当音乐遇到重鼓点时,画面会产生极具冲击力的赛博朋克撕裂感。
2. 静态电影滤镜(Vignette & Film Grain)
利用 RadialGradient 实现了镜头暗角,并将视觉中心聚焦于画面主体;利用 ShaderMask 实现了复古胶片噪点。这些滤镜让普通的手机随手拍瞬间拥有了王家卫电影般的质感。
四、 AI Agent 交互:会聊天的“记忆管家”
这是本周产品体验上的最大飞跃。相册不应该只是一个“死板的仓库”,而应该是一个“能懂你的朋友”。我们开发了全局悬浮的 MemoryAssistantOverlay,点击即可唤出智能聊天界面。
- Agent 工具调用(Tool-use):跨越自然语言与本地 SQL
我们接入了 DeepSeek 大模型,并设计了一套极其精妙的 System Prompt,赋予了 AI “调用本地搜图工具”的能力。当用户说“我想看看去年在海边玩的照片”时,AI 不仅会像人类一样聊天,还会输出特定的 JSON 指令:
// 截取自 chat_service.dart 核心系统提示词
static const String _systemPrompt = '''
你叫 Memoria,是一个极具同理心、文艺且专业的“生活记忆导演”。
[核心工作流]:
1. 如果用户只是闲聊,用像“王家卫电影旁白”一样温暖富有诗意的语言回复。
2. 如果用户的输入表达了寻找照片的意图,你必须在回复文案的末尾,附加一个严格格式的 JSON 指令。
[动作指令规范]:
如果需要帮用户找照片,请以独立的一行输出:
[ACTION_START] {"search": "提取出的核心搜索词"} [ACTION_END]
例如用户说:"我想看海边的照片",你的回复应为:
"海风总是能带走烦恼,让我们一起重温那些蔚蓝色的回忆吧。[ACTION_START] {"search": "海边, 沙滩"} [ACTION_END]"
''';
在 ChatPage 中,前端利用正则表达式精准拦截 [ACTION_START]…[ACTION_END],并在后台静默调用端侧本地的 Isar 向量检索引擎,最终将找出的照片列表直接渲染在聊天流中!
- 聊天历史本地持久化
为了保护隐私并支持离线查阅,我们设计了 ChatMessage 数据模型,利用 Isar 数据库将用户的聊天记录、搜索关键词以及匹配到的本地图片路径进行持久化存储。用户甚至可以像回顾微信聊天记录一样,翻阅以往和 AI 一起找出的相册回忆。
五、 本周总结与下周展望
本周,Memoria 从一个“单向的工具”进化为了“跨平台、双向互动的 AI 智能体”。iOS 平台的成功运行证明了团队架构的鲁棒性,而动态特效库与 AI 助理的加入,极大拔高了产品的商业想象空间。
下周工作预告:
下周我们将迎来实训的最后冲刺期,重点任务包括:
-
多线程性能优化:解决生成视频过程中的前台阻断问题,完善 Offscreen Render Worker 离屏渲染机制。
-
多端功能测试与修复:进行全面的发热、内存压力测试,修复跨平台 UI 适配问题。
-
准备结项与交付:全面打磨产品细节,撰写完整的测试报告与使用手册。
Memoria 即将迎来最终版本,敬请期待!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)