【生活娱乐赛道】拾光·Echo Demo — 用实时语音对话,帮长辈记录他们的人生故事
【标签】生活娱乐 社会公益
https://my.feishu.cn/docx/Pc6kd3RJmowBfQxwRRNc0p7Pnj3?from=from_copylink
- 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哈希+盐值存储,防彩虹表攻击
- Demo 创作思路
灵感来源:
做这个产品的念头,其实酝酿了很久。
家里老人年纪越来越大,他们讲过的很多事——年轻时怎么过来的、吃过什么苦、有什么放不下的事——都是聊天时随口提几句,从没认真记下来。不是不想记,是真的不知道该怎么记。让老人自己写?不现实。拿手机录?录了一堆没人整理。请人拍纪录片?太贵了。
后来看到一句话:“一个人真正的死亡,是被所有人遗忘。” 我觉得有点道理,但也没那么宏大。其实就是想,等老人不在了,至少还能有些东西留下来,让后辈知道他们经历过什么。
这就是做拾光·Echo的原因。不为了感动谁,就是觉得这件事值得做。
想解决的问题:
-
长辈的故事没人听 — 子女忙工作,没时间耐心听老人讲过去的事
-
听了记不住 — 口头讲述,没有记录,听完就忘
-
记住了传不下去 — 没有系统化的保存和分享方式
-
想记录但不知如何开口 — 直接问"您年轻时怎样"太生硬,需要引导
为什么做这个方向:
-
技术差异化:使用火山引擎端到端实时语音大模型,不是ASR转文字再TTS,是真正的语音对语音对话,老人不用学打字,直接说话就行
-
情感共鸣:不是冷冰冰的工具,是"陪伴者",AI引导长辈主动讲述
-
文化价值:中国风设计(水墨画、毛笔字、印章),符合长辈审美
-
社会价值:智慧助老,让科技跨越数字鸿沟
- Demo 体验地址
在线体验:
使用说明:
-
打开链接,点击麦克风按钮
-
允许麦克风权限
-
开始说话,AI会引导你讲述故事
-
对话结束后生成记忆卡片
-
可设置密码保护,生成二维码分享给家人
技术栈:
-
后端: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
- 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:
- 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 + 技术架构
- 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)
-
Session ID:
3446337810203088:6ac9751d04276c6606487afbc7471852_6a352d56bde54a8bc6494005.6a353887bde54a8bc64940b3.6a353887bde54a8bc64940b1:TRAE Work CN.0.1.21.no_sid.no_ppe.T(2026/6/19 20:39:35) -
Session ID:
3446337810203088:397f32428e546750b56a195798984513_6a352d56bde54a8bc6494005.6a37b0e22ea5fe383537d6dc.6a37b0e22ea5fe383537d6da:TRAE Work CN.0.1.21.no_sid.no_ppe.T(2026/6/21 17:37:38)
- 创新维度
技术创新:
-
端到端实时语音 — 不是ASR+TTS,是真正的语音对语音大模型
-
二进制协议 — 严格按照火山引擎RealtimeAPI协议实现
-
全双工对话 — 支持同时说话和聆听,像打电话一样自然
-
智能文生图prompt — 根据故事内容自动分类场景,生成契合主题的水墨画
体验创新:
-
AI引导访谈 — 不是被动问答,是主动引导、耐心追问
-
中国风设计 — 水墨画、毛笔字、印章,符合长辈审美
-
记忆卡片 — 自动生成配图,让故事可视化
-
密码保护分享 — 可控的隐私级别,既保护又传承
社会价值:
-
智慧助老 — 让长辈也能享受AI带来的便利
-
记忆传承 — 让每一段人生故事成为可以保存的数字记忆
-
家族连接 — 通过二维码分享,让家族成员共同守护记忆
- 经验总结
技术亮点:
-
火山引擎实时语音大模型的完整对接(二进制协议+GZIP+事件序列)
-
浏览器端全双工音频处理(采集+播放+防回声)
-
websockets版本兼容处理
-
文生图智能prompt工程(场景分类+风格控制+负面提示)
-
完整的权限控制体系(密码哈希+设备锁定+分级权限)
开发心得:
-
协议文档很重要 — 火山引擎的参考实现帮了大忙
-
版本兼容要提前考虑 — websockets v14+的API变化
-
CDN缓存是坑 — 加了no-cache头才解决
-
图片URL有时效性 — 必须下载到本地存储,不能直接用第三方URL
-
密码安全不能偷懒 — 必须用bcrypt+盐值,明文存储是定时炸弹
当前数据:
-
84个对话会话
-
536条对话记录
-
10张记忆卡片
-
26张水墨画配图
未来展望:
-
支持多方言识别(粤语、四川话等)
-
家族时间轴:把多个故事按时间串联成家族历史
-
语音克隆:用长辈的音色复述故事,增强情感连接
附:通过的报名帖:【生活娱乐+社会公益】拾光·Echo —— 我奶奶的故事,值得被一万人听见...
【生活娱乐赛道】拾光·Echo — AI家族记忆传承引擎
Demo体验:https://shiguang.heang.top/?nocache=20260619
注:由于AI模型按量计费,Demo体验可能会在高峰期限流,感谢理解。





