开源智能会议记录工具Meetily:本地部署与AI集成实战指南
2026/8/5 3:08:09 网站建设 项目流程

在团队协作和项目管理中,会议记录是沉淀共识、追踪任务的核心资产。然而,将包含内部讨论、产品规划甚至敏感信息的会议记录上传至第三方云端服务,始终伴随着数据安全和隐私泄露的隐忧。你是否也在寻找一种既能高效记录、智能分析,又能将数据完全掌控在自己手中的解决方案?

今天,我们将深入拆解一款在 GitHub 上斩获 21K 星的开源神器——Meetily。它不仅仅是一个本地化的会议记录工具,更是一个集成了 AI 能力的个人或团队知识库构建平台。本文将带你从零开始,完成 Meetily 的本地部署、核心功能实战,并深入探讨其架构原理与最佳实践,让你彻底告别会议记录“上云”的焦虑,打造完全私有的智能会议协作空间。

1. Meetily 是什么?为什么选择它?

在深入动手之前,我们有必要厘清 Meetily 的核心定位与价值,这有助于我们理解后续的配置与使用逻辑。

1.1 核心定义与解决痛点

Meetily是一个开源的、支持本地部署的智能会议记录与知识管理应用程序。它的核心目标是:在保障数据绝对私有的前提下,利用现代 AI 技术(如大语言模型)提升会议记录的效率与价值。

它主要解决了以下痛点:

  1. 数据隐私与安全:所有数据(音频、文本、摘要)均存储在您自己的服务器或电脑上,无需经过任何第三方服务器,从根本上杜绝了数据泄露风险。
  2. 成本与可控性:完全免费开源,无需为云服务的订阅费用买单。您可以完全控制软件的版本、功能定制和运行环境。
  3. AI 赋能的工作流:它并非简单的录音笔。Meetily 集成了语音识别(ASR)和大型语言模型(LLM),能够自动将会议录音转为文字,并进一步生成会议摘要、提炼行动项(Action Items)、归纳关键决策,极大提升了会议内容的可利用性。
  4. 知识沉淀与检索:所有历史会议记录被结构化存储,形成一个可搜索的私有知识库。你可以轻松回溯数月前的会议结论,或跨会议检索相关技术讨论。

1.2 与云端工具及同类开源方案的对比

为了更清晰地定位 Meetily,我们可以做一个简单对比:

特性云端会议工具 (如钉钉/飞书会议、Otter.ai)其他本地录音工具Meetily
数据存储服务商云端本地音频文件本地结构化存储
AI 能力集成,但受服务商限制通常无集成,且可自选/本地化 LLM
成本订阅制,高级功能收费买断或免费完全免费开源
可定制性几乎为零高,代码完全开放
核心价值便捷、开箱即用隐私、离线隐私 + 智能 + 知识管理

从对比可以看出,Meetily 在“数据私有化”和“AI智能化”之间找到了一个优秀的平衡点,特别适合对数据安全有高要求的研发团队、法律顾问、初创公司以及任何希望将会议内容资产化的组织。

2. 环境准备与部署规划

Meetily 通常采用容器化部署,这保证了环境的一致性。以下是部署前的准备工作。

2.1 系统与环境要求

  • 操作系统:推荐 Linux (如 Ubuntu 20.04/22.04, CentOS 7/8) 或 macOS。Windows 可通过 WSL2 获得最佳体验。
  • Docker 与 Docker Compose:这是 Meetily 官方推荐的部署方式。请确保已安装:
    • Docker Engine 20.10+
    • Docker Compose V2+
  • 硬件资源
    • CPU:建议 4 核以上。AI 处理(语音识别、摘要生成)是计算密集型任务。
    • 内存:至少 8 GB,推荐 16 GB 或更高。运行大语言模型需要较多内存。
    • 存储:预留 20 GB 以上空间用于存储音频、文本数据和数据库。
  • 网络:部署机器需要能访问互联网,用于初次拉取 Docker 镜像。后续运行可完全离线(若使用本地模型)。

2.2 部署架构概览

了解 Meetily 的组件构成,有助于排错和后期维护。一个典型的 Meetily 部署包含以下服务:

  1. 前端 (Frontend):基于现代 Web 框架(如 React/Vue)的用户界面,提供会议管理、记录查看、搜索等功能。
  2. 后端 API (Backend):处理业务逻辑,管理会议、用户、任务等。
  3. 语音识别服务 (ASR Service):将上传的音频文件转换为文本。可能集成 Whisper(OpenAI)或其他开源 ASR 模型。
  4. 大语言模型服务 (LLM Service):用于处理文本摘要、行动项提取等。Meetily 可能支持连接 OpenAI API、Azure OpenAI,或本地部署的 Llama、ChatGLM 等开源模型。
  5. 数据库 (Database):存储用户、会议、记录等所有结构化数据,通常为 PostgreSQL 或 SQLite。
  6. 消息队列 (Message Queue, 可选):用于处理异步任务,如音频转写、AI 分析,提升系统响应速度。
  7. 对象存储 (Object Storage, 可选):用于存储音频、文件等二进制数据,可使用本地文件系统或 MinIO/S3 兼容服务。

通过 Docker Compose,这些服务会被编排在一起,协同工作。

3. 实战:使用 Docker Compose 一键部署 Meetily

这是最主流的部署方式,适合绝大多数用户。我们假设你已经在满足条件的 Linux 服务器上。

3.1 获取部署配置文件

首先,我们需要获取 Meetily 的官方部署清单。通常开源项目会将其放在 GitHub 仓库的根目录或deploy子目录下。

# 1. 创建一个专用目录并进入 mkdir meetily-deploy && cd meetily-deploy # 2. 假设我们直接下载官方的 docker-compose.yml 文件 # 请注意:此处URL为示例,请替换为Meetily官方仓库的实际raw文件地址。 # 你需要前往 GitHub (例如:https://github.com/meetily/meetily) 查找正确的文件。 wget -O docker-compose.yml https://raw.githubusercontent.com/meetily/meetily/main/docker-compose.yml # 3. 通常还需要一个环境变量配置文件 wget -O .env.example https://raw.githubusercontent.com/meetily/meetily/main/.env.example cp .env.example .env

重要:由于无法访问实时网络,以上wget命令的 URL 是假设的。在实际操作中,你必须访问 Meetily 的 GitHub 仓库,找到最新的docker-compose.yml.env.example文件。你也可以选择克隆整个仓库:

git clone https://github.com/meetily/meetily.git cd meetily # 然后使用仓库内的部署文件

3.2 配置环境变量

.env文件是配置 Meetily 行为的关键。使用文本编辑器(如vimnano)打开并修改.env文件。

nano .env

你需要关注并修改以下核心配置项(以下值为示例,请根据注释调整):

# 数据库配置 DATABASE_URL=postgresql://meetily_user:StrongPassword123@db:5432/meetily_db # 建议修改 ‘StrongPassword123' 为强密码 # 前端访问地址,根据你的服务器IP或域名修改 NEXT_PUBLIC_APP_URL=http://localhost:3000 # 如果对外服务,改为 http://your-server-ip:3000 或 https://your-domain.com # AI 服务配置 (关键!) # 示例1: 使用 OpenAI 官方 API (数据会出境,请注意!) OPENAI_API_KEY=sk-your-openai-api-key-here ENABLE_AI_SUMMARY=true AI_PROVIDER=openai # 示例2: 使用本地部署的 Ollama (推荐,数据完全私有) # OPENAI_API_KEY= # 注释掉或留空 # OLLAMA_API_BASE=http://ollama-service:11434 # 指向 Ollama 服务地址 # AI_PROVIDER=ollama # OLLAMA_MODEL=llama3:8b # 指定使用的模型 # 文件存储路径 (本地存储示例) FILE_STORAGE_PATH=/data/meetily/uploads # 确保此目录存在且有写权限 # 密钥,用于加密会话等,请使用 `openssl rand -hex 32` 生成 SECRET_KEY=your_generated_32_bytes_hex_secret_here

关键决策点:AI 服务配置

  • 使用云端 API(如 OpenAI):配置简单,效果稳定,但会议内容会发送至第三方。
  • 使用本地模型(如通过 Ollama):数据完全私有,但需要本地有足够的 GPU/CPU 和内存资源来运行模型,且效果取决于所选模型能力。对于追求极致隐私的场景,这是唯一选择。

3.3 启动 Meetily 服务

配置完成后,使用 Docker Compose 启动所有服务。

# 在包含 docker-compose.yml 和 .env 的目录下执行 docker-compose up -d

-d参数表示在后台运行。首次执行会从 Docker Hub 拉取所有必要的镜像,可能需要几分钟时间。

你可以使用以下命令查看服务状态和日志:

# 查看所有容器状态 docker-compose ps # 查看具体服务的日志,例如后端日志 docker-compose logs backend -f # 查看所有服务的聚合日志 docker-compose logs -f

当看到所有服务状态均为Up (healthy)或类似提示,且日志中没有持续报错时,说明部署成功。

3.4 访问与初始化

打开浏览器,访问你在.env文件中配置的NEXT_PUBLIC_APP_URL(例如http://localhost:3000)。

  1. 首次访问:通常会跳转到用户注册页面。
  2. 创建管理员账户:输入邮箱、用户名和密码,创建第一个用户。这个用户通常会自动获得管理员权限。
  3. 登录系统:使用刚创建的账户登录,你将进入 Meetily 的主界面。

至此,一个完全私有的 Meetily 会议记录平台就已经搭建完成。

4. 核心功能实战与代码浅析

部署完成只是第一步,让我们深入其核心功能,看看 Meetily 如何在实际中提升效率。

4.1 创建与管理会议

登录后,你可以点击“新建会议”按钮。

  1. 填写会议信息:输入会议主题、描述、时间、参与者。
  2. 上传录音文件:支持常见的音频格式(如.mp3,.wav,.m4a)。Meetily 的后端服务会接收到这个文件。
    • 后端处理逻辑(伪代码示意)
      # 伪代码,展示文件接收和任务分发 @app.post("/api/meetings/{id}/audio") def upload_audio(meeting_id, audio_file): # 1. 保存音频文件到配置的存储路径 file_path = save_to_storage(audio_file) # 2. 在数据库中创建一条录音记录,状态为 ‘pending' audio_record = AudioRecord.create(path=file_path, status='pending') # 3. 向消息队列发送一个异步任务,触发语音识别 task_queue.enqueue(transcribe_audio_task, audio_record.id) return {"message": "Audio uploaded, processing started."}
  3. 后台自动处理:上传后,系统会自动触发流水线:
    • 音频文件被发送给ASR 服务进行转写。
    • 转写得到的文本保存到数据库。
    • 文本被发送给LLM 服务,生成摘要、行动项和关键词。

4.2 AI 能力:从录音到结构化知识

这是 Meetily 的精华所在。我们看一下它如何调用 AI 服务。

  1. 语音识别 (ASR):Meetily 可能集成 Whisper。以下是一个调用本地 Whisper 模型的简化示例:

    # 伪代码:ASR 服务核心函数 import whisper model = whisper.load_model("base") # 加载模型,可以是 tiny, base, small, medium, large def transcribe_audio(file_path): result = model.transcribe(file_path, language="zh") return result["text"]

    在实际部署中,这个服务会被容器化,通过 gRPC 或 HTTP API 供后端调用。

  2. 文本分析与摘要生成 (LLM):后端在拿到转录文本后,会构造提示词(Prompt)调用 LLM。

    # 伪代码:调用 LLM 生成会议摘要和行动项 import openai # 或调用 Ollama、本地 API # 假设使用 OpenAI 格式的 API client = openai.OpenAI(api_key=settings.OPENAI_API_KEY, base_url=settings.OLLAMA_API_BASE) def analyze_meeting_text(transcript): prompt = f""" 你是一个专业的会议助理。请分析以下会议录音转录文本,并输出: 1. 会议核心摘要(不超过200字)。 2. 明确的行动项(Action Items),格式为 [负责人]: [具体任务]。 3. 讨论中做出的关键决策。 会议文本: {transcript} """ response = client.chat.completions.create( model="gpt-3.5-turbo", # 或本地模型名,如 “llama3:8b” messages=[{"role": "user", "content": prompt}], temperature=0.3, ) analysis_result = response.choices[0].message.content # 解析 analysis_result, 提取摘要、行动项等,并存入数据库 return parse_ai_response(analysis_result)

    通过这段逻辑,原始的音频文件就变成了包含摘要行动项决策点的结构化数据。

4.3 知识库与搜索功能

所有处理完成的会议记录,都会进入 Meetily 的知识库。前端界面会提供搜索框。

  • 后端搜索 API 示例
    @app.get("/api/meetings/search") def search_meetings(q: str, user_id: int): # 使用数据库的全文搜索功能(如 PostgreSQL 的 pg_trgm 或专用搜索如 Typesense/MeiliSearch) # 搜索会议标题、描述、转录文本、AI摘要等字段 query = Meeting.query.filter( Meeting.participants.contains(user_id), or_( Meeting.title.ilike(f"%{q}%"), Meeting.transcript.ilike(f"%{q}%"), Meeting.ai_summary.ilike(f"%{q}%") ) ).all() return serialize(query)
  • 前端展示:搜索结果会高亮显示关键词,并可以按时间、相关性排序,让你快速找到数月前关于某个技术栈或业务决策的讨论细节。

5. 常见问题与故障排查 (FAQ)

在部署和使用过程中,你可能会遇到以下问题。

5.1 部署启动问题

问题现象可能原因排查与解决思路
docker-compose up失败,提示网络错误1. Docker 服务未运行。
2. 镜像拉取地址被阻。
1. 运行systemctl status docker检查 Docker 状态。
2. 配置 Docker 国内镜像加速器。
服务状态一直为unhealthy或不断重启1. 依赖服务(如数据库)未就绪。
2. 环境变量配置错误。
3. 端口冲突。
1. 查看该容器的日志:docker-compose logs <service_name>
2. 检查.env文件中的连接字符串、密码、URL 是否正确。
3. 检查端口是否被占用:netstat -tlnp | grep :<port>
前端访问localhost:3000连接被拒1. 前端服务未成功启动。
2. 防火墙限制。
3. 在服务器上部署,未绑定到0.0.0.0
1. 检查前端容器日志。
2. 检查服务器防火墙是否放行了 3000 端口。
3. 确保前端配置监听0.0.0.0

5.2 AI 功能相关问题

问题现象可能原因排查与解决思路
音频上传后,一直显示“转写中”,无结果1. ASR 服务启动失败或配置错误。
2. 消息队列未工作,任务未分发。
3. 音频格式不支持或文件过大。
1. 检查 ASR 服务容器日志。
2. 检查 Redis/Celery 等消息队列服务状态。
3. 尝试转换音频为标准格式(如 16kHz, mono, wav)。
AI 摘要和行动项生成失败1. LLM 服务配置错误(API Key 或地址)。
2. 本地 LLM 模型未下载或内存不足。
3. 提示词(Prompt)构造出错。
1. 检查.envAI_PROVIDER,OPENAI_API_KEY,OLLAMA_API_BASE配置。
2. 如果使用 Ollama,进入容器运行ollama list确认模型已拉取。
3. 查看后端日志中调用 LLM API 的请求和响应。
使用本地模型,处理速度极慢本地模型(如 7B/13B 参数)在 CPU 上推理速度慢。1. 考虑使用更小的模型(如 TinyLlama, Phi-2)。
2. 为服务器增加 GPU 支持,并配置 Docker 使用 GPU。
3. 调整任务处理为更低优先级,或限制并发处理任务数。

5.3 数据与存储问题

问题现象可能原因排查与解决思路
上传文件失败1. 存储路径挂载权限错误。
2. 磁盘空间不足。
1. 检查docker-compose.yml中的 volumes 映射,确保宿主机目录存在且有写权限 (chmod 777是临时方案,生产环境应配置正确用户组)。
2. 运行df -h检查磁盘空间。
搜索功能不生效1. 数据库全文搜索扩展未启用。
2. 搜索服务(如 Typesense)未运行。
1. 检查数据库初始化脚本是否包含创建全文搜索索引的步骤。
2. 查看专用搜索服务的容器状态和日志。

6. 生产环境最佳实践与进阶配置

将 Meetily 用于团队或生产环境,需要考虑更多。

6.1 安全加固

  1. 修改默认端口:不要使用3000,5432等默认端口。在docker-compose.yml中映射到非标准端口。
  2. 启用 HTTPS:使用 Nginx 或 Caddy 作为反向代理,配置 SSL 证书(Let‘s Encrypt 免费)。
    # Nginx 配置示例片段 server { listen 443 ssl; server_name meetily.yourcompany.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; location / { proxy_pass http://localhost:3000; # 指向 Meetily 前端 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 可能还需要代理后端 API 地址 }
  3. 数据库密码与密钥.env文件中的密码和SECRET_KEY必须使用强密码,且该文件权限应设置为600,并纳入.gitignore
  4. 定期备份:定期备份数据库和上传的文件目录。可以使用docker exec执行pg_dump,并结合cron定时任务。

6.2 性能与可扩展性

  1. 分离服务与资源限制:在docker-compose.yml中为 CPU/内存密集型服务(如 ASR, LLM)设置资源限制 (deploy.resources.limits)。
    services: llm-service: image: ollama/ollama deploy: resources: limits: cpus: '4' memory: 16G
  2. 使用外部数据库和存储:对于团队使用,建议将 PostgreSQL 和文件存储(如 MinIO 或 AWS S3)迁移到独立的、更稳定的服务上,而不是使用容器内的临时存储。
  3. 配置日志收集:使用 Docker 的json-file日志驱动,并配合logrotate或 ELK/ Loki + Grafana 栈进行日志管理和监控。

6.3 本地 AI 模型的选型与优化

这是实现完全离线、私有化智能的关键。

  1. 语音识别模型
    • Whisper.cpp:OpenAI Whisper 的 C++ 移植版,效率极高,可在 CPU 上流畅运行base甚至small模型。
    • FunASR:阿里巴巴开源的工业级语音识别模型,对中文支持可能更优。
  2. 文本大语言模型
    • 轻量级选择TinyLlama(1.1B),Phi-2(2.7B),Qwen1.5-1.8B。这些模型在 CPU 上也可运行,适合摘要生成等任务。
    • 平衡选择Llama 3 8B,Qwen1.5-7B,ChatGLM3-6B。需要较好的 CPU 或消费级 GPU(如 RTX 4060 16GB)才能获得可接受的速度。
    • 部署工具:使用OllamaLM Studio来管理和运行本地模型最为方便。它们提供了简单的 API,Meetily 的后端可以直接调用。

6.4 自定义与二次开发

Meetily 是开源项目,你可以根据团队需求进行定制。

  1. 修改提示词 (Prompt):找到后端代码中调用 LLM 生成摘要和行动项的部分,修改prompt模板,使其更符合你们公司的会议文化(例如,强制要求每个行动项必须有截止日期)。
  2. 集成内部系统:修改后端 API,在会议创建或行动项生成时,自动在你们的项目管理工具(如 Jira, Trello)中创建任务。
  3. 增加新的导出格式:开发新功能,支持将会议记录一键导出为符合公司规范的 Word 或 PDF 报告。

7. 总结

通过本文的深度拆解,我们从 Meetily 的核心价值、部署实战、功能原理、问题排查到生产级实践,完成了一次完整的探索。Meetily 为我们提供了一个优秀的范本:如何将强大的 AI 能力与严格的数据隐私控制相结合,打造真正属于自己或团队的智能工具。

关键收获

  1. 隐私与智能可兼得:通过本地部署和开源模型,我们不再需要在“便利性”和“安全性”之间做妥协。
  2. Docker 化部署是捷径:它极大简化了复杂应用(包含多个微服务)的部署和依赖管理流程。
  3. AI 工作流是核心:Meetily 的价值链是“录音 → 转写 → AI 分析 → 结构化知识 → 搜索”,这个自动化流程是提升效率的关键。
  4. 开源意味着自由:你可以审计代码、自定义功能、集成内部系统,让工具完全适配你的业务流程。

下一步行动建议

  1. 动手部署:在你的开发机或一台内部服务器上,按照本文的步骤尝试部署一个 Meetily 实例。
  2. 体验本地 AI:尝试配置 Ollama 和一个轻量级模型(如Phi-2),感受完全离线的 AI 会议摘要生成。
  3. 思考定制化:观察你的团队如何使用它,思考最需要定制的一两个功能点(比如特定的报告格式、与 Slack 的联动)。

会议记录不应是散落各处的碎片,而应是可检索、可分析、安全可控的团队知识资产。Meetily 为我们打开了这扇门,剩下的就是根据实际需求,去打磨和运用这件利器了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询