沐言是一个本地优先的 AI 对话应用。界面采用简约的二次元设计。
前端可以直接调用模型服务。后端离线时,用户仍可查看本地历史并继续对话。
- 支持流式响应和完整响应。
- 支持 OpenAI 兼容接口和 Anthropic 接口。
- 支持模型切换和自定义服务地址。
- 支持图片和文本文件附件。
- 支持多会话、新建会话和会话删除。
- 支持内置人设和自定义系统提示词。
- 使用 IndexedDB 保存会话和消息。
- 使用本地存储保存主题、人设和模型配置。
- 显示浏览器网络和后端服务状态。
- 提供可安装的 PWA 和离线应用外壳。
- 提供可选的账户、同步、记忆和管理后端。
PWA 缓存前端资源。IndexedDB 保存会话和消息。
后端离线时,前端直接调用用户配置的模型服务。模型服务仍需可访问。
账户登录、跨设备同步和服务器模型需要后端。首次加载必须完成 PWA 安装和缓存。
API Key 保存在当前浏览器。不要在共享设备中保存生产密钥。
| 模块 | 技术 |
|---|---|
| 前端 | Vue 3、TypeScript、Vite、Pinia、Tailwind CSS |
| PWA | vite-plugin-pwa、Workbox、IndexedDB |
| 后端 | FastAPI、SQLAlchemy、SQLite、SSE |
| 测试 | Vitest、Playwright、pytest |
需要 Node.js 20 或更高版本,并需要 pnpm。
cd frontend
pnpm install
pnpm dev打开 http://localhost:5173。在“模型服务”页面添加 API 地址、API Key 和模型名称。
后端是可选模块。它需要 Python 3.11 或更高版本,并推荐使用 uv。
cd backend
uv sync --extra dev
Copy-Item .env.example .env
uv run alembic upgrade head
uv run uvicorn app.main:app --reload --port 8000开发环境中的前端会把 /api 请求转发到 http://localhost:8000。
pnpm type-check
pnpm lint
pnpm test -- --run
pnpm build
pnpm previewuv run ruff check .
uv run mypy app
uv run python test_endpoints.py冒烟脚本要求后端已在 http://localhost:8000 运行。
Muyan/
├── frontend/ Vue 单页应用和 PWA
│ ├── public/ 图标和静态资源
│ └── src/ 页面、组件、状态和模型客户端
├── backend/ FastAPI 服务
│ ├── app/ API、服务、模型和 LLM 适配器
│ ├── alembic/ 数据库迁移
│ └── tests/ 后端测试
├── DESIGN.md 视觉设计规范
└── CLAUDE.md 架构和开发规范
建议使用当前版本的 Chrome、Edge、Firefox 或 Safari。
直接调用模型服务时,服务端必须允许浏览器跨域请求。部分服务可能不支持此模式。
本项目使用 MIT License。