链接: https://github.com/Zackriya-Solutions/meeting-minutes

在这里插入图片描述

docs:会议纪要管理系统

本项目是一个专门用于**处理会议记录**的后端系统
系统接收会议文本内容,利用先进的AI模型自动识别关键信息,包括行动项决策内容以及截止期限
处理结果将存入数据库并格式化为清晰的结构化的摘要报告。系统整合了*音频转文字*工具链,并提供自动化部署脚本实现后端服务的快速搭建与运行。

系统架构

在这里插入图片描述
结构化处理会议内容后,即可通过mcp协议 传回llm了

章节目录

  1. 后端API网关
  2. API文档
  3. 摘要数据结构(Pydantic模型)
  4. 文本处理逻辑
  5. AI模型交互层(Pydantic-AI代理)
  6. 数据库管理
  7. Whisper语音转写服务
  8. 后端服务管理脚本

Meetily AI会议助手配置指南

Meetily是一款本地化AI会议助手,支持实时音频采集语音转写智能摘要生成,具备以下核心优势:

  • 🔒 隐私优先:所有处理在本地设备完成
  • 💰 经济高效:采用开源AI模型替代付费API
  • 🛠️ 灵活部署:支持Windows/macOS双平台离线运行
  • 🧠 智能分析:内置知识图谱实现语义检索

二、系统架构

在这里插入图片描述

核心组件

  1. 音频采集服务

    • Rust/Python双栈实现
    • 支持麦克风/系统音频双通道采集
  2. 转录引擎

    • 基于Whisper.cpp本地引擎
    • 支持GPU加速(tiny->large-v3多尺寸模型)
  3. LLM编排器

    • 统一接口适配多模型提供商
    • 自动分块重叠处理(默认分块4K/重叠1K)

三、安装部署

先决条件

  • Node.js 18+
  • Python 3.10+
  • FFmpeg
  • Rust 1.65+(可选特性)
  • Cmake 3.22+

Windows部署

前端安装
# 方式1:EXE安装(推荐)
meetily-frontend_0.0.4_x64-setup.exe# 方式2:MSI安装
meetily-frontend_0.0.4_x64_en-US.msi# 安全警告处理
右键安装包 > 属性 > 勾选"解除锁定"
后端部署
git clone https://github.com/Zackriya-Solutions/meeting-minutes
cd meeting-minutes/backend# 手动部署
.\build_whisper.cmd
.\start_with_output.ps1# Docker部署
.\docker-build.bat

在这里插入图片描述
在这里插入图片描述


四、模型配置

Whisper模型选择

模型类型适用场景示例型号
标准模型平衡精度与速度small, medium
英语优化纯英文环境加速small.en, medium.en
量化模型存储空间受限tiny-q5_1, base-q5_1
高级模型专业场景需求large-v3-turbo
# 模型下载命令
meetily-download-model small

五、LLM集成

在这里插入图片描述

配置要点

  1. backend/config.yaml中设置API密钥
  2. 启用多模型回退机制
  3. 验证函数调用支持:
    curl http://localhost:5167/validate-llm
    

六、故障排除

后端问题

# 端口占用检查
lsof -i :8178 && lsof -i :5167# FFmpeg验证
ffmpeg -version | grep 'configuration'# 日志查看
tail -f $(brew --prefix)/var/log/meetily-backend.log

前端问题

# 连接测试
nc -zv localhost 5167# 权限重置
xattr -cr /Applications/meetily-frontend.app

七、开发指南

代码结构

meeting-minutes/
├── frontend/          # Tauri+Next.js前端
├── backend/           # FastAPI后端
│   ├── whisper-server-package/
│   └── transcript_processor.py
└── docker-build.bat   # 跨平台构建脚本

贡献流程

  1. Fork项目仓库
  2. 创建特性分支
  3. 提交PR时包含:
    • 测试用例
    • API变更文档
    • 类型注解说明

八、扩展配置

知识图谱启用

# config.yaml
knowledge_graph:enable: truestorage_path: /var/meetily/kgindexing_interval: 300 # 秒

Obsidian集成

  1. 安装社区插件Meetily Bridge
  2. 配置同步路径:
    {"vault_path": "/Users/<username>/Documents/Obsidian","sync_interval": 600
    }
    

提示:完整开发文档可通过meetily-docs --web启动本地文档服务器查看

本教程持续更新,建议通过brew upgrade meetily获取最新版本。


第一章:后端API网关

欢迎来到meeting-minutes后端部分的首个章节!

我们将深入探索该项目的后台运作机制。后端如同系统的"大脑",承担着处理会议转录生成行动项数据存储等核心任务。

本章将聚焦系统的入口组件——后端API网关

API网关解决的问题

想象我们身处大型企业总部,访客需要办理各类事务:会面、快递、求职、设备维护等。所有流程都始于前台接待,其核心价值在于:

  1. 作为唯一入口点无需知晓内部办公室分布
  2. 精准理解需求并引导至对应部门
  3. 高效处理登记、签收等标准化流程

meeting-minutes系统中,后端服务器如同企业大楼,前端应用(网页/桌面端)则是需要服务的访客。

前端需要与后端进行多种交互:

  • 提交新会议转录文本
  • 获取处理完成的会议摘要
  • 查询历史会议记录
  • 保存用户配置参数

若无统一入口,前端将不知如何定向请求。

这正是后端API网关的价值所在——它如同数字前台,接收所有前端请求并路由至对应处理模块


API网关的核心职能

该组件承担四大核心角色:
在这里插入图片描述

技术实现基于Python的FastAPI框架,通过定义端点(endpoints)提供服务接入

实战案例:转录处理流程

以前端提交会议转录为例,演示网关工作流程。根据API文档,处理端点地址为/process-transcript,采用POST方法。

可通过curl命令模拟请求:

curl -X POST \http://localhost:5167/process-transcript \-H "Content-Type: application/json" \-d '{"text": "本次会议讨论季度目标...","model": "claude","model_name": "claude-3-5-sonnet-latest","meeting_id": "dummy-123"
}'

参数解析:

  • -X POST:指定POST请求方法
  • http://localhost:5167/process-transcript:网关地址与端点路径
  • -H:声明JSON数据格式
  • -d:传输的JSON有效载荷

后端代码解析

查看backend/app/main.py中的网关实现:

1. FastAPI应用初始化

from fastapi import FastAPIapp = FastAPI(title="会议摘要生成API",description="处理与生成会议转录摘要的接口服务",version="1.0.0"
)

2. 数据模型定义

from pydantic import BaseModelclass TranscriptRequest(BaseModel):text: str  # 转录文本model: str  # AI模型类型model_name: str  # 具体模型版本meeting_id: str  # 会议唯一标识chunk_size: int | None = 5000  # 文本分块大小overlap: int | None = 1000  # 分块重叠区间

3. 端点逻辑实现

@app.post("/process-transcript")
async def process_transcript_api(transcript: TranscriptRequest, background_tasks: BackgroundTasks
):try:# 创建处理记录process_id = await db.create_process(transcript.meeting_id)# 启动后台任务background_tasks.add_task(process_transcript_background,process_id,transcript)# 立即返回响应return JSONResponse({"message": "处理任务已启动","process_id": process_id})except Exception as e:raise HTTPException(status_code=500, detail=str(e))

4. 后台任务处理

async def process_transcript_background(process_id: str, transcript: TranscriptRequest):"""模拟异步处理任务"""await asyncio.sleep(5)  # 模拟AI处理耗时await db.update_process(process_id, status="completed",result='{"MeetingName": "测试会议", "SectionSummary": {...}}')

系统交互流程图

在这里插入图片描述

总结

后端API网关作为系统的神经中枢,主要承担:

  1. 统一接入聚合所有服务端点
  2. 流量调度智能路由请求
  3. 异步处理解耦耗时操作
  4. 状态管理:维护处理生命周期
  5. 异常处理统一错误响应机制

通过FastAPI的异步特性后台任务管理,实现了高并发下的请求吞吐与资源优化。

了解端点功能后,如何掌握完整的API规范

下一章将详解API文档生成与管理机制。

第二章:API文档体系


第二章:API文档体系

在第一章:后端API网关中,我们了解到API网关是后端系统的入口枢纽,如同企业大楼的前台接待处。

本章将揭示如何通过API文档体系,清晰定义这个"数字前台"的服务目录

API文档的价值定位

假设我们正在构建会议纪要系统的前端界面,需要向后端提交转录文本

此时必须明确以下问题:

  • 请求地址是/submit还是/process-transcript
  • 应该使用GET还是POST方法?
  • 请求体需要包含哪些字段?采用JSON还是XML格式?
  • 响应数据包含处理ID还是直接返回摘要?

API文档正是解决这些疑问的开发者手册定义了前后端交互的契约规范

其核心作用如同餐厅菜单:
在这里插入图片描述

API文档要素

完整的API文档应包含:

要素类别说明示例
服务端点接口访问路径/process-transcript
HTTP方法请求类型(POST/GET等)POST
请求格式数据结构与必填字段JSON包含text/model等字段
响应格式返回数据结构与状态码200成功,202处理中,404未找到
鉴权方式身份验证机制本项目暂无需鉴权

项目文档实现方式

本项目采用双轨制文档体系

1. 静态文档文件(API_DOCUMENTATION.md)

位于后端目录的Markdown文件,提供完整的配置说明:

# Meetily API 文档## 基础配置
```http
http://localhost:5167

端点说明

1. 处理转录文本

端点路径/process-transcript
请求方法:POST
内容类型application/json

请求体示例
{"text": "会议讨论三季度目标...","model": "ollama","model_name": "qwen2.5:14b","chunk_size": 40000
}
响应示例
{"process_id": "3fa85f64-5717-4562","message": "处理任务已启动"
}

3. 获取摘要

端点路径/get-summary/{process_id}
请求方法:GET

路径参数
参数类型必填说明
process_id字符串处理任务唯一标识
响应状态码
状态码说明
200摘要生成完成
202处理进行中
404任务ID不存在

2. 动态交互文档(/docs)

通过FastAPI自动生成的Swagger UI界面,访问http://localhost:5167/docs即可获得:

在这里插入图片描述

该文档具备三大特性:

  1. 实时同步:随代码变更自动更新
  2. 交互测试:支持在线发送测试请求
  3. 结构可视化:展示嵌套数据模型

文档生成原理

动态文档的生成基于代码注解:

from fastapi import FastAPI
from pydantic import BaseModelclass TranscriptRequest(BaseModel):"""转录处理请求数据结构"""text: strmodel: str = "claude"app = FastAPI(title="智能会议摘要系统",description="基于AI的会议内容分析服务"
)@app.post("/process-transcript")
async def handle_transcript(req: TranscriptRequest):"""接收转录文本并启动处理流程"""return {"process_id": "123"}

FastAPI通过装饰器@app.post捕获端点信息,结合Pydantic模型定义生成文档结构。

函数文档字符串(docstring)将直接呈现在交互界面上。

总结

  1. 契约定义:API文档明确前后端交互规则
  2. 双轨体系:静态文档提供完整配置说明,动态文档支持实时测试
  3. 自描述性代码即文档,通过类型注解自动生成规范
  4. 开发者友好:降低接入成本,提升协作效率

了解了数据交互规范后,我们将深入第三章:摘要数据结构(Pydantic模型),解析系统核心数据结构的定义校验机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86457.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86457.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86457.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink2.0 配置 historyserver

Flink2.0 配置 historyserver 主要是去修改config.yaml配置文件 主要修改的点有两个 网上很多文档都是写的只配置一个 都是坑啊 historyserver :历史服务器 运行 Flink job 的集群一旦停止(例如yarn模式&#xff0c;程序一旦停止&#xff0c;集群也就关闭了)&#xff0c;只能去…

LLM的训练过程

一般而言&#xff0c;训练一个完整的 LLM 需要经过图1中的三个阶段——Pretrain、SFT 和 RLHF。 1.预训练 Pretrain&#xff0c;即预训练&#xff0c;是训练 LLM 最核心也是工程量最大的第一步。LLM 的预训练和传统预训练模型非常类似&#xff0c;同样是使用海量无监督文本对随…

用 AI + Canvas 生成图形、动画与图表

摘要 随着人工智能&#xff08;AI&#xff09;技术与 Web 可视化的结合&#xff0c;前端开发者可以通过自然语言生成复杂的图表、动画和交互式画布&#xff0c;极大地提升了开发效率和用户体验。本文作为《AI 前端&#xff1a;构建智能化 Web 应用的未来》专栏的第七篇&#…

SQL Server for Linux 如何实现高可用架构

关键词&#xff1a;SQL Server for Linux、高可用、读写分离、动态扩容、Always On、可用性组 &#x1f4cb; 文章目录 前言&#xff1a;Linux上的SQL Server不再是梦高可用架构设计 Always On 可用性组故障转移集群实例 读写分离架构 可用性组读写分离应用层读写分离 动态扩…

【51单片机流水灯控制4种造型,按下1,2,3,4时,数码管对应显示键号,同时流水灯对应四种造型】2022-6-1

缘由流水灯控制4种造型&#xff0c;按下1,2,3,4时&#xff0c;数码管对应显示键号&#xff0c;同时流水灯对应四种造型-编程语言-CSDN问答 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5…

设计模式 - 工厂方法

工厂方法是一种设计模式&#xff0c;对工厂制造方法进行接口规范化&#xff0c;允许子类工厂决定具体知道哪类产品的实例&#xff0c;最终降低系统耦合&#xff0c;使系统的可维护性、可扩展性等得到提升。 一、工厂的多元化与专业化 要实例化对象&#xff0c;就得用到关键词“…

数据应该如何组织,才能让Excel“读懂”?

前言&#xff1a;如果你希望Excel能“读懂”你的数据&#xff0c;就得学会让排序、筛选、数据透视表、函数等这些功能为我们服务。 假设你在和一个非常聪明但有点“死板”的机器人&#xff08;Excel&#xff09;对话&#xff0c;你必须用它能理解的语言来组织信息。 “一维表”…

js防止重复提交的3种解决方案

防止 javascript 重复点击和提交的关键方法有三种&#xff1a;1. 禁用按钮法&#xff0c;点击后立即禁用按钮并更改文本提示&#xff0c;请求完成后恢复&#xff1b;2. 节流函数&#xff08;throttle&#xff09;&#xff0c;限制函数在设定时间间隔内仅执行一次&#xff0c;适…

【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere

银河麒麟作为国家核高基专项的重要成果&#xff0c;国防版凭借其卓越的安全性和可靠性&#xff0c;已成为军工领域的首选操作系统。之前我们在适配麒麟V4国防版的过程中已发现诸多安全性要求&#xff0c;而麒麟V10国防版在安全防护等级上又达到了更高的级别。 本文将主要演示离…

解锁单周期MIPS硬布线:Logisim实战全攻略

目录 一、引言二、MIPS 架构与单周期设计原理2.1 MIPS 架构概述2.2 单周期设计原理剖析 三、Logisim 工具基础3.1 Logisim 简介3.2 基本操作与组件认识 四、单周期 MIPS 硬布线设计步骤4.1 了解 MIPS 指令集4.2 搭建数据通路4.3 设计硬布线控制器4.4 在 Logisim 中创建电路 五、…

7.4.2B+树

B树&#xff1a; (1)每个分支节点最多有m个子树(孩子节点)。 阶&#xff1a;即看当前的B树是几阶B树&#xff0c;就看每个分支节点最多有几个子树&#xff0c;还是看最下一层有几个分叉就是几阶&#xff1f;&#xff1f;&#xff1f; 叶子节点&#xff1a;最下边的一层叫叶子…

MFC获取本机所有IP、局域网所有IP、本机和局域网可连接IP

获取本机所有IP地址 // 获取本机所有IP地址 int CMachine::GetLocalIPs(std::vector<CString>& vIPValue) {//返回IP数量&#xff0c; -1表示获取失败vIPValue.clear();int IpNum 0;//1.初始化wsa WSADATA wsaData;int ret WSAStartup(MAKEWORD(2, 2), &wsaD…

【C语言】贪吃蛇小游戏

1. 所需知识 C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32 API... 2. Win32 API介绍 2.1 Win32 API windows这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外&#xff0c;它同时也是一个很大的服务中心&#xff0c;调用这个服务中心的各种…

PostgreSQL 容器化分布式技术方案

&#x1f4cb; 目录 引言&#xff1a;为什么选择容器化PostgreSQLPostgreSQL容器化基础分布式架构设计高可用实现方案读写分离架构动态扩缩容策略生产环境实践总结与展望 引言&#xff1a;为什么选择容器化PostgreSQL 在数字化转型的浪潮中&#xff0c;数据库作为企业的"…

NV025NV033美光固态闪存NV038NV040

美光固态闪存技术突破与市场布局深度解析 一、技术突破&#xff1a;232层NAND闪存与高密度存储的革新 美光NV系列固态闪存的核心竞争力源于其232层NAND闪存技术&#xff0c;这一技术通过垂直堆叠工艺&#xff0c;将存储单元层层叠加&#xff0c;宛如在指甲盖面积内构建超过20…

Matplotlib 绘图库从入门到精通:Python 数据可视化全解析

引言 在数据科学的世界里&#xff0c;"一图胜千言" 这句话有着深刻的含义。数据可视化不仅是数据分析师展示成果的重要手段&#xff0c;更是数据科学家探索数据、发现规律的强大工具。Matplotlib 作为 Python 生态系统中最著名的数据可视化库&#xff0c;为我们提供…

北斗导航 | 基于CNN-LSTM-PSO算法的接收机自主完好性监测算法

接收机自主完好性监测 原理概述1. 算法架构2. 核心创新点3. 工作流程数学模型1. CNN特征提取2. LSTM时序建模3. PSO优化决策MATLAB完整代码算法优势性能对比应用场景扩展方向原理概述 1. 算法架构 #mermaid-svg-fITV6QrXL1fNYFwG {font-family:"trebuchet ms",verda…

【微信小程序】9、用户拒绝授权地理位置后再次请求授权

1、获取用户当前的地理位置 在本专栏的上一篇文章中讲了如何 获取用户当前的地理位置 首次请求 wx.getLocation API 后&#xff0c;会拉起用户授权界面 但这时用户可能会拒绝授权&#xff0c;当你再次请求 wx.getLocation API 后&#xff0c;没有任何效果。 2、打开设置 用…

嵌入式Linux驱动开发基础-1 hello驱动

1:APP打开的文件在内核中如何表示 1.1 APP 打开文件时&#xff0c;可以得到一个整数&#xff0c;这个整数被称为文件句柄。对于 APP 的每一个文件句柄&#xff0c;在内核里面都有一个“struct file ”与之对应 当我们使用 open 打开文件时&#xff0c;传入的 flags 、 mode…

目标跟踪存在问题以及解决方案

3D 跟踪 一、数据特性引发的跟踪挑战 1. 点云稀疏性与远距离特征缺失 问题表现&#xff1a; 激光雷达点云密度随距离平方衰减&#xff08;如 100 米外车辆点云数不足近距离的 1/10&#xff09;&#xff0c;导致远距离目标几何特征&#xff08;如车轮、车顶轮廓&#xff09;不…