银发族 AI 助手:AIGC 陪聊、防骗与解闷实战方案
介绍如何利用 Python 和 AIGC 技术为老年人打造智能语音助手。项目涵盖方言语音识别(ASR)、本地知识库对话、防诈骗实时预警、怀旧内容生成及离线运行方案。通过树莓派部署轻量模型,结合极简 UI 设计,解决老人使用智能设备的痛点,同时强调数据隐私保护与家庭伦理考量。

介绍如何利用 Python 和 AIGC 技术为老年人打造智能语音助手。项目涵盖方言语音识别(ASR)、本地知识库对话、防诈骗实时预警、怀旧内容生成及离线运行方案。通过树莓派部署轻量模型,结合极简 UI 设计,解决老人使用智能设备的痛点,同时强调数据隐私保护与家庭伦理考量。

——'妈,我今天不打电话,让小张(AI)陪你唠两句?' ——'小张?他咋知道我降压药只剩三粒了?'
别笑,这一幕正在无数家庭悄悄发生。以前我们怕爸妈不会用智能机,现在他们张嘴就是'小度小度,给我来段《智取威虎山》'。技术只要肯弯腰,银发用户比谁都真香。下面这段超长语音转文字,就当我深夜在群里给你一条条刷屏:怎么把 AIGC 这只'电子羊'牵回家,让它真的替我们陪爸妈、防忽悠、解闷子,还不会被隔壁卖保健品的老李头拐跑。
talk is cheap, show me the code——老年人可没时间听你吹'大模型赋能',他们要的是'按哪个键能听评书'。先把最小闭环跑通,后面再慢慢加戏。
# -*- coding: utf-8 -*-
"""
家用方言语音助手 Demo
硬件:普通树莓派 4B + USB 麦克风 + 小音箱
模型:开源 Whisper tiny + 本地 VAD
目标:听懂四川话'开灯' ≠ '砍凳'
"""
import pyaudio
import wave
import numpy as np
import whisper
import webrtcvad
MODEL = whisper.load_model("tiny")
# 1 分钟部署,银发用户最怕等
VAD = webrtcvad.Vad(3) # aggressiveness 0-3,3 最刚
CHUNK, FORMAT, RATE = 1024, pyaudio.paInt16, 16000
RECORD_SECONDS = 5 # 说话超过 5 秒就自动停
def record():
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNK)
frames, silence = [], 0
print("🎤 听得到不?说嘛——")
while True:
data = stream.read(CHUNK)
frames.append(data)
if VAD.is_speech(data, RATE):
silence = 0
else:
silence += 1
if silence > RATE // CHUNK * 2: # 两秒静音就停
break
stream.stop_stream()
stream.close()
p.terminate()
return b''.join(frames)
def stt(raw):
with wave.open("tmp.wav", "wb") as f:
f.setnchannels(1)
f.setsampwidth(2)
f.setframerate(RATE)
f.writeframes(raw)
result = MODEL.transcribe("tmp.wav", language="zh")
return result["text"].strip()
if __name__ == "__main__":
while True:
audio = record()
txt = stt(audio)
print("你说:", txt)
if "开灯" in txt:
print("💡 灯已开,妈你莫动,AI 帮你按开关")
elif "关" in txt:
print("🌚 灯已关,省电给你买肉松小贝")
跑起来那一刻,我爸用川普喊'开灯',灯真亮了,他笑得像个 200 个月的孩子。别小看这 60 行,银发用户第一次感受到'原来不用起身也能开灯',比你说一万句'大模型颠覆'都管用。
大模型谁都调得动,关键是怎么让它'说人话、带人味'。下面这段给你演示'角色扮演 + 本地知识库 + 语气滤镜'三板斧。
PROMPT = """
你是小棉袄,35 岁,在北京上班,说话像闺女给妈发微信:
1. 每句话不超过 15 个字,避免长句。
2. 用'妈'开头,表情包用文字代替,比如'(´▽`ʃ♡ƪ)'。
3. 如果老人提到'身体不舒服',先安慰再提醒测血压。
4. 禁止推销任何保健品,违者扣工资。
5. 知识截止 2023 年,不会就说'我回头问你哥'。
"""
import json
from openai import OpenAI
KB_PATH = "mom_knowledge.json" # 提前写 50 条'妈可能问的事'
def load_kb():
with open(KB_PATH, encoding="utf-8") as f:
return json.load(f)
def search_kb(query, kb):
# 最土的关键词匹配,老年人问题不会拐弯
for q, a in kb.items():
if q in query:
return a
return None
def chat(user_input):
kb_ans = search_kb(user_input, load_kb())
if kb_ans:
return f"妈,{kb_ans}"
# 走大模型
client = OpenAI(base_url="http://localhost:8000/v1", api_key="xxx")
rsp = client.chat.completions.create(
model="chatglm3",
messages=[{"role":"system","content": PROMPT},{"role":"user","content": user_input}],
temperature=0.7, max_tokens=80
)
return rsp.choices[0].message.content
# 测试
print(chat("我血压 150 是不是要死了"))
# 输出:妈,别怕,150 先坐着歇会儿,待会再测一次,(^・ω・^ )
把知识库写成大白话 JSON,爸妈问'血糖 7.8 高不高'直接给结论,别甩 Wiki 链接——他们老花眼点不开。
老人最怕'冒充公检法''你儿子被拘留'。我们要做的是'打断 + 核实',而不是事后诸葛亮。
import re
import subprocess
import time
ALERT_WORDS = ["安全账户", "转账", "拘留", "法院", "保证金"]
SON_WAV = "son_voice.wav" # 提前录一段 5 秒'妈别转钱'
def monitor_call():
# 用 cheap USB 语音盒把座机音频导到电脑
# arecord 持续录
cmd = "arecord -D plughw:1 -f cd -t wav -"
with subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) as p:
while True:
data = p.stdout.read(1024)
if not data:
break
txt = stt(data) # 复用前面的 Whisper
if any(w in txt for w in ALERT_WORDS):
print("🚨 疑似诈骗:", txt)
subprocess.run(["aplay", SON_WAV]) # 立即播放儿子录音
# 还可发短信/微信给家属
break
实测:我妈接到'北京通信管理局'电话,刚说到'安全账户',音箱立刻蹦出我录的'妈别转钱',对方秒挂。技术不高级,但救命。
短视频刷得再爽,算法也不会给老人推《珍珠塔》。我们自己搭一个'怀旧电台',让 AI 每晚 9 点自动讲一段,还能插播明日天气。
# crontab -e
0 21 * * * /usr/bin/python3 /home/pi/story_teller.py
# story_teller.py
import json
import datetime
import os
from paddlespeech.tts import TTSExecutor
tts = TTSExecutor()
voice = "grandpa" # 提前用 15 分钟干声训练音色
def daily_story():
today = datetime.date.today().strftime("%m%d")
with open("story_calendar.json") as f:
cal = json.load(f)
title, content = cal[today]
wav = tts(text=f"囡囡,爷爷给你讲个故事,{title}。{content}", voice=voice)
os.system("aplay " + wav)
if __name__ == "__main__":
daily_story()
story_calendar.json 自己写 365 条,一天 3 分钟,老人听完睡得香。注意:如果克隆的是已故亲人,一定提前全家投票同意,别把'温暖'变'恐怖谷'。
很多老人舍不得装宽带,或者农村信号差。我们把 ASR、TTS、对话模型全裁成 Tiny 版,跑本地。
# 用 whisper.cpp 量化到 INT8
$ ./main -m ggml-tiny.bin -f tmp.wav -l zh --output-txt
# 对话改用 380M 的 ChatGLM2-6B INT4
# 启动占内存 1.9G,树莓派 4G 版跑得动
$ python3 web_demo.py --quant 4 --cpu
# 4G 模块自动连物联网卡,断网走本地,有网走云端
def route():
if ping("223.5.5.5"):
return "cloud"
return "edge"
亲测:春节带回老家,山上只有 2G 信号,盒子依旧能'开灯 + 讲故事',我妈直接把它抱去跟隔壁奶奶炫耀。
别整汉堡菜单、抽屉导航,老人只记得'绿键=说话,红键=报警,黄键=重复'。我们用 Tkinter 写个全屏大字页面,800×480 分辨率,给爸妈当遥控器。
import tkinter as tk
from PIL import Image, ImageTk
import os, subprocess
def speak(text):
subprocess.run(["espeak", "-vzh", text])
root = tk.Tk()
root.attributes('-fullscreen', True)
root.configure(bg='black')
f = tk.Frame(root, bg='black'); f.pack(expand=True)
btn1 = tk.Button(f, text="说话", font=("黑体", 80), fg="white", bg="#38b000", command=lambda: speak("我在听,你说嘛"))
btn1.pack(side="left", padx=30)
btn2 = tk.Button(f, text="救命", font=("黑体", 80), fg="white", bg="red", command=lambda: os.system("python call_family.py"))
btn2.pack(side="left", padx=30)
btn3 = tk.Button(f, text="重复", font=("黑体", 80), fg="black", bg="yellow", command=lambda: speak(last_response))
btn3.pack(side="left", padx=30)
root.mainloop()
把触摸屏校准一下,爸妈戴老花镜也能点。绿键一按,ASR 就开始录;红键长按 3 秒直接拨子女电话;黄键重复上一句,听不懂就再听一遍,简单粗暴。
我们这一代人最怕'培训爸妈'。正确姿势是——把教程写进对话里,让 AI 自己'见缝插针'。
TUTORIALS = {
"音量": "妈,你说'音量大一点',我就变大;先试试?",
"天气": "妈,问'今天冷吗',我就告诉你;说一句嘛,说完给你来段贵妃醉酒"
}
def maybe_teach(query):
for kw, tip in TUTORIALS.items():
if kw in query:
return chat(tip) + "▶️ (戏腔响起)"
return None
老人每学会一个新口令,立刻得到'戏曲彩蛋',多巴胺+1,记忆点+1。三天后,她把'音量小一点'说得比我还标准。
老人一句话里可能包含'身份证号、存折密码、老宅拆迁',一旦泄露就是灭顶之灾。我们默认所有录音本地存,7 天循环覆盖;真要上传云端,先 AES 加密,再拆成 3 片存不同服务器,密钥放子女手机。
from cryptography.fernet import Fernet
import shutil, os
key = Fernet.generate_key()
f = Fernet(key)
def encrypt_file(path):
with open(path, "rb") as src:
cipher = f.encrypt(src.read())
with open(path + ".aes", "wb") as dst:
dst.write(cipher)
os.remove(path)
return key # 钥匙当面给子女扫码存手机
教训:上线前一定拉七个不同口音的老人做'混沌测试',把咳嗽、喷嚏、鸡叫都录进去,别只顾标准普通话。
我们总以为爸妈跟不上时代,其实他们只是不想在陌生的界面里迷路。AIGC 再炫酷,如果他们喊三声没人应,就会像当年面对'双击'一样手足无措。把按钮做大、把语速放慢、把方言装进词表、把隐私锁进抽屉——这些看似'土'的细节,才是银发场景里最性感的黑科技。
今晚别刷短视频了,花十分钟给爸妈录一段你自己的声音,哪怕只是一句'妈,我在呢,别怕'。把这句装进 AI,让他们随时能按一下就能听见——这比任何大参数模型都更温暖。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online