全栈本地化多模态情感陪伴智能体
Fully Local Multimodal Emotional Companion AI on NVIDIA DGX Spark
快速开始 • 核心性能 • 系统架构 • 功能特性 • 📄 项目报告书
MiaoAgent 是一款运行在 NVIDIA DGX Spark 上的全栈本地化多模态情感陪伴智能体。它以一只像素风金渐层英短猫咪为拟人化形象,通过多路感知通道实时捕捉用户情绪状态,在 完全不依赖任何云端服务 的前提下,主动发起富有共情的陪伴对话。
核心理念:数据不出端,关怀不缺席。
| 痛点 | MiaoAgent 方案 |
|---|---|
| 情感数据上云的隐私焦虑 | 全栈端侧部署,零云依赖,NemoClaw 沙箱网络策略已配置 |
| 一问一答的被动交互 | 全天候静默感知 + LLM 主动决策破冰 |
| 固定权重打分的不可解释 | LLM-as-Judge 自然语言推理,输出结构化决策理由 |
以下数据由
run_all_tests.py自动化脚本在 DGX Spark 上实测生成(宿主机直连模式,iptables 模拟外联阻断)
| 指标 | 实测值 | 说明 |
|---|---|---|
| Qwen3-30B TTFT | 28 ms | TRT-LLM + NVFP4,5轮均值 |
| Qwen3-30B 吞吐 | 68.5 chars/s | 中文字符/秒 |
| TRT-LLM vs Ollama | 10.2x 加速 | 同硬件对比 Gemma3-27B on Ollama |
| 双模型并发峰值内存 | 80.1 GB / 128 GB | Qwen3 + Phi-4 同时推理 |
| 语义护栏准确率 | 98.3% | 102 条样本(57 正常 + 45 恶意) |
| 语义护栏延迟 | 10.3 ms | BGE 嵌入 + 逻辑回归 |
| ChromaDB 检索延迟 | 16.3 ms | 排除首次模型加载 |
| 主动对话端到端 | ✅ 触发成功 | 事件注入 → 裁判决策 → SSE 推送 |
| 沙箱网络策略 | ✅ 已应用 | openshell policy set 验证通过 |
┌──────────────────────────────────────────────────────────────────────┐
│ DGX Spark (128GB) │
│ │
│ ┌─── GPU 推理层(宿主机 TRT-LLM 服务)────────────────────────────┐ │
│ │ Qwen3-30B-A3B :8355 对话核心 (TRT-LLM, NVFP4) │ │
│ │ Phi-4-multimodal :8356 融合裁判 (TRT-LLM, NVFP4) │ │
│ └──────────┬───────────────────┬───────────────────────────────────┘ │
│ │ inference.local │ host.openshell.internal:8356 │
│ │ (推理路由) │ (网络白名单) │
│ ┌══════════╪═══════════════════╪═══ NemoClaw 沙箱 ════════════════┐ │
│ ║ ▼ ▼ ║ │
│ ║ ┌─ CPU 感知层(常驻低功耗)─┐ ┌─ 决策层 ──────────────────┐ ║ │
│ ║ │ DeepFace 面部情绪 │ │ Phi-4 融合裁判(远程调用)│ ║ │
│ ║ │ DistilBERT 文字情感 │ │ LLM-as-Judge 自然语言决策 │ ║ │
│ ║ │ emotion2vec 语气语调 │ └────────────┬──────────────┘ ║ │
│ ║ │ PANNs 环境底噪 │ │ ║ │
│ ║ └──────────┬────────────────┘ │ ║ │
│ ║ │ 结构化事件 │ ║ │
│ ║ ▼ ▼ ║ │
│ ║ ┌─ EventStore 事件总线 ──┐ ┌─ 记忆层 ────────────────────┐ ║ │
│ ║ │ 24h 自动过期 | 多源汇聚│ │ FAISS 长期语义记忆 │ ║ │
│ ║ └────────────────────────┘ │ ChromaDB 心理学 RAG 策略库 │ ║ │
│ ║ └────────────────────────────┘ ║ │
│ ║ ┌─ 安全层 ────────────┐ ┌─ 交互层 ────────────────────────┐ ║ │
│ ║ │ BGE 语义护栏 │ │ Flask+SSE Web UI │ Piper TTS │ ║ │
│ ║ │ 正则兜底 │ │ Whisper ASR │ 13帧猫咪动画 │ ║ │
│ ║ └─────────────────────┘ └─────────────────────────────────┘ ║ │
│ ╚═══════════════════════════════════════════════════════════════╝ │
└──────────────────────────────────────────────────────────────────────┘
上图为目标架构。当前 Demo 以宿主机直连 TRT-LLM 模式运行(
ENGINE=trtllm),NemoClaw 沙箱网络策略已通过openshell policy set配置并验证,沙箱内全量运行待 alpha 版文件挂载机制适配后完成迁移。
推理路由设计(已完成配置验证):
- Qwen3-30B(对话核心)→ OpenShell
inference.local安全路由,gateway 自动代理转发到宿主机:8355,沙箱代码不接触真实地址 - Phi-4-multimodal(裁判引擎)→
sandbox-policy.yaml网络白名单,直连host.openshell.internal:8356
CPU 端常驻部署四路轻量化感知模型,全天候低功耗静默运行。各路感知结果统一汇入 EventStore 事件总线,由 Phi-4 融合裁判定时巡检,检测到复合情绪模式时主动发起关心。
Phi-4 作为独立裁判引擎进行自然语言逻辑推理,全权决定是否开口及采用何种干预策略(共情倾听、鼓励支持、注意力转移、温柔提醒、静默陪伴),输出结构化决策理由。
系统设计为在 NemoClaw 沙箱中运行,已完成以下安全配置验证:
sandbox-policy.yaml仅放行 Phi-4 裁判直连端口(:8356),删除了默认策略中所有外部域名白名单- Qwen3 通过 OpenShell 推理路由代理(
openshell inference set已注册) inference_config.py支持trtllm/nemoclaw/nemoclaw_whitelist/ollama四种引擎一键切换
当前 Demo 以宿主机直连 TRT-LLM 模式运行,NemoClaw alpha 版本的沙箱文件系统挂载方案仍在适配中。
短期感知记忆通过 EventStore 实现 24 小时自动过期。长期语义记忆通过 FAISS 向量库持久化关键对话。结合心理学干预 RAG 策略库,实现具备时间连贯性的陪伴成长。
内置 5 种极端压力场景的社交消息模拟注入脚本(工作压力、社交孤立、好消息、深夜加班、朋友吵架),确保核心业务逻辑的演示万无一失。
| 类别 | 技术 | 作用 |
|---|---|---|
| 硬件 | DGX Spark | 128GB 统一内存,承载全部推理与感知 |
| 推理引擎 | TensorRT-LLM | NVFP4 精度加速,TTFT 28ms |
| 对话模型 | Qwen3-30B-A3B | 猫咪人格拟真对话核心 |
| 裁判模型 | Phi-4-multimodal-instruct | 多模态融合裁判 |
| 向量嵌入 | BGE-large-zh-v1.5 | 语义护栏 + 长期记忆 |
| 向量检索 | FAISS + ChromaDB | 长期记忆 + RAG 策略库 |
| 语音识别 | Whisper | 语音输入转文字(本地) |
| 语音合成 | Piper TTS | 中文语音合成(本地) |
| 沙箱 | NemoClaw / OpenShell 0.1.0 | 沙箱网络策略与推理隐私路由(已完成策略配置) |
| 前端 | Flask + SSE | 实时猫咪情绪动画 |
- NVIDIA DGX Spark(128GB 统一内存)
- Ubuntu 24.04, ARM64
- Docker 28.x+(用于运行 TRT-LLM 容器)
- Python 3.12+
- OpenShell 0.1.0 + NemoClaw(可选,用于沙箱部署)
git clone https://github.com/lujunlin-cn/MiaoAgent.git
cd MiaoAgentpython3 -m venv frontend/.venv
source frontend/.venv/bin/activate
pip install -r requirements.txt# DGX Spark 是 ARM64
cd /tmp
wget https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_aarch64.tar.gz
tar xzf piper_linux_aarch64.tar.gz
sudo cp piper/piper /usr/local/bin/piper
sudo cp piper/lib*.so* /usr/local/lib/
[ -d piper/lib ] && sudo cp piper/lib/lib*.so* /usr/local/lib/
sudo ldconfigWhisper 通过 pip 安装(已包含在 requirements.txt 中),首次运行时自动下载 base 模型权重(~140MB)。如需离线部署,提前运行 python3 -c "import whisper; whisper.load_model('base')" 并拷贝 ~/.cache/whisper/。
将以下模型放置到 models/ 目录:
models/
├── bge-large-zh-v1.5/ # BGE 中文嵌入模型(语义护栏 + 记忆)
├── distilbert-sentiment/ # DistilBERT 中文情感分类
├── piper/
│ ├── zh_CN-huayan-medium.onnx # Piper TTS 中文语音模型
│ └── zh_CN-huayan-medium.onnx.json
├── emotion2vec_plus_large/ # emotion2vec 语气情绪(CPU)
└── panns/
└── Cnn14_mAP=0.431.pth # PANNs 环境音分类(CPU)
# Qwen3-30B-A3B(端口 8355)
trtllm-serve serve /path/to/qwen3-model \
--host 0.0.0.0 --port 8355 \
--max_batch_size 4 --tp_size 1
# Phi-4-multimodal-instruct(端口 8356)
trtllm-serve serve /path/to/phi4-model \
--host 0.0.0.0 --port 8356 \
--max_batch_size 4 --tp_size 1
# 验证
curl -s http://localhost:8355/v1/models | python3 -m json.tool
curl -s http://localhost:8356/v1/models | python3 -m json.toolsource frontend/.venv/bin/activate
python3 frontend/web_ui.py访问 http://127.0.0.1:5000 即可看到猫咪界面。
远程访问:
ssh -L 5000:127.0.0.1:5000 user@your-dgx-spark-ip# 全量测试
sudo $(which python3) run_all_tests.py
# 只跑性能测试
sudo $(which python3) run_all_tests.py --only perf
# 只跑护栏测试
sudo $(which python3) run_all_tests.py --only guard# 注入压力场景,触发猫咪主动关心(需要 Web UI 已启动)
python3 demo_social_messages.py --scenario stressed --api
# 可选场景:stressed, lonely, happy, late_night, fightMiaoAgent 的安全架构设计为在 NemoClaw 沙箱中运行。以下配置已完成验证:
已完成:
sandbox-policy.yaml网络策略已通过openshell policy set应用至沙箱实例- Qwen3 推理路由已通过
openshell provider create+openshell inference set注册 inference_config.py支持nemoclaw引擎模式一键切换nemoclaw_recover.sh开机恢复脚本已编写
待完成:
- NemoClaw alpha 版本的沙箱文件系统挂载方案适配(应用代码迁入沙箱内运行)
# 沙箱网络策略配置
sudo nemoclaw onboard
sudo openshell policy set catagent --policy sandbox-policy.yaml --wait
# 注册 Qwen3 推理路由
sudo openshell provider create \
--name trtllm-qwen3 --type openai \
--credential OPENAI_API_KEY=empty \
--config OPENAI_BASE_URL=http://host.openshell.internal:8355/v1
sudo openshell inference set \
--provider trtllm-qwen3 --model qwen3 --no-verify
# 重启后恢复
sudo bash nemoclaw_recover.sh通过环境变量一键切换推理后端:
# TRT-LLM 直连(默认,当前 Demo 使用)
export MIAOAGENT_ENGINE=trtllm
# NemoClaw 沙箱模式(沙箱全量部署后使用)
# Qwen3 走 inference.local 安全路由,Phi-4 走白名单直连
export MIAOAGENT_ENGINE=nemoclaw
# NemoClaw 白名单模式(Issue #326 workaround)
# 两个模型都走白名单直连 host.openshell.internal
export MIAOAGENT_ENGINE=nemoclaw_whitelist
# Ollama 调试模式
export MIAOAGENT_ENGINE=ollamaDGX Spark 关机/重启后 NemoClaw 沙箱不会自动恢复(alpha 版本已知限制):
sudo bash nemoclaw_recover.sh如果 sandbox Phase 不是 Ready(SSH key 失效等),需要完全重建:
sudo nemoclaw onboard
sudo openshell policy set catagent --policy sandbox-policy.yaml --wait如果 OpenShell 推理路由 inference.local DNS 解析失败:
# 切换到白名单模式,两个模型都直连
export MIAOAGENT_ENGINE=nemoclaw_whitelistcurl -s http://localhost:8355/v1/models | python3 -m json.tool
curl -s http://localhost:8356/v1/models | python3 -m json.toolMiaoAgent/
├── frontend/ # Web UI
│ ├── web_ui.py # Flask + SSE 主程序
│ └── templates/ # HTML 模板(含 13 帧猫咪情绪动画)
├── skills/ # 核心技能模块
│ ├── emotion_perception/ # 多模态感知(DeepFace/DistilBERT/emotion2vec/PANNs)
│ ├── proactive_engine/ # 主动对话决策引擎(LLM-as-Judge)
│ ├── companion_persona/ # 猫咪人格对话生成
│ ├── safety/ # 语义护栏(BGE + 分类器 + 正则)
│ ├── memory/ # FAISS 长期语义记忆
│ ├── bridge/ # 社交消息桥接器(只读设计)
│ ├── tts/ # Piper TTS 语音合成
│ ├── audio/ # Whisper 语音识别
│ └── shared/ # 共享模块(EventStore/推理配置/嵌入单例)
├── rag/ # 心理学 RAG 策略库
│ ├── data/ # 心理学对话策略语料
│ ├── retriever.py # ChromaDB 检索器
│ └── build_kb.py # 知识库构建脚本
├── prompt/ # Prompt 模板
│ ├── cat_persona.txt # 猫咪人格 System Prompt
│ └── fusion_judge.txt # 融合裁判 Prompt
├── models/ # 本地模型(不提交到 Git)
├── run_all_tests.py # 全栈自动化验证脚本
├── demo_social_messages.py # Demo 场景注入脚本
├── nemoclaw_recover.sh # NemoClaw 开机恢复脚本
├── sandbox-policy.yaml # NemoClaw 沙箱策略(仅放行 Phi-4 直连端口)
└── requirements.txt # Python 依赖
| 成员 | 角色 | 核心贡献 |
|---|---|---|
| 陆俊林 | 架构师 / 队长 | 系统架构设计;TRT-LLM 集成与调优;NemoClaw 沙箱策略配置;EventStore 事件总线 |
| 邱靖翔 | 情感科学 + RAG | 心理学策略语料库构建;ChromaDB RAG 模块;融合裁判 Prompt 工程 |
| 李雨珍 | NLP + 前端 | Qwen3 猫咪人格 Prompt;Flask + SSE Web UI;13 帧情绪插画;TTS/ASR |
| 陈昕博 | 安全架构 + 产品 | BGE 语义护栏模块;正则安全层;FAISS 记忆模块;测试框架 |
MIT License
MiaoAgent — 数据不出端,关怀不缺席。
NVIDIA DGX Spark Hackathon 2026
