aoniAI Hub
返回应用列表
会议纪要

会议纪要

Web 应用办公工具
asr
截图 1

应用介绍

一款部署在你本地服务器上的 AI 会议记录员。 它是做什么的? 想象一下:开会的时候,不用手动记笔记、不用录音后找人整理。ASR-Meeting 会在会议进行中,实时把每个人的说话内容转成文字,会议结束自动生成一份带时间戳的完整文稿和会议纪要,方便你随时回看、搜索、总结。 - 开会即转写:一边说话,一边出字幕,几乎实时 - 全程录音存档:每次会议自动保存音频 + 文字记录 - 自动生成纪要:会后自动总结出重点结论和待办事项 - 多语言支持:中英文、各地方言都能识别(基于 Qwen3-ASR 大模型) 它跑在哪里? 不是在云上,而是完全运行在你自己的设备上 —— 一台 NVIDIA Thor 开发板(一台比一般电脑更强的本地 AI 算力设备)。 - 需要连接一个 USB 麦克风(比如 Jabra 耳机)就能开会 - 所有语音识别都在这台设备上完成,音频数据不出本地,隐私安全 - 模型文件提前下载好,断网也能用 它怎么工作的? 你的声音 → 麦克风 → 本地系统捕捉音频 → AI 模型转成文字 → 存成会议记录 → 生成纪要 整个过程都在本地这台设备上自动完成,你在网页浏览器里就能看到实时转写结果。 技术上说,它由三部分组成: 1. 前端:一个简单的网页界面,你打开浏览器就能用 2. 后端:负责接收声音、调用 AI 模型转写、保存会议记录 3. AI 引擎:Qwen3-ASR 语音识别模型 + 会议纪要模型 适用场景 - 公司内部会议记录 - 线上会议(腾讯会议 / Zoom)的语音转写 - 需要隐私保密的本地语音处理需求

部署方式

创建一个docker-compose.yml文件,并写入下面内容

# =============================================================================
# ASR-Meeting 容器编排 (NVIDIA Thor / Jetson, aarch64 + CUDA)
#
# 用法 (从镜像仓库拉取, 无需本地源码/宿主torch栈):
#   docker compose -f docker/thor/docker-compose.yml up -d        # 启动(自动拉镜像)
#   docker compose -f docker/thor/docker-compose.yml down         # 停止并删除容器(保留数据卷)
#   docker compose -f docker/thor/docker-compose.yml ps           # 查看状态
#   # 镜像固定从 volces 云仓库拉取 (aoni-docker-cn-guangzhou.cr.volces.com/public/app/asr-meeting-thor:v1.0.1)
#
# 端口: 宿主机 ${ASR_PORT:-19468} -> 容器 8000
# 镜像: aoni-docker-cn-guangzhou.cr.volces.com/public/app/asr-meeting-thor:v1.0.1 (volces 云仓库)
# 数据目录 (bind mount 到宿主机规范路径):
#   /data/ai-agent-os/app/asrmeeting/models    ModelScope 模型缓存 (持久化). 首次启动若为空会联网下载(~4G)
#   /data/ai-agent-os/app/asrmeeting/meetings  会议录音 + 转写记录   (持久化)
#
# 可调环境变量:
#   ASR_PORT         对外端口, 默认 19468
#   ASR_BACKEND      后端模型, 默认 r2t2-streaming (Confucius4-R2T2 真流式 vLLM 代理; 可选 r2t2/qwen3-asr)
#   ALSADEV          麦克风设备, 留空=自动识别USB麦克风, 默认空 (Jabra/PHILIPS等)
#   AUDIO_SOURCE     录音源: pipewire-mix(默认, 宿主机PipeWire混合流, 可转写线上会议+本地) | alsa(物理声卡)
#   AUDIO_PW_DEVICE  pipewire-mix 模式的混合 sink monitor, 默认 mix_out.monitor
#   SUMMARY_LLM_URL  总结 LLM 地址, 默认 http://host.docker.internal:9000/v1/chat/completions (生产上摘要LLM常驻宿主9000)
#   SUMMARY_MODEL    总结模型名, 默认留空(由上游决定)
#
# 注意: Jetson/Thor 必须使用 --runtime=nvidia (compose 通过 runtime: nvidia
#       声明, 由 nvidia-container-toolkit 提供支持, 与 --runtime=nvidia 等效)。
#       若需访问本地声卡(服务端 arecord 录音), 保持 devices: /dev/snd 不变。
#       pipewire-mix 模式需挂载宿主机 Pulse socket(见 volumes) 并让宿主机运行
#       docker/asr-mix-audio.sh 生成 mix_out 混合源。
# =============================================================================
name: asr-meeting

services:
  asr:
    image: aoni-docker-cn-guangzhou.cr.volces.com/public/app/asr-meeting-thor:v1.0.1
    container_name: asr-meeting-thor
    # ---- 仅开发者在有源码+宿主torch栈时才需要构建/推送 ----
    # 要本地 build: 打开下面的 build 并把 image 改回 asr-meeting:thor
    # build:
    #   context: ../..
    #   dockerfile: docker/thor/Dockerfile
    runtime: nvidia
    restart: unless-stopped
    ports:
      - "${ASR_PORT:-19468}:8000"
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      MODELSCOPE_CACHE: /data/models
      MEETINGS_DATA_DIR: /data/meetings
      ASR_BACKEND: ${ASR_BACKEND:-r2t2-streaming}
      ASR_DEVICE: cuda:0
      # r2t2-streaming: independent vLLM streaming server (asr_streaming_server.py)
      ASR_STREAM_SERVER_URL: ${ASR_STREAM_SERVER_URL:-ws://127.0.0.1:9001/stream}
      ASR_STREAM_PORT: ${ASR_STREAM_PORT:-9001}
      VLLM_ENABLE_V1_MULTIPROCESSING: "0"
      R2T2_STREAM_PYTHON: ${R2T2_STREAM_PYTHON:-python3}
      # ALSADEV 留空时由 _detect_mic() 自动识别 USB 麦克风(支持热插拔/更换型号);
      # 仅作为手动覆盖时在此传入 plughw:C,D。
      ALSADEV: ${ALSADEV:-}
      AUDIO_SOURCE: ${AUDIO_SOURCE:-pipewire-mix}
      AUDIO_PW_DEVICE: ${AUDIO_PW_DEVICE:-mix_out.monitor}
      # 宿主机 PipeWire 的 Pulse 兼容 socket (pipewire-mix 模式需要)
      PULSE_SERVER: ${PULSE_SERVER:-unix:/run/user/${HOST_UID:-1000}/pulse/native}
      XDG_RUNTIME_DIR: /run/user/${HOST_UID:-1000}
      SUMMARY_ENABLED: "true"
      SUMMARY_MODE: direct
      SUMMARY_LLM_URL: ${SUMMARY_LLM_URL:-http://host.docker.internal:9000/v1/chat/completions}
      SUMMARY_MODEL: ${SUMMARY_MODEL:-}
      NVIDIA_VISIBLE_DEVICES: all
      NVIDIA_DRIVER_CAPABILITIES: compute,utility
      QWEN3_ASR_GPU_MEM: ${QWEN3_ASR_GPU_MEM:-0.2}
      QWEN3_ASR_CHUNK_SEC: ${QWEN3_ASR_CHUNK_SEC:-0.16}
    devices:
      - /dev/snd:/dev/snd
    # group_add:
    #   - "audio"
    shm_size: 4g
    volumes:
      - /data/ai-agent-os/app/asrmeeting/models:/data/models
      - /data/ai-agent-os/app/asrmeeting/meetings:/data/meetings
      # 让容器能读到宿主机 PipeWire 的 Pulse socket (pipewire-mix 模式)
      - /run/user/${HOST_UID:-1000}/pulse:/run/user/${HOST_UID:-1000}/pulse

保存之后执行docker compose up -d 启动即可