AI Friends · 虚拟角色好友聊天
⭐ 精选Django 6 + Vue 3 全栈 AI 聊天站。自定义创建虚拟角色,支持流式对话、长期记忆、语音输入输出(ASR + TTS)+ SSE 推流。
📅 2026Django 6.0Vue 3LangChainSimpleJWTSQLite3TailwindCSS + DaisyUIVite 7WebSocket (TTS)
核心想法
给每个人一个可以自定义性格的 AI 好友。不是通用 ChatGPT 式聊天,而是:
- 创建虚拟角色 — 性格、外观、系统提示词都是你设计的
- 长期记忆 — 不是每轮对话丢掉上下文,记忆图(Memory Graph)会把关键事件持久化
- 语音输入输出 — 可以直接说话给角色,角色也能语音回你(VAD 断句 + ASR + TTS WebSocket 实时合成)
- 流式回复 — SSE 推流,角色一个字一个字说出来,有交流感
双 Agent 协作
用 LangChain 把聊天拆成两个 Agent:
User Input
↓
[Chat Agent] · 负责生成自然的对话回复
↓
生成回复 → 回给前端(SSE 流式)
↓
[Memory Agent] · 异步跟进,判断这轮对话有无需要长期记住的信息
↓
更新用户画像 / 角色记忆向量库
让回复快,但记忆不遗漏。
架构(前后端分离)
backend/ · Django 6.0 + DRF + JWT
├── web/models/ · user / character / friend / message
├── web/views/
│ ├── create/character/ · 角色 CRUD
│ ├── friend/message/
│ │ ├── chat/ · 流式聊天 API(graph 编排)
│ │ ├── memory/ · 记忆管理(update + graph)
│ │ └── asr/ · 语音识别
│ └── user/account/ · 注册 / 登录 / token 刷新
└── documents/utils/ · 自定义 embedding + 文档入库
frontend/ · Vue 3.5 + Pinia + Vite
├── components/
│ ├── character/ · 角色组件 + 聊天输入 + 聊天历史
│ └── navbar/ · 导航栏 + 15 个功能图标
├── views/
│ ├── homepage/ · 首页
│ ├── friend/ · 好友列表
│ ├── create/character/ · 创建 / 更新角色
│ └── user/ · 登录 / 注册 / 资料 / 空间
└── js/
├── http/api.js · 普通 HTTP 封装
└── http/streamApi.js · SSE 流式封装
语音环节
麦克风输入
↓
@ricky0123/vad-web · 浏览器端 VAD 判定"说完了"
↓
传给 ASR · 后端识别成文字
↓
进入 Chat Agent 流程
↓
文字回复 + WebSocket 流式 TTS 合成
↓
前端播放
技术栈亮点
- SSE + WebSocket 双通道:SSE 推送聊天文字(简单),WebSocket 传 TTS 二进制音频(需要双向)
- LangChain Graph 编排:不是线性 chain,而是状态图,chat 和 memory 两个 agent 并发 + 结果汇总
- JWT 前后端分离:SimpleJWT,access token + refresh token 轮换
- TailwindCSS 4 + DaisyUI:配色方案可 live 切换
运行
# 后端
cd backend
python manage.py runserver
# 前端
cd frontend
npm run dev