模型与部署

文件结构

apps/server/
├── src/                      # 服务端主入口(CLI、Downloader、Config 加载)
│   ├── main.rs               # 二进制入口
│   ├── mod.rs                # run() / async_main()
│   ├── server.rs             # Server 生命周期(包装 api::server::Server)
│   ├── clap.rs               # CLI 参数:serve / downloader
│   └── downloader/           # 模型下载系统(manifest、checksum、mirror)
├── api/                      # HTTP 路由、AI Manager、WebSocket 处理
│   └── src/
│       ├── lib.rs            # start() / create_router()
│       ├── config/           # Config 定义(figment 分层加载)
│       ├── server.rs         # 服务端运行时状态
│       ├── auth.rs           # 认证路由(login / refresh / reset_password)
│       ├── index.rs          # Health / Version 端点
│       ├── ota.rs            # OTA 固件升级
│       ├── device.rs         # 设备管理(admin CRUD)
│       ├── ws/               # WebSocket 处理器(核心实时管道 + filter)
│       ├── component/        # AI 引擎实现(Manager + 模型)
│       │   ├── asr/          # ASR Manager + 模型(XAsr)
│       │   ├── tts/          # TTS Manager + 模型(MatchaTTS)
│       │   ├── vad/          # VAD Manager + 模型(Earshot)
│       │   ├── llm/          # LLM Manager + 模型(Qwen3 / Echo)
│       │   ├── mcp/          # MCP Server + Client(rmcp Streamable HTTP)
│       │   └── ling/         # LingCore:LLM + MCP 编排(实现 Ling trait)
│       ├── record/           # 会话录制 REST API
│       ├── matrix/           # Matrix 聊天集成
│       └── common/           # 共享辅助(device selection、errors)
├── service/                  # 业务逻辑层(trait 定义 + 编排框架)
│   └── src/
│       ├── component/        # 引擎契约(trait + 协议类型)
│       │   ├── asr.rs / tts.rs / vad.rs
│       │   ├── llm/          # Llm trait + ChatMessage / ToolDef
│       │   └── mcp/          # McpClient trait + McpRegistry
│       ├── ling/             # Ling trait(决策引擎)
│       ├── pipeline/         # Node / NodeChain / PipelineEvent(外层节点链)+ nodes/
│       ├── session/          # Session 状态机 + Round 生命周期(含 TurnEvent)
│       ├── message/          # 线协议消息定义(Hello / Abort / Audio / LLM / TTS 等)
│       ├── frame.rs          # Frame / FrameResult / OutputMessage
│       └── types.rs          # 共享类型(EmptyKind / Sentence / Input / OutputBlock)
├── entity/                   # Sea-ORM Entity(user / session / round / round_data / frame / config)
├── migration/                # 数据库迁移
└── web/                      # 静态文件服务(SPA)

数据流

客户端消息经 ProtocolTranslator 转成内部 Frame、过入站过滤器后进入 Session,出站反向经过滤器与 translator 回到 WebSocket。链路图与各段职责见核心架构。

配置系统

配置使用 figment 分层加载,优先级从低到高:

  1. VANLING_CONFIG 环境变量指向的 TOML 文件
  2. CLI --config 指定路径(可多个,会合并)
  3. VANLING_ 前缀环境变量(VANLING_LLM_MODEL 等)
  4. CLI -O key=value 覆盖

热重载

config::Manager 使用 AtomicPtr<Config> + 线程本地缓存(8 槽历史记录)实现无锁热重载。配置变更时旧版本仍被引用中的协程安全持有,新版本即时生效。

主要配置项

分类键默认值说明
服务器address127.0.0.1监听地址
服务器port3000监听端口
数据库database_urlsqlite://db.sqlite?mode=rwcSQLite 或 PostgreSQL URL
认证auth_access_token_secretQLjJTeVblAlM47deJWT 签名密钥
TTStts_modelmatcha_tts模型选择
ASRasr_modelx_asr模型选择
LLMllm_providerlocal_qwen3模型选择
VADvad_modelearshot模型选择
Sessionsilence_voice_timeout1200静默超时 (ms)
日志log_console_enabledtrue控制台日志
Matrixmatrix_enablefalseMatrix 集成

完整配置示例见 application-example.toml。

资产安装

vanling-server downloader 按 manifest 拉取模型并校验 SHA256,安装路径再经 derive_*_path 注入配置;子命令、manifest 格式、镜像回退与交互式向导见模型下载器。

# 从 apps/server/ 目录执行
moon run server:run -- downloader install --data-dir ../../data --all
moon run server:run -- downloader wizard --data-dir ../../data

模型

LLM

模型内存文件大小备注
Qwen3-0.6B (Candle-GGUF)~1GB0.6B GGUFQwen3-0.6B-Q4_K_M.gguf
Qwen3-1.7B (Candle-GGUF)~2.5GB1.11GBQwen3-1.7B-Q4_K_M.gguf
Echo00回显(测试用)

ASR

模型内存文件大小语言CER (TTS 闭环)
XAsr (sherpa-onnx)~600MB~50MB中/英—
Void00——(测试用)

TTS

模型内存文件大小备注
MatchaTts (sherpa-onnx)~500MB72MB + 76MB (vocoder)中文/中英双语
Mute00静音(测试用)

VAD

模型内存文件大小备注
Earshot (Silero VAD)~10MB内嵌纯 Rust 实现,无 ONNX
Void00固定返回有声(测试用)

Fedora 43 CUDA 安装与配置

sudo sh cuda_12.8.1_570.124.06_linux.run --toolkit --no-drm --silent --override
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64
conda create -n cuda
conda install conda-forge::gcc==14.3.0
conda install conda-forge::gxx==14.3.0
conda install anaconda::openssl
conda activate cuda
# 开始开发...

参考规范

https://rust-lang.github.io/api-guidelines/

https://rust-coding-guidelines.github.io/rust-coding-guidelines-zh/overview.html