
Alex 最早是从一部 100 元的二手电话开始的。
我在金融行业做了十五年,办公桌上一直是 Cisco 电话。拿起听筒,按键,说话,挂机,这套动作做了十几年,手指比脑子还熟。后来换了行业,工作电话大多得在手机上接。手机握在手里,屏幕上找接听键,说两句话手就酸,我一直别扭。
有一天晚上刷闲鱼,我搜出一部 Plantronics Calisto P240,100 元,包邮。我下了单。几天后快递到了,拆开来,听筒的塑料有点发黄,线圈在桌面上弹开一圈,红绿两个键的橡胶面有使用过的痕迹。
就是照片里这部。它用一根 USB 线接电脑,有听筒、数字键和红绿两个电话键。买它的时候,我只想让工作通话回到熟悉的方式。我没想过,它以后会变成我给 AI 派活的入口。
先让这部电话听懂我的按键
P240 插上电脑,声音和按键是两码事。
电脑认得它的麦克风和听筒,系统里也能看到新设备。可我按下绿色键,微信一点反应都没有。在电脑眼里,这只是一个能收音、能出声的外设,绿键和红键的含义,它一无所知。
我先让 Codex 做了一个小工具。电话的按键发出信号,程序在电脑上找到微信、企业微信的接听和挂断按钮,替我点下去。听上去只是把一个按钮接到另一个按钮,做起来要先弄清两件事:这部旧电话按下去到底发出什么信号,电脑上的通话窗口又藏在哪里。
微信这个工具最后只留下一个原型。后来做 Alex,才把 P240 本身的控制一点点理顺。直接读 USB 按键信号,试过,不顺。厂商的 Plantronics Hub 方案,也试过,这回成了。绿键接听,红键挂断,屏幕上跳出通话状态,计时器一秒一秒走起来。
计时器第一次跳出来那天,我拿着听筒,对着空气“喂”了两声,自己先笑了。
那些接口我看不懂,处理它们的程序我也不会写。我的工作很具体:坐在桌前,拿起电话挨个按一遍,再回头告诉 Codex。这个键没反应。那个动作不对。声音出来了,屏幕还没跟上。代码是它改的,好不好用,得我亲手按过才知道。
家里的电脑,能不能接起这通电话
那段时间,我每天都要远程连回家里的电脑用 Codex。文件在那里,做过的东西在那里,前面聊过的工作也都在那里。
远程桌面能解决问题,可每想到一件事,都要先连进去,等画面出来,找到窗口,再一个字一个字敲给它。有时候只是想交代一句“把昨天那份模板的第三页改一下”,光是连接和找窗口,就够打断手头的事了。如果只是交代一项任务,我更想直接开口说。
桌上有一部电话,家里有一台能干活的电脑,把它们接起来的念头,就是这样冒出来的。
后来我刷到一段视频,有人用一部老式电话和 AI 对话。画面很朴素,没有任何新设备。它给了我一个很具体的启发:手里的设备不必新,要紧的是电话另一端能接到什么。
这个助理叫 Alex。我希望它听得懂中文,平时多用英文回答。更实际的要求有三条:它得知道我的文件放在哪里,认得我以前做过的模板,能接着已有的工作往下做。我想用这部电话交代做一份文件、改一段内容、查一份旧资料。说完就去忙别的,等结果好了再回来检查。
先试实时语音,再把声音送进 Codex
最早搭的方案,是另接一个实时语音 API,让电话那头有一个能听会说的 AI,再把具体工作转给 Codex。程序已经写出来了,我还没来得及接上密钥做真人通话测试,就发现这条路要另付 API 费用。
我只是想给自己做个好玩的工具,又已经在用 Codex,不想为了接一部电话再多一笔开销。这条路线就放下了。
接着换成 Codex 桌面版自带的听写功能。办公室的 P240 负责收音,两台电脑通过 Tailscale 连起来,声音传到家里。家里的电脑再用 VB-CABLE 这张虚拟声卡,把声音交给 Codex。Tailscale 管的是两台电脑能互相找到,VB-CABLE 管的是声音能进到正确的软件。我当时对这两个名字毫无概念,是一边做一边认识它们的。
听写版的流程是这样:我拿起听筒说完任务,按红键挂机,家里那边停止听写,把转出来的文字交给 Codex 去做。做完以后,电话回拨过来,用语音告诉我结果。这条路用不着在电话程序里另外配置语音 API 密钥,沿用家里电脑上已经登录好的 Codex。
用了一阵,我又想往 Codex Voice 的实时对话走。只把声音转成文字,总差一点我想要的助理感觉。我希望先说几句,Alex 听明白了,没听明白就问我一句,然后把活接过去。我也不希望非得等整通电话结束,它才知道有任务要做。
程序是 AI 用 C# 帮我做的 Windows 桌面软件,分办公室端和家里端。办公室端管电话、输入和回复,家里端管 Codex 和文件。这个分工是边做边理清的。一开始我连一张系统结构图都画不出来,更别说给它命名分层。
电话没响,我就知道还没做好
接下来碰到的问题,比我最初想象的都具体。
有时声音送过去了,回来的声音却不对。有时电话接通了,Codex 的语音入口还没准备好,我对着听筒说话,那边没有任何回应。我想要的,是像平常打电话那样,响几声就能开口。程序背后却要先处理声卡、会话和窗口,所以又是一轮一轮地调:先让家里那边准备好,再告诉办公室这边可以开始。
我还给它挑了铃声。来电用《24小时》里那种座机铃声,“嘟嘟嘟”的急促节奏,一听就想去接。拨出去的时候用普通电话的回铃音。电话已经接上、Alex 还没准备好的那几秒,回铃音得继续响着,否则听筒里一片安静,人会以为断线了。这些小地方我很在意,因为拿起听筒的第一秒就会碰到。
记得最牢的一次,是 Alex 的文字回复已经写着“准备回拨”,我坐在办公室里等。等了一分钟,两分钟,听筒安安静静地躺在座机上,电话一直没响。
我盯着那部电话看了一会儿,开始往下查。
问题出在一个我原先完全不知道的地方。家里的电脑当时停在 Windows 远程桌面会话里,声卡环境被系统换成了“远程音频”。Codex Voice 需要的 VB-CABLE 设备,在那次会话里根本没有出现,回拨在开始之前就卡住了。
这种时候我不用懂代码,也能判断没有完成:电话该响,没响。这一轮修改就得继续往下找原因,不能停在一条写得很好听的回复上。
后来加了声卡检查,也把“收到任务”“正在处理”“发送失败”“没有收到结果”这几种提示重新调整了一遍。写这篇文章的时候,电话和自动回拨还有需要继续磨合的地方。已经做出来的界面和功能,我每天在用。没有接通的那一段,我也得承认它没有接通。
我还想让它认得昨天的工作
另一个麻烦是,消息到了家里,却进了错误的对话。
我要找的是 Alex。有一次办公室发出的任务,却落进了开发这个程序的聊天窗口。消息确实送到了,接收它的那个对话却没有我预期的上下文。昨天改过哪份文件,这次要接着做什么,又得从头解释一遍。对一个助理来说,每天早上都像第一天上班。
所以后来我一直在修固定对话和任务路由。我想留下一个认识这些工作的 Alex:电话负责交代事情,具体任务交给已有的工作对话。声音、文字、文件,都要落在同一份工作上。
再往后我加了文字聊天。有些要求很长,里面有人名、数字,或者要贴一段内容,打字比在电话里来回念方便得多。九月底有一次使用,我已经能从办公室端查到资料,回复的速度也还算快。只是任务走到了哪一步、结果怎么回来,仍然碰到过需要修的地方。
接着加了任务排队和重试。家里的 Codex 正忙着的时候,新的要求要先留住,等它空下来再做。做完的回复要传回办公室,不能只在家里的电脑上生成一个文件,办公室这边却什么也收不到。
办公室的窗口,我还让它改成了《黑客帝国》那种黑底绿字的终端。到了我这个年纪,对那种画面多少有点感情。
第一版看着很热闹,用起来却全是多余的边框和状态提示。我让 Codex 继续改:输入的地方要显眼,字要能放大,之前输过的内容能翻出来,常用命令有提示。右下角只要提醒我 Alex 回话了就够了,没必要把整段回复塞进通知里。
这些要求没有哪一条很宏大。用着不顺手,我就想再改一下。Alex 就是这样,一点一点,从一个接电话的程序,长成了我能随时交代工作的入口。
我开始给自己做软件
以前我以为,要做这样的东西,至少得先会编程。我没有技术背景,也没学过写代码。到现在,这套程序我仍然写不出来。但我已经能参与它怎么做:把自己为什么需要说清楚,先试一个小版本,把不对的地方找出来,再跟 AI 一轮一轮地改。
这个过程没有轻松到一句话就做完。声卡会出毛病,消息会送错地方,改完一版又得重试。有时连错误提示我都看不明白,就原样贴给 Codex,让它去查。软件到底解没解决我的问题,这一部分的判断,一直是我在做。
这也改变了我看 AI 的方式。我越来越相信,未来它会带来许多新的需求和新的工作。很多普通人原本有想法,觉得请人开发太贵,自己学编程又太远,念头一转就算了。现在,这些小需求开始有机会被做出来。
拿我自己来说,买电话的时候,只想换一种方式接工作电话。后来想连回家里,想用语音交代任务,想接着昨天的文件往下做,想让它做完叫我一声。前一个要求有了着落,后一个要求就变得具体了。
把需求想明白,了解工作本身,试出哪里不好用,决定结果对不对,这些仍然需要人。能写代码的 AI,让我这样的人也能走进这个过程。我并不觉得人的工作会因此越来越少。我看到的是,从前没有条件动手的事情,现在有人愿意去做了。
我现在还不是程序员,但已经可以认真地要求自己的工具,多替我做一点我需要的事。
桌上的 P240,还是那部花 100 元买来的旧电话。Alex 还会继续改下去,而我已经不再觉得,为自己做一点软件,是一件离自己很远的事情。

