使用 Whisper 实现语音转文字
最近遇到这样一个需求:从视频中提取音频并将语音转换成文字。在和 Qwen 进行一些讨论后决定使用 openai-whisper 来实现。
最近遇到这样一个需求:从视频中提取音频并将语音转换成文字。在和 Qwen 进行一些讨论后决定使用 openai-whisper 来实现。
Java 语言本身提供了两个 COW 数据结构 CopyOnWriteArrayList 和 CopyOnWriteArraySet,但在某些场景下,比如配置信息热更新、缓存系统数据刷新和一些读多写少且需要保证数据一致性的场景,它们太重了。以 CopyOnWriteArrayList 的 add 方法为例,它在实现时使用了 synchronized 同步代码块。在这些场景下,我们可以使用一种轻量级的实现方式,即原子性地替换引用并利用 volatile 保证其他线程的可见性。
在 Spring Boot 应用中使用 org.springframework.ai:spring-ai-starter-mcp-server-webflux:1.1.0 可以创建一个 MCP 服务器,如果想在一个应用创建多个 MCP 服务器,每个服务器使用不同的配置,比如不同的协议,该怎么实现呢?通过阅读 MCP 相关的源代码发现创建一个 MCP 服务器会向 Spring 容器注册 3 个对象(以异步的 Streamable HTTP 为例):WebFluxStreamableServerTransportProvider、RouterFunction、McpAsyncServer,只要能在应用启动中或启动后从配置文件或数据库读取配置然后创建这些对象,就可以实现动态创建/销毁 MCP 服务器。
创建一个最简 Spring AI 项目,只引入 spring-ai-starter-mcp-server-webmvc 依赖,版本为 1.0.1,spring.ai.mcp.server.type 配置为 SYNC,然后定义一个 MCP 工具,准备工作就完成了
1 | @Service |
后续分析只关注与工具调用相关的源码。
在这篇文章中只介绍在 Windows 下使用 Docker 封印 EasyConnect 的操作步骤。我们会使用到 4 个软件:Docker Desktop、VNC Viewer、Clash for Windows、Wintun 和 1 个镜像:docker-easyconnect。
在 VirtualBox 上安装 Debian 系统还是比较简单的,让人感到有点困难的是 VirtualBox 的网络配置。以下是 Virtual Networking 关于网络模式的一个概览
比较省事儿的做法是使用桥接模式,这会在宿主机所在的网络加入一台电脑,在有的情况下这不是我们期望的,比如在公司网络中。我们的需求有两点,一是虚拟电脑能够访问外部网络,二是宿主机和虚拟电脑能够相互访问。从上面的网络模式概览中发现 NAT 和 Host-Only 模式的组合正好可以满足我们的需求。
在这篇文章中我们将从零开始在 Windows 上安装 VirtualBox,然后在 VirtualBox 上安装 Debian 系统。安装完成后会创建两个用户
| 用户 | 密码 | 备注 |
|---|---|---|
| root | 123456 | 超级用户,权限最大 |
| acomma | 123456 | 普通用户,日常使用 |
下面让我们开始整个安装与配置过程。