🚀 这篇文章是参加 #AllThingsAgenticHackathon 的参赛作品
⚡ 一句话总结
- 是什么:EventMocha ☕ 是一款自主式全栈多 Agent 助手,能把"我们想办个活动"这种模糊想法,直接变成完整的、可投产的营销物料和日历工作流。
- 核心能力:
- 🎨 多模态生成:HTML 文案、Imagen 海报图、Veo 宣传视频,一条龙搞定。
- 🔄 精准改稿:支持视觉参考条件化、文案保留、完整版本历史(v1 → v2 → v3)。
- 📅 工作区自动化:通过 MCP(模型上下文协议)自动创建 Google Calendar 事件、Google Tasks 任务、Gmail 草稿。
- 🎙️ 实时语音:基于 Gemini Live API + Web AudioWorklets 实现双向实时语音对话。
- 技术栈:Google ADK(Python)、Gemini 3.7 Flash、Gemini 2.5 Flash、Imagen、Veo、React 19、FastAPI、Cloud Firestore、GCS(谷歌云存储)。
💡 痛点:活动策划的一地鸡毛
不管是一场 500 人的开发者大会、一个社区工作坊,还是一场产品发布会,策划过程中总得在各种互不连通工具之间来回切换:
- 在笔记软件里头脑风暴主题和议程。
- 在只能输入文字的对话机器人里憋文案。
- 去独立的设计软件里做图。
- 渲染视频预告片。
- 手动在日历里创建时间块、在任务工具里建待办事项、在邮箱里拟邀请函草稿。
好不容易搞定,客户一句"海报能不能调暗点,日期也改一下",整个流程又得重来一遍。
EventMocha 就是为了解决这个问题。它在一个连续会话里,同时扮演创意代理商和项目协调人的角色。

🏗️ 多 Agent 架构
EventMocha 基于 Google ADK(Agent 开发工具包) 和 Gemini 2.5 / 3.7 Flash 模型家族构建,采用模块化多 Agent 系统。

Orchestrator / VoiceOrchestrator (根 Agent)
├── EventInfoGatherer → 友好的多轮对话,采集活动细节写入会话状态
└── ContentPipeline → 顺序执行流水线 (ContentGenerationManager & ResponseFormatter) └── ContentGenerationManager → 协调创意合成和工作区执行 ├── ResearchAndPlanner → 实时 Google 搜索 + 战略规划 ├── MultimodalContentCreator → 生成富媒体 HTML 文案、社交帖、海报、邮件邀请(Imagen) ├── VideoGenerator → 通过 Veo 生成 720p HD 活动预告视频 ├── ProductivityCreator → 生成日程和任务的结构化数据 └── WorkspaceMCP Client → 通过 MCP 执行 Google Calendar、Tasks、Gmail 操作
🔍 核心技术亮点
1. 🎨 对称式多模态流水线(Imagen & Veo)
为了让持久会话状态保持轻量、避免 token 膨胀,我设计了一套对称的 after_model_callback 架构:
- 文案 + 占位符生成:专业 Agent(
MultimodalContentCreator 和 VideoGenerator)输出富媒体 HTML 文案,同时附带占位符标记。
- 回调触发媒体生成:异步回调拦截这些占位符,调用 Google GenAI / Imagen 生成视觉素材、调用 Google Veo 生成 720p HD 视频预告,上传资源到 GCS(谷歌云存储),然后把真实媒体 URL 注入到渲染卡片里。


2. 🔄 精准改稿与版本血缘追踪
创意 AI 里最头疼的就是改稿循环。用户只想微调一张图,你不能把其他素材全重新生成,更不能把已经定稿的文案覆盖掉。
- 确定性改稿目标匹配:
stage_revision_targets 工具能把自然语言反馈精确匹配到具体素材,支持按标题、类别或 ID 定位。
- 视觉参考条件化:修改图片时,把上一版本的图像字节作为条件传给 Imagen,保持构图和角色一致性。
- 文案保留与复用:如果只改文案,现有媒体 URL 直接保留,不触发昂贵的重新渲染。
- 版本历史(v1 → v2 → v3):每个素材都在 Firestore 和会话状态里维护完整血缘,用户可以在 UI 里切换查看历史版本。

3. 📅 通过 Google Workspace MCP 落地真实行动
内容创作完就该执行落地。EventMocha 通过 HTTP 与专属 FastMCP 服务器对接:
- 自动创建 Google Calendar 事件,自动处理时区偏移。
- 把待办事项写入 Google Tasks。
- 撰写带 HTML 正文的邮件草稿,直接塞进 Gmail。
- 使用无状态的 OAuth 2.1 + AES-GCM token 加密。

4. 🎙️ 低延迟实时语音交互(Gemini Live API)
不满足于传统的轮询式文字聊天,EventMocha 支持双向实时语音流:
- AudioWorklet 重采样:前端通过自定义
AudioWorkletProcessor 节点采集 16kHz 单声道麦克风音频,通过 WebSocket 回传 24kHz 的 Agent 语音。
- 动态实时转录:语音识别气泡实时滚动更新,配合实时波形可视化器。
- 多模态语音控制:用户可以边说话边打字、上传图片、查看生成的视觉卡片——不受单一输入模式限制。

🛠️ 技术栈一览
- 前端:React 19、Vite、TanStack Query、TailwindCSS、Web Audio API(AudioWorklet)。
- 后端 & 多 Agent:FastAPI、Python ADK(Agent 开发工具包)、Gemini 3.7 Flash、Gemini 2.5 Flash(Live Voice API)、Google GenAI SDK。
- 存储 & 状态:Cloud Firestore(原生模式)、GCS(谷歌云存储)、Vertex AI Agent Engine(
VertexAiSessionService)。
- 集成:FastMCP(Google Workspace)、Google 搜索锚定。
- Monorepo:pnpm Workspaces + Turborepo。
🚀 踩坑总结
- 状态要干净:把大体积二进制数据和冗长文案从持久化的 ADK 会话状态里踢出去,改用扁平资产注册表(
root_asset_id -> entry),大幅提升了路由可靠性和 token 延迟表现。
- AudioWorklet 是实时语音体验的关键:把音频重采样从主浏览器线程搬到 Web Audio Worklets,让双向语音流真正有了"对话感",而不是傻等音频处理完。
- Agent 职责拆分让调试可预期:把职责隔离到独立 Agent(
ResearchAndPlanner、MultimodalContentCreator、VideoGenerator、WorkspaceMCP)里,prompt 迭代和工具调用轨迹都变成了模块化、可追踪的单元。
💬 聊两句
想听听大家的想法:
- 你们在 AI 应用里是怎么组织多 Agent 编排和改稿工作流的?
- 如果有个自动活动助手,你最想要什么功能或集成?
评论区见,欢迎拍砖!