星颖资源网

 找回密码
 立即注册
查看: 12|回复: 1

仅用半天时间,手搓超火的「Typeless 」同款智能语音输入法

[复制链接]

5万

主题

1万

回帖

18万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
184212
发表于 昨天 19:45 | 显示全部楼层 |阅读模式
仅用半天时间,手搓超火的「Typeless 」同款智能语音输入法

从0开始,半天时间,做了一个完全可用的智能语音转文字智能输入法(MAC版本)取名:Voicetype Mac

最近我一直在使用 Typeless。它最吸引我的地方,并不只是“语音转文字”,而是它能听完一整段表达,再帮我把内容重新梳理一遍。

口述时出现的停顿、重复、语气词、前后颠倒,甚至一段话讲了两三遍,都没有太大关系。结束录音后,AI 会理解整段内容,删除废话、修正表达,并把多个观点整理成清晰的段落或编号列表。

但 Typeless 有会员和使用量限制(会员是12美金/月),于是我产生了一个想法:

能不能参考 Typeless 的核心体验,自己做一款只供个人和几个朋友使用的 Mac 智能语音转文字的输入法?

结果是:我们用了大约半天时间,完成了一个能够实际运行的 macOS 版本。

目前开发完成的MVP,功能测试几乎可以替代原版Typeless了。但是还不能说达到了 Typeless 商业产品的完整度。从录音、转写、AI 整理到自动写入输入框,核心流程已经完整跑通。

一、我真正想做的,不是实时听写

最初,我们也尝试过“边说边出字”。

但测试之后发现,这并不是我真正想要的体验。

因为人在口述时经常会出现这些情况:

“嗯、呃、那个、就是说”等语气词;

同一句话重复两三遍;

说到一半推翻前面的表达;

先说结论,后面又补充原因;

明明讲了几个观点,却没有明确说“第一、第二、第三”;

一句话很长,语序和结构比较混乱。

如果一边说、一边把文字写进输入框,这些问题也会被原样保留下来。它只是把键盘输入换成了语音输入,并没有真正发挥 AI 的价值。

所以,我们重新定义了产品逻辑:

第一次触发快捷键开始录音,录音期间只保存和转写内容,不向输入框写入文字。第二次触发快捷键结束录音,然后让 AI 通读全文、理解原意、重新整理,最后一次性写入终稿。

完整流程是:

开始录音 → 持续收集语音 → 停止录音 → 获得完整转写 → AI 通读整理 → 一次性写入当前输入框

这也是整个产品最核心的设计。

二、产品的整体设计思路

我们把应用暂定名为 VoiceTypeMac,第一版只开发 Mac,不考虑 iPhone、会员、支付、云同步和用户系统。

产品被拆成了几个相互独立的部分。

1. 录音模块

使用 macOS 原生的 AVAudioEngine 采集麦克风音频。

用户第一次按下快捷键后开始录音,第二次触发时停止。它不是长按式对讲,松开快捷键后仍然会继续录音。

这样用户可以连续讲一分钟、两分钟甚至五分钟,中间可以停顿、修改和重复。

2. 语音转文字模块

语音识别和文字整理被设计成两个独立模块。

语音识别只负责尽可能准确地还原用户说了什么,不负责重写内容。

在用户说话过程中,音频会持续发送给转写服务,但转写结果只保存在应用内部,不会实时写进当前输入框。

3. AI 文字整理模块

停止录音后,完整转写才会交给文字模型。

AI 需要完成:

删除无意义的语气词和口头禅;

删除明显重复的内容;

修正语病、语序和前后颠倒;

保留人名、数字、时间、金额和专业术语;

根据语义合理分段;

发现多个并列观点时,自动整理成 1、2、3、4;

有层级关系时,整理出清晰的篇章结构;

不编造用户没有表达过的信息。

我们还提供了“中文转英文”模式。用户可以直接说中文,最终得到一段自然、适合实际沟通的英文,而不是机械的逐字翻译。

4. 自动写入模块

AI 整理完成后,应用需要把终稿自动写入用户当前正在使用的输入框。

这里使用了 macOS 的 Accessibility API:

开始录音时记录当前应用和光标位置;

AI 处理完成后重新激活原来的应用;

尝试直接写入当前输入框;

如果某些应用不支持直接写入,就自动模拟 Command + V;

如果仍然失败,至少把结果保留在剪贴板中,避免内容丢失。

三、我们调用了哪些接口

第一版采用“云端转写+大模型整理”的方案,因为它开发速度快,也更容易先验证核心体验。

AI 文字整理

文字整理支持两个 Provider。

第一种是 OpenAI Responses API:

它负责通读完整转写,根据“智能口述”或“中文转英文”的提示词生成最终内容。

第二种是 DeepSeek Chat Completions API:

DeepSeek 使用非思考模式和较低温度,主要目的是减少等待时间和调用成本。

两个模型并不是同时调用,而是可以在设置中切换。这样既方便比较速度和效果,也避免应用和某一家模型供应商强绑定。

所有模型名称和接口地址都放在独立配置层中,后续可以继续更换模型。

四、我们如何参考 Typeless

我参考的是 Typeless 的产品逻辑和交互方式,没有复制它的品牌、Logo、代码或具体界面资源。

主要参考了以下几个方面。

1. 两段式处理逻辑

不是边说边输出,而是先收集完整表达,再由 AI 统一理解和整理。

这是我们认为 Typeless 最有价值的地方。

2. 全局快捷键

用户不需要先打开 VoiceTypeMac。

只要把光标放在任意应用的输入框中,通过全局快捷键即可开始和停止录音。

目前支持轻触 Control + Command,同时保留 Control + Command + Space 作为兼容性更好的备用组合。

3. 录音悬浮条

录音时会显示一个圆角悬浮条,包括:

取消按钮;

动态声音波形;

完成按钮。

结束录音后,悬浮条会切换成“正在识别”“正在整理”“正在写入”等状态,让用户知道应用正在做什么。

4. 设置、词典和历史记录

我们也参考了 Typeless 的设置结构,加入了:

API Key 设置;

输入模式;

全局快捷键;

麦克风选择;

个人词典;

本地历史记录;

开机启动;

Mock 测试模式。

个人词典可以保存人名、品牌名、产品名和专业术语。同一份词典会同时提供给语音识别、文字整理和中译英模块。

五、半天开发过程中遇到的几个问题

真正花时间的地方,并不是把界面画出来,而是让整个流程在 macOS 上稳定工作。

1. 全局快捷键没有反应

纯修饰键组合很容易被系统辅助功能或其他软件拦截。

我们最后增加了两套机制:

轻触 Control + Command;

Control + Command + Space 作为备用。

应用还会检测快捷键注册失败,并给出明确提示。

2. 辅助功能权限

没有 Accessibility 权限时,应用虽然能生成文字,却无法自动写入其他应用,只能退回剪贴板,让用户手动按 Control + V。

授权后,我们增加了:

记录原目标应用;

恢复目标应用焦点;

Accessibility 直接写入;

模拟粘贴回退。

最终实现了整理完成后自动把文字填入输入框。

3. API 和网络问题

测试过程中遇到过网络连接、VPN 路由以及模型配置错误。

因此我们增加了:

OpenAI 和 DeepSeek 连接测试;

请求超时;

网络错误重试;

明确的错误提示;

Mock Provider。

没有 API Key 时,也可以通过 Mock Provider 测试录音、状态机、悬浮窗和粘贴流程。

4. 悬浮窗外面的灰色矩形

最初虽然把 SwiftUI 背景设成了透明,但悬浮条外面依然有一块矩形灰色底板。

原因不是胶囊颜色,而是 AppKit 窗口和 SwiftUI Hosting View 仍然保留了矩形画布。

最后我们让窗口尺寸直接贴合胶囊内容,并在窗口层做透明和圆角裁切,才真正去掉了外层矩形背景。

六、最终做出了什么

目前 VoiceTypeMac 已经可以完成:

在任意 Mac 应用中触发全局快捷键;

开始整段录音;

录音期间允许停顿、重复和自我修正;

第二次触发后停止录音;

调用 OpenAI 获得完整转写;

使用 OpenAI 或 DeepSeek 整理全文;

删除语气词、重复内容和明显口误;

根据语义自动分段或生成编号列表;

支持中文直接转成自然英文;

将终稿一次性自动写入原输入框;

写入失败时自动保留到剪贴板;

将 API Key 安全保存在 macOS Keychain;

保存本地历史记录和个人词典。

七、半天能做出来,意味着什么

这次最有意思的地方,不是“半天做出了一个 Typeless”,而是一个人借助 AI 编程工具,已经可以在很短时间内完成过去需要多个角色协作的产品原型,关键是自用完全够用,几乎可以替代一个成熟的商业产品。

全程 Codex 5.6sol模型,快速模式,总共消耗 200刀Pro会员周量的8%Token量。

整个过程中,我们通过自然语言不断完成:

产品需求梳理;

技术架构设计;

Swift 项目创建;

API 接入;

权限调试;

快捷键调试;

UI 优化;

自动粘贴;

编译和测试;

应用安装。

这是一次全新的尝试,竟然完全跑通了,希望能够给大家期待借鉴意义。

zsxq_9d8aea588a4577_01.png

zsxq_9d8aea588a4577_02.png

zsxq_9d8aea588a4577_03.png

zsxq_9d8aea588a4577_04.png

zsxq_9d8aea588a4577_05.png

zsxq_9d8aea588a4577_06.png
回复

使用道具 举报

0

主题

2680

回帖

5360

积分

VIP(年费)

积分
5360
发表于 11 小时前 来自手机 | 显示全部楼层
这篇对我最大的启发是:不要把收藏当进步。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信

社群

VIP

AI

顶部

QQ|本站内容来源网友投稿或网络转载,如果有侵权的内容,请联系我们删除。|小黑屋|人人为我,我为人人!| 星颖资源网

GMT+8, 2026-8-25 12:36 , Processed in 0.065598 second(s), 31 queries .

快速回复 返回顶部 返回列表