【生活娱乐赛道】拾光·Echo Demo — 用实时语音对话记录长辈的人生故事


【生活娱乐赛道】拾光·Echo Demo — 用实时语音对话,帮长辈记录他们的人生故事

【标签】生活娱乐 社会公益


https://my.feishu.cn/docx/Pc6kd3RJmowBfQxwRRNc0p7Pnj3?from=from_copylink

  1. Demo 简介

是什么:

拾光·Echo 是一款AI家族记忆传承工具。通过端到端实时语音对话,引导长辈讲述人生故事,自动生成水墨画风格记忆卡片,让每一段人生故事成为可以保存和分享的数字记忆。

面向谁:

  • 核心用户:60岁以上长辈(讲述者)、25-45岁子女(记录者)

  • 使用场景:家庭聚会、日常陪伴、节日团聚、远程尽孝

  • 当前痛点:长辈的故事没人听、听了记不住、记住了传不下去;子女想记录但不知如何开口

主要功能:

① 实时语音对话(核心)

  • 接入火山引擎端到端实时语音大模型(不是语音转文字,是真正的语音对语音)

  • 像打电话一样自然:直接说话,AI实时回应,支持同时说和听

  • AI扮演"拾光"角色——温柔的口述历史引导者,会主动提问、根据回答追问

  • 已积累31个会话、438条对话记录,验证引导效果稳定

② 水墨画记忆卡片(已接入文生图)

  • 对话结束后自动调用火山引擎文生图API(doubao-seedream-4-0-250828)生成中国水墨画风格配图

  • 根据故事内容智能选择场景类型(庭院/食物/智慧/离别/通用),生成对应画面描述prompt

  • 每张卡片包含3-5个章节,每个章节配独立水墨画,已生成12张配图

③ 二维码分享与密码保护(已实现)

  • 每个故事自动生成专属二维码,扫码即可查看完整记忆卡片

  • 支持设置密码保护:可分别控制"故事查看"和"续讲"的访问权限

  • 设备级防暴力破解:连续失败5次锁定15分钟

  • 本地localStorage续讲机制:扫码后可继续上次的对话

④ 故事数据持久化(SQLite)

  • 会话管理:自动创建session,记录对话轮次

  • 消息存储:完整保存用户与AI的对话历史

  • 记忆卡片:结构化存储卡片内容、章节、金句、标签

  • 密码安全:bcrypt哈希+盐值存储,防彩虹表攻击


  1. Demo 创作思路

灵感来源:

做这个产品的念头,其实酝酿了很久。

家里老人年纪越来越大,他们讲过的很多事——年轻时怎么过来的、吃过什么苦、有什么放不下的事——都是聊天时随口提几句,从没认真记下来。不是不想记,是真的不知道该怎么记。让老人自己写?不现实。拿手机录?录了一堆没人整理。请人拍纪录片?太贵了。

后来看到一句话:“一个人真正的死亡,是被所有人遗忘。” 我觉得有点道理,但也没那么宏大。其实就是想,等老人不在了,至少还能有些东西留下来,让后辈知道他们经历过什么。

这就是做拾光·Echo的原因。不为了感动谁,就是觉得这件事值得做。

想解决的问题:

  1. 长辈的故事没人听 — 子女忙工作,没时间耐心听老人讲过去的事

  2. 听了记不住 — 口头讲述,没有记录,听完就忘

  3. 记住了传不下去 — 没有系统化的保存和分享方式

  4. 想记录但不知如何开口 — 直接问"您年轻时怎样"太生硬,需要引导

为什么做这个方向:

  • 技术差异化:使用火山引擎端到端实时语音大模型,不是ASR转文字再TTS,是真正的语音对语音对话,老人不用学打字,直接说话就行

  • 情感共鸣:不是冷冰冰的工具,是"陪伴者",AI引导长辈主动讲述

  • 文化价值:中国风设计(水墨画、毛笔字、印章),符合长辈审美

  • 社会价值:智慧助老,让科技跨越数字鸿沟


  1. Demo 体验地址

在线体验:

使用说明:

  1. 打开链接,点击麦克风按钮

  2. 允许麦克风权限

  3. 开始说话,AI会引导你讲述故事

  4. 对话结束后生成记忆卡片

  5. 可设置密码保护,生成二维码分享给家人

技术栈:

  • 后端:Python + Flask + websockets + asyncio + SQLite

  • 前端:原生JavaScript + Web Audio API

  • AI:火山引擎实时语音大模型(RealtimeAPI)+ 火山引擎文生图API(doubao-seedream-4-0-250828)

  • 数据存储:SQLite(5张表:sessions、messages、memory_cards、card_passwords、device_locks)

  • 部署:nginx + systemd + Cloudflare CDN


  1. TRAE 实践过程

开发流程:

步骤一:创意方案生成

使用 TRAE Work 生成完整的创意提案HTML,包括产品定位、功能设计、技术方案。

步骤二:后端架构设计

使用 TRAE IDE 设计后端架构:

  • Flask HTTP API(文本聊天、记忆卡片生成、密码验证)

  • WebSocket服务(语音对话中转)

  • 火山引擎RealtimeAPI对接

步骤三:二进制协议实现

这是最复杂的部分。火山引擎实时语音使用二进制协议(不是WebSocket JSON),需要:

  • 4字节header(protocol_version + message_type + serialization + compression)

  • GZIP压缩payload

  • 严格的事件序列(StartConnection→StartSession→AudioTask→FinishSession)

TRAE帮我实现了完整的协议栈:

def generate_header(protocol_version, message_type, serialization, compression):

byte0 = (protocol_version << 4) | HEADER_SIZE

byte1 = (message_type << 4) | MSG_WITH_EVENT

byte2 = (serialization << 4) | compression

byte3 = 0x00

return bytes([byte0, byte1, byte2, byte3])

步骤四:前端音频处理

实现浏览器端音频采集和播放:

  • getUserMedia采集16kHz PCM

  • 回声消除(echoCancellation)+ 降噪(noiseSuppression)

  • AudioBufferSourceNode时间戳追踪播放

步骤五:版本兼容处理

服务器websockets版本是v15+,需要用additional_headers而不是extra_headers:

_WS_MAJOR = int(websockets.version.split(‘.’)[0])

_HEADERS_KW = “additional_headers” if _WS_MAJOR >= 14 else “extra_headers”

ws = await websockets.connect(url, **{_HEADERS_KW: headers})

步骤六:文生图实现

  • 接入火山引擎文生图API(doubao-seedream-4-0-250828)

  • 设计智能prompt生成策略:根据章节内容自动选择场景类型(courtyard/cake/wisdom/farewell/general),组合真实内容+水墨风格+负面提示词

  • 后台线程异步生成:不阻塞用户响应,每生成一张图回写数据库,前端轮询显示进度

  • 图片下载到本地持久化存储,避免火山URL时效性问题

步骤七:数据存储与密码保护

  • SQLite数据库:sessions(会话)、messages(消息)、memory_cards(卡片)、card_passwords(密码)、device_locks(设备锁定)

  • 密码安全:bcrypt哈希+随机盐值,支持故事查看锁和续讲锁独立控制

  • 设备防暴力破解:记录设备哈希,连续5次失败锁定15分钟

步骤八:部署和调试

  • nginx配置WebSocket代理(proxy_send_timeout 3600s)

  • Cloudflare CDN缓存问题排查

  • 添加no-cache头确保前端代码实时更新

关键任务 Session ID:

  1. Session ID: 3446337810203088:3dc02933fa7ee5ba26714556aed429a0_6a316ea33da98d03d0849f2e.6a33f6fab50ec9b2dcc1f55a.6a33f6fab50ec9b2dcc1f558:TRAE Work CN.0.1.20.no_sid.no_ppe.T(2026/6/18 21:47:38)
  • 任务:创意方案生成 + 整体架构设计

  • 产出:完整的产品方案HTML + 技术架构

  1. Session ID: 3446337810203088:74362c9cde0eca46665492e22caa1c75_6a32068a3da98d03d084a26f.6a33cac0b50ec9b2dcc1f428.6a33cabfb50ec9b2dcc1f426:TRAE Work CN.0.1.20.no_sid.no_ppe.T(2026/6/18 18:38:56)
  • 任务:实现火山引擎二进制协议栈,实现前端音频采集和播放

  • 产出:voice_server.py(generate_header + parse_response + handle_client)index.html(initVoiceConnection + playPcmChunk + toggleVoice)

  1. Session ID:
    3446337810203088:6ac9751d04276c6606487afbc7471852_6a352d56bde54a8bc6494005.6a353887bde54a8bc64940b3.6a353887bde54a8bc64940b1:TRAE Work CN.0.1.21.no_sid.no_ppe.T(2026/6/19 20:39:35)

  2. Session ID:
    3446337810203088:397f32428e546750b56a195798984513_6a352d56bde54a8bc6494005.6a37b0e22ea5fe383537d6dc.6a37b0e22ea5fe383537d6da:TRAE Work CN.0.1.21.no_sid.no_ppe.T(2026/6/21 17:37:38)





  1. 创新维度

技术创新:

  • 端到端实时语音 — 不是ASR+TTS,是真正的语音对语音大模型

  • 二进制协议 — 严格按照火山引擎RealtimeAPI协议实现

  • 全双工对话 — 支持同时说话和聆听,像打电话一样自然

  • 智能文生图prompt — 根据故事内容自动分类场景,生成契合主题的水墨画

体验创新:

  • AI引导访谈 — 不是被动问答,是主动引导、耐心追问

  • 中国风设计 — 水墨画、毛笔字、印章,符合长辈审美

  • 记忆卡片 — 自动生成配图,让故事可视化

  • 密码保护分享 — 可控的隐私级别,既保护又传承

社会价值:

  • 智慧助老 — 让长辈也能享受AI带来的便利

  • 记忆传承 — 让每一段人生故事成为可以保存的数字记忆

  • 家族连接 — 通过二维码分享,让家族成员共同守护记忆


  1. 经验总结

技术亮点:

  1. 火山引擎实时语音大模型的完整对接(二进制协议+GZIP+事件序列)

  2. 浏览器端全双工音频处理(采集+播放+防回声)

  3. websockets版本兼容处理

  4. 文生图智能prompt工程(场景分类+风格控制+负面提示)

  5. 完整的权限控制体系(密码哈希+设备锁定+分级权限)

开发心得:

  1. 协议文档很重要 — 火山引擎的参考实现帮了大忙

  2. 版本兼容要提前考虑 — websockets v14+的API变化

  3. CDN缓存是坑 — 加了no-cache头才解决

  4. 图片URL有时效性 — 必须下载到本地存储,不能直接用第三方URL

  5. 密码安全不能偷懒 — 必须用bcrypt+盐值,明文存储是定时炸弹

当前数据:

  • 84个对话会话

  • 536条对话记录

  • 10张记忆卡片

  • 26张水墨画配图

未来展望:

  • 支持多方言识别(粤语、四川话等)

  • 家族时间轴:把多个故事按时间串联成家族历史

  • 语音克隆:用长辈的音色复述故事,增强情感连接


附:通过的报名帖:【生活娱乐+社会公益】拾光·Echo —— 我奶奶的故事,值得被一万人听见...

【生活娱乐赛道】拾光·Echo — AI家族记忆传承引擎

Demo体验:https://shiguang.heang.top/?nocache=20260619
注:由于AI模型按量计费,Demo体验可能会在高峰期限流,感谢理解。

1 个赞

支持方言嘛?