这是一个「会聊天、有人格、记得住你、还能语音应答」的本地 AI 伴侣系统。 大脑(LLM/Agent)+ 记忆(PG+pgvector)+ 嘴(TTS)都在你本地机器上跑, 数据不出内网。
https://aib.it865.com(外网入口,经 Nginx,Let's Encrypt 证书; 前端同源反代到后端,HTTPS 安全上下文下麦克风可直接使用)。http://192.168.5.135:8080(非安全上下文,麦克风被浏览器禁用)。/chat(聊天页)。GET /api/health(数据库/Redis/Ollama/ASR 各项状态)。系统用浏览器 localStorage 里的一个 UUID 作为「你是谁」, 首次访问自动生成并幂等注册到后端。换浏览器/清缓存 = 新用户; 同一浏览器记住你的对话与记忆。

在 /chat 页顶部 选择人格(下拉),然后在输入框打字 + 发送:

人格 = 大模型的「人设」,包括名字、性格、说话方式、背景、喜恶、相处模式。
温柔、会倾听,喜欢深夜陪你聊天。

系统把聊天中的重要信息自动存成「长期记忆」,分三类,可用下拉按人格查看:
用户偏好安静一点的对话节奏,喜欢被主动关心但不喜欢长篇大论。
⚠️ 当前服务器跑的是 V1 版本(GET /api/health 无 asr 项、无语音端点), 聊天页暂不显示语音工具条。等 docker compose 重新部署 V2(api + tts-worker + 前端)后, 下方这条链路才会生效。下面为功能说明与界面示意。
部署 V2 后,聊天页下方会出现一条「语音工具条」(仅当后端 ASR 可用时显示):
降级式 若没装 whisper/Piper,整条链路仍能跑通: ASR 不可用会显示「🎙 ASR 不可用」,TTS 引擎为 noop 时显示 「TTS 引擎未合成音频」,聊天文字不受影响。
在手机上测试本系统有三种方式:外网 HTTPS 入口 https://aib.it865.com(推荐, 手机任意网络可用,麦克风可录)、内网 http://192.168.5.135:8080(PWA)、 安卓 APK 侧载。打开首页(登录页 /)就能看到「⬇ 下载安卓 App」按钮,直链下载/download/AICompanion.apk(Nginx 托管)。
https://aib.it865.com。 内网入口:手机与服务器 192.168.5.135 连同一个局域网, 打开 http://192.168.5.135:8080。麦克风录音限制:浏览器只在安全上下文(HTTPS 或 localhost)允许麦克风。 走外网入口 https://aib.it865.com(Let's Encrypt 公共证书)即为安全上下文,录音可直接使用; 走内网 http://192.168.5.135:8080 是非安全上下文,录音按钮会被禁用, 但「📁 上传音频文件」(mp3/wav/ogg)始终可用。
身份:手机和电脑是不同浏览器 = 不同 user_id,各自有独立的历史对话与记忆(同一台手机内保持一致)。
/),点「⬇ 下载安卓 App」按钮,直链/download/AICompanion.apk(Nginx 托管,支持断点续传)。download/AICompanion.apk(Capacitor WebView 壳,内部加载 https://aib.it865.com);也可 adb install 或文件传输到手机。APK 与 PWA 共用同一套前端与后端 API;APK 现加载 https://aib.it865.com(HTTPS 安全上下文), 录音可直接使用,上传音频同样可用。
自动升级(V2.3 起):App 每次启动会在后台检查 /download/app-update.json 版本清单, 发现新版本时弹窗「立即升级」→ 自动下载 + SHA-256 校验 + 调起系统安装器。 首次安装新版需在系统设置中允许「安装未知应用」(App 会引导跳转);安装完成后重新打开 App 即可。
https://aib.it865.com 域名解析正常、443 放行; 服务器 /abcdata/AiCompanion 的 Nginx 容器在跑(docker ps | grep ai-companion-nginx)。ufw allow 8080 等)。/api/health 返回 200;PWA 缓存若旧,长按图标"重新加载"或清站点数据。| 方法 路径 | 作用 |
|---|---|
GET /api/health | 各服务状态(db/redis/ollama/asr/llm) |
POST /api/users | 注册/幂等获取用户(可传 user_id) |
GET /api/personas | 人格列表 |
POST/PUT/DELETE /api/personas/:id | 人格增改删 |
GET/POST /api/conversations?user_id= | 历史对话列表 / 新建对话 |
DELETE /api/conversations/:id | 删除某条对话 |
GET /api/messages/:conversationId | 取某对话的消息 |
POST /api/chat?user_id= | 文字聊天(Brain+Memory) |
POST /api/voice/chat?user_id= | 语音聊天(ASR→Brain→TTS 入队) |
GET /api/voice/status/{task_id} | 轮询 TTS 任务状态 / 取音频 URL |
GET /voices/<id>.wav | TTS 音频产物(Nginx 反代) |
GET/DELETE /api/memories | 查看/删除长期记忆 |
cd /abcdata/AiCompanion docker compose up -d # 起全栈(含 tts-worker) docker compose logs -f api # 跟踪 api 日志 docker compose build api tts-worker && docker compose up -d # 改代码/依赖后重建./download_models.sh # 预热 whisper + 下载 Piper 音色到 models/ TTS_ENGINE=piper docker compose up -d --build tts-worker # 启用 Piper 引擎 # 想备份模型:BACKUP_MODELS=1 ./backup.sh./backup.sh # pg_dump + 关键文件(每日 03:00 cron) psql -U companion -d companion < backup/<最新.sql> # 恢复数据库./boot.sh # 等 Docker 就绪 → compose up → 等 api 健康 → 预热模型(失败不阻断)GET /api/health 的 asr 项; 需要容器里装好 faster-whisper + ffmpeg,并跑过 download_models.sh。getUserMedia 需安全上下文: 走外网 https://aib.it865.com(HTTPS)即可用麦克风;内网 http://192.168.5.135:8080非安全上下文,改用「上传音频文件」即可。noop(默认)→ 只跑通队列、不合成。 设 TTS_ENGINE=piper 重建 tts-worker 并下载音色后才有真声音。本手册的「示意图」按真实组件样式绘制。若要真·实拍:在https://aib.it865.com(或内网 192.168.5.135:8080)打开 /chat(各标签)与/help,用系统截图工具分别截「聊天 / 人格 / 记忆 / 语音工具条」, 再让我把对应 .mock 块替换为 <img> 即可。
返回 聊天页 →