摘要

复盘小智AI语音调度Kimi Code链路的打通过程:20秒暗号测试验明kimi -r续跑带记忆,收件箱循环让窗口常驻,三个Windows MCP坑当天现犯现修;13家分包商评分表三轮语音迭代定稿,附可抄走的避坑清单。

10 月 18 号晚上,我在项目部对着一个巴掌大的小盒子说话:帮我把手头改扩建项目的三季度考核评分表处置一下。盒子里的小智AI 先用语音跟我把需求聊透,转头把任务派给电脑上的 Kimi Code,三轮指令迭代,事办完了,我全程没碰键盘。

小智AI 是基于 ESP32 的开源语音对话整机,百元级,我实购 100 多元,可以自建服务端换大模型。Kimi Code 是月之暗面的命令行 AI 编程工具。中间搭桥的是我自研的 xiaozhi-pc-mcp,一个 MCP 服务,让小智通过 WebSocket 调用我电脑上的工具,公文检索、微信收文件、Kimi Code 派发都走它。MCP 就是给大模型接外部工具的标准协议。

我在高速公路施工单位上班,白天上班,晚上折腾自己的系统。这篇复盘讲两件事:这条动口不动手的链路怎么从基本可用改到真正好用,以及当天现犯现修的三个坑,做 Windows MCP 开发的可以直接抄走避坑。

链路全貌:一句话怎么变成一次开发

整条链路是:我对小智AI 说需求,它用豆包模型跟我语音聊透,再经 xiaozhi-pc-mcp 把任务派给 Kimi Code 的常驻窗口执行,同会话续跑迭代,事办完优雅关窗。

全貌一张图:

本人语音(带打断) → 小智 AI(豆包模型聊清需求)
  → MCP 工具调用(WebSocket → mcp_pipe.py → pc_tools.py)
  → 确定性工具直答(公文搜索/微信收文件)
  → 或 start_kimi_task 起常驻窗口 → Kimi Code 执行
  → send_kimi_instruction 同会话续跑迭代 → stop_kimi_task 收工

注意中间的分叉:公文搜索、微信收文件这类查询,不起大模型会话,函数直接出数;只有真要干活的,才派给 Kimi Code。这个分叉是整条链的省事关键,后面细说。

起因:一个任务跑完,窗口就没了

小智 MCP 服务 10 月 16 号就搭起来了,实测两天,基本可用。但有两个卡顿越来越碍事。

一是 Kimi Code 窗口一个任务跑完就结束,一句话的任务窗口就没了,没法连续开发。二是链路只接了 dev 侧的项目,我手头改扩建项目的活一点够不着。

我给小智下的指令,原话是:

能不能让小智调起这个 Kimi Code 的窗口,并且进行持续的交互?不要直接结束掉。

同一个晚上我还说了一句:一个任务执行完了它就结束了,我需要的是连续持续性的进行开发。症状加期望行为,一句话说全,AI 照着改,零方向纠偏。

我原以为一次性的 kimi -p 够用,问一句答一句挺顺。结果真拿它干活才发现,开发不是问答,是连续推进,窗口一关,上下文全断。

先花 20 秒验机制,再动工

改造的地基是一个假设:Kimi Code 的会话能非交互续跑,还带记忆。假设没验过就动土,整局设计都可能建在沙子上。

我先做了个 20 秒的 CLI 暗号测试:首轮让 Kimi Code 记住 BLUE-OTTER-42 这串暗号,然后用 kimi -r <会话ID> -p 续跑,问它暗号是什么。它答出来了,上下文完整保留,假设成立,我这才动手改代码。

后来整条链跑通,靠的就是 kimi -r 这个机制。一切外部系统驱动 Kimi Code 连续开发的玩法,底座都是它。

改造一:收件箱循环,让窗口常驻

原来的实现是每次 kimi -p 起一个新进程,跑完即退。改造后,PowerShell runner 变成指令收件箱循环:轮询任务收件箱里的指令文件,逐条执行,收到 __STOP__ 才关窗。

首轮 kimi -p 起会话,执行完用 kimi session list --json 捕获会话 ID,后续指令全部 kimi -r 续跑,上下文不丢。MCP 侧新增两个工具:send_kimi_instruction 追加指令,stop_kimi_task 优雅关窗。任务状态三态:running、idle、exited。

从此小智派活不是放一枪就跑,而是开了一个会干活的窗口,我随时可以往里递话。

改造二:改扩建项目接入,能函数出数就不派 agent

第二个卡顿是够不着改扩建项目的活。我的解法是不加 LLM 轮次,直接上确定性工具。

search_gongwen_files 做公文档案关键词检索,档案库按来文单位和年份归档,我拿一个业务关键词实测,命中 11 份。list_wechat_received_files 复用已有的微信采集链,列出某天各群收到的文件,时间、发送人、群、文件名都带,加 refresh=true 还能现场重拉。项目别名挂上之后,起 Kimi 会话可以深度解读公文,提示词限定只读。

为什么不起 LLM 会话?因为检索类查询的答案是确定的,函数直出又快又稳,让大模型转述一遍纯属浪费。能由函数出数就不派 agent,这条原则贯穿整条链。

改造三:一句话,把私聊文件也管起来

当天晚上我又补了一句:

还有一些同事发给我个人的一些信息文件,也给它管起来?

全联系人扫了一遍,近 90 天有 70 人给我发过文件,取发件不少于 5 个的 18 人进白名单。实现上只改了 locate_groups() 一个函数,日报链、文件归档链、小智查询工具三条链路零改动,全部自动兼容,因为三者都走这一个入口。当天就有 5 个人的私聊消息落了盘。

这是 chokepoint 设计的红利:入口收在一个函数上,扩一次,全局受益。

也有毛边:白名单是机器扫的,难免收进我不想收录的人,比如做保险的、供应商。先用着,后面再人工修剪。

改造四:服务没重启,新工具凭空消失

改完工具我去小智里用,发现新工具根本看不到。查了一圈,根因低级别:常驻服务进程跑的还是两天前的旧代码。

清掉两代残留进程树,新代码重启,配开机自启,日志落盘,心跳正常。顺手补了一条规则:改了工具代码必须重启服务。代码坑修起来有技术含量,这种运维坑纯属意识滞后,比代码坑更丢人,也更要命,它让你以为东西坏了,其实新代码根本没上场。

三个坑,全是当天现犯现修

这一节是全文最值钱的。三个坑全是代码写完觉得对、一跑就挂,当天犯当天修:

坑现象根因解法
含中文的 ps1 无 BOM窗口秒退,状态恒 exitedPowerShell 5.1 的 -File 按 GBK 解析 UTF-8 无 BOM 脚本,中文尾字节命中 {} 结构符存成 UTF-8 带 BOM;Edit/Write 重写会丢 BOM,改完必补,Parser 复验
非重入锁自死锁send 工具调用永不返回with _tasks_lock 里调 _find_task,里面又 with _tasks_lock,threading.Lock 不可重入换 RLock
MCP 上下文子进程假死refresh 调用 180 秒超时,同参数直跑 2 秒MCP 服务由 stdio 管道驱动,子进程继承了永不 EOF 的 stdin 管道spawn 一律 stdin=subprocess.DEVNULL

第三个坑的对比最典型:同样的参数,直接跑 2 秒出结果,走 MCP 上下文 180 秒超时,差 90 倍,根因却只是一行 stdin 继承。

BOM 那个坑我还翻了第二次:修好后用 Edit 重写脚本,BOM 又丢了,窗口又秒退。规则当场补上,改完必补 BOM。

共同的教训就一条:改完必须立刻在真实链路实跑。这三个坑全是 E2E 测试一轮一个准抓出来的。连测试脚本自己都有竞态,idle 窗口期误判第二轮已完成,改到第三版用轮询结果标记才稳。测试代码也得当被测对象对待。

实战验收:13 家分包商的评分表走完全链

链路改完当晚就上了实战:手头改扩建项目的三季度考核评分表,13 家分包商评分。

流程是:我在小智里用豆包模型语音聊需求,带打断模式,想到哪说到哪,聊透之后让小智把任务派给 Kimi Code 执行,三轮指令迭代,定稿。

我对这条链的定性,原话是:

链路已经完全打通,而且非常好用……AI 硬件结合软件,是比较成功的一个案例。

一个百元级的小盒子,加上自己写的 MCP 服务,变成了口袋里的开发团队。说需求用嘴,干活的是 Kimi Code,我只管验收。写到这我有点兴奋,也有点恍惚:开发的入口,什么时候搬到嘴边了。

这套链路搬进公司,能省什么

个人用着爽不算数,这套东西搬进施工单位的项目部照样成立。公文检索、收文登记、考核打分处置这类重复文书活,语音聊清需求直接派给 AI 干,人只做确认和验收。本文的实证就是那 13 家分包商的季度评分表,三轮语音迭代定稿,全程没碰键盘。换算逻辑很直白:项目部每多一个会下指令的人,就多一个全天在线的助理,重复活不再占用人的晚上。

FAQ

没有小智硬件,能搭这条链吗?

能。链路的核心是 MCP 服务加 kimi -r 续跑机制,语音只是入口。先在电脑上把工具和续跑跑通,硬件后面再补,百元级的投入。

kimi -r 续跑的上下文能扛多少轮?

我实测到的是同会话第二轮准确应答暗号,三轮指令迭代定稿评分表也没断。更长链路的极限我没压测过,不知道就老实说不知道,你测完可以来评论区交流。

三个坑的解法在别的环境通用吗?

Windows 加 PowerShell 5.1 加 stdio 型 MCP 服务的环境,直接照避:脚本存 UTF-8 带 BOM、锁用 RLock、spawn 子进程加 stdin=subprocess.DEVNULL。其他环境根因可能不同,但改完立刻实跑这条通用。

微信文件采集会不会有隐私问题?

采集的是我自己电脑收到的文件,白名单先机器扫再人工修剪。涉及他人信息的场景,我的原则是只进本地库。细节有边界,评论区聊。


我是野生码农,AI实战派。17年全栈工程师,一人AI公司实践者。打造个人IP内容体系、软件全链路产品产线,拥有百套企业AI方案、200多个岗位Agent;自研知识库、AI数字员工系统,公开实战复盘。

本文所有内容均为本人 AI 实战的过程和结果,经 AI 整理后发布,无任何瞎编虚构内容。

这篇来自《AI员工团队》系列。

关注我,看真的。

野生码农AI实战 · 全网同名

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐