超越语音输入:仅通过说话构建软件

发布: (2026年2月24日 GMT+8 09:40)
14 分钟阅读
原文: Dev.to

Source: Dev.to

TL;DR: Kiro Steering Studio 是一款语音驱动的工具,通过自然对话(而非口述)生成结构化的 Kiro steering 文件。它基于 Amazon Nova 2 Sonic 的双向流媒体技术,将你的语音路由到相应的文件,跟踪未解答的问题,并为你的工作区生成 AI 优化的 Markdown 上下文。本文介绍了它的构建方式、为何它不同于你已经在使用的语音 AI 工具,以及我在此过程中学到的经验。

Source:

语音正成为开发者工具中的一等接口

语音转文本领域在 2026 年迎来爆发,多个产品竞争让打字变得可有可无。有的把它视为更快的文本输入方式,另一些则用它来驱动 结构化、代理式工作流

2026 年第一季度开发者的语音 AI 生态

  • OpenAI – Codex
    语音是受支持的功能,但范围故意保持狭窄。
    官方的 Codex macOS 应用(2026 年 2 月发布)包含语音指令,允许开发者直接在代理界面中说出提示。VS Code 扩展同样支持语音转文本输入指令。在这两种情况下,语音是 提示交付机制:你说出任务,Codex 在隔离的沙箱中执行,并提出 PR。语音界面并未改变交互模型;它仅仅把键盘从循环中移除。

  • Anthropic – Claude
    Anthropic 为通用 Claude 应用(移动端 & 网页端)推出了官方 Voice ModeClaude Code 的语音功能主要基于社区开发的第三方集成。

  • Cursor
    Cursor 2.0 引入了官方语音支持。Voice Mode 让你可以用口头指令控制编辑器及其 AI 功能,例如 “打开文件 app.ts”、 “提取函数” 或 “将此重构为 async/await”。AI 随后生成相应的补丁。这是超越纯粹听写的有意义一步,因为口头指令可以触发多步骤编辑。

  • SuperWhisperWisprFlow
    这两者位于光谱的另一端——通用听写工具,开发者用它们来完成从编写提示到起草文档的所有工作。WisprFlow 以无缝的 “流畅” 体验取胜,自动编辑让听写感觉自然。两者均通过键盘快捷键集成,并在转录方面表现出色。

所有这些工具都验证了同一个洞见:语音比打字更快、更自然。然而,它们都充当 输入机制

当你使用这些工具来构建软件时,仍然需要进行以下认知工作:

  • 将信息结构化为正确的格式
  • 保持术语和约定的一致性
  • 将内容组织成逻辑章节

你可能说话比打字更快,但仍然是在手动编写 markdown 文件。

Kiro 方向文件到底是干什么的

在解释 Kiro Steering Studio 如何工作之前,先了解一下什么是方向文件以及它们为何重要是很有必要的。简而言之,方向文件通过 markdown 文件为 Kiro 提供关于你的工作空间的持久化知识。这样,你不必在每次聊天时都解释你的约定,方向文件可以确保 Kiro 始终遵循你已经建立的模式、库和标准。

Kiro Steering Files

捕获项目上下文的三个核心文件

文件用途
product.md定义 你在构建什么:一句话概述、目标用户、MVP 路径与功能、非目标、成功指标以及领域词汇表。
tech.md定义 如何构建:前端技术栈、后端方案、认证方式、数据存储、IaC、可观测性以及样式指南。
structure.md定义 项目组织:仓库布局、命名约定、导入模式、架构模式以及测试方法。

手动编写这些文件非常繁琐。Kiro 提供了一个“一键生成”功能,可以在你已有成熟代码库的情况下自动生成它们,但在从零开始构建新应用时,这种情况并不存在。

How Steering Studio Is Different

Kiro Steering Studio 将语音视为 结构化知识生成的接口,而不仅仅是简单的转录。与其手动编写 steering 文件,你可以直接说出你的项目。AI 会提出澄清性问题,探查你可能忽略的细节,并 实时 生成结构正确的 steering 文件。对话本身就成为文档。

Conversational Extraction

你可以进行自然的对话,而不是口述预先结构化的内容。例如:

“我正在使用 React、TypeScript 和 Node.js 为内部工程团队构建一个任务管理应用。”

AI 不会仅仅逐字转录,它会提出你可能未考虑的澄清性问题:

  • “你的状态管理方式是什么 — Redux、React Query 还是 Context API?”
  • “你如何处理身份验证?”
  • “你的测试策略是什么?”
  • “身份验证应使用 OAuth 还是魔法链接?”

每个答案都会在对话中不断完善相应的 steering 文件。

Intelligent Routing

AI 能够理解 信息所属位置

  • 提到 “React with TypeScript” 会自动更新 tech.md 中的 frontend 部分。
  • 描述用户旅程会填充 product.md
  • 说明目录结构会更新 structure.md

Active Gap Detection

AI 会追踪缺失的内容。如果你尚未指定前端技术栈或命名约定,它会记录未解决的问题并提示你进行补全。当你 answ(原文内容在此结束;该句故意保留不完整以保持原始材料的完整性).

构建概述

架构分为四个关注点:流式传输会话管理状态引导工具处理

Architecture Diagram: Kiro Steering Studio

NovaSonicClient:双向音频流

我们应用的核心是与 Amazon Bedrock 的实时双向流式传输,具体使用 Nova 2 Sonic —— Amazon 的语音转语音基础模型。

与传统的请求‑响应流程(先录音、发送一次请求、等待响应,然后批量执行工具调用)不同,Nova 2 Sonic 在你说话的同时处理音频,并在对话过程中交叉执行工具。

传统语音 AI 流程

  1. 录制全部语音
  2. 发送完整音频
  3. 等待响应
  4. 执行工具调用
  5. 发送结果
  6. 等待最终响应

双向流式流程

  1. 音频持续流式传输——无需等语音结束
  2. 模型在你仍在说话时就开始响应
  3. 工具调用在对话进行中发生,而不是之后
  4. 结果立即返回;模型继续说话

音频缓冲区会排队(最多 220 个块),并以每批五个块的方式处理,以防止流被压垮。当队列在高压下填满时,旧的块会被丢弃,以保持实时响应性。

客户端通过状态机管理会话生命周期——启动、音频内容、提示、工具结果以及优雅关闭——并跟踪已发送的事件。

工具系统:同步执行,交叉于语音

工具调用不会等到你说完才执行。模型可能在描述你的项目时正好说到需要更新产品引导,便会触发 toolUse 事件,获取结果后继续说话。这通过 toolResult 事件处理器实现:

session.onEvent('toolEnd', async (d: unknown) => {
  const toolData = d as ToolEndData;
  const result = runTool(store, toolData.toolName, toolData.toolUseContent); // Synchronous
  await sonic.sendToolResult(socket.id, toolData.toolUseId, result);          // Send back to model
});

可用工具

工具用途
set_product_steering应用描述、用户旅程、MVP 功能、成功指标
set_tech_steering前端/后端技术栈、认证、数据、基础设施、约束
set_structure_steering仓库布局、命名约定、架构模式
add_open_question记录需要解决的决策
resolve_open_question用文档化决策关闭问题
get_steering_summary检查缺失内容
checkpoint_steering_files持久化到磁盘

每个工具的描述都会引导 AI 生成适合 LLM 处理的要点、精确版本、反模式以及文件用途。描述本身就是关键的“秘密酱料”:

const techDescription = `Write in terse bullet-point format. For each field include:
- Exact versions (e.g., "Next.js 14.2" not "Next.js")
- Key conventions to follow
- What NOT to do (anti-patterns)
- Relevant CLI commands where applicable`;

SteeringStore: 内存状态与原子写入

该存储在内存中维护 steering 状态,并以原子方式写入磁盘。合并模式mergereplace)决定了更新是扩展已有内容还是直接覆盖。会话状态会持久化到 JSON 文件中以便恢复:

{
  "version": 1,
  "updatedAt": "2025-01-26T18:30:00.000Z",
  "product": {
    "appOneLiner": "A task management app for remote teams",
    "targetUsers": "Distributed engineering teams"
  },
  "tech": {
    "frontend": "React with TypeScript",
    "backend": "Node.js with Express"
  }
}

重启服务器后,对话将从上次结束的地方继续。

设计决策

在构建过程中我学到的几点:

对话状态比看上去更难维护

首要的挑战是保持对话状态——跟踪已经讨论了哪些主题、还有哪些未完成,以及存储待后续跟进的开放问题。解决方案是使用 状态文件管理系统 并结合 Zod 验证的工具调用。这使得 AI 能在对话中原子化地更新 steering 文件,同时将会话上下文持久化到 state.json 文件,从而在中断后能够恢复。模式(schemas)负责验证结构;状态文件则捕获连续性。

人类在回答前会(长时间)思考

人类的决策往往会在思考架构和技术栈选择时出现停顿。这些停顿可能导致流式会话超时。我们在会话管理器中加入了 keep‑alive timer,它会定期发送信号,在长时间思考的暂停期间保持 Bedrock 连接,而不会提前终止活跃的对话。

工具描述比模式更重要

早期版本只提供了最小的工具描述,却写了详细的 JSON 模式。AI 能正确调用工具,但生成的内容比较通用。解决办法是把 工具描述当作提示:提供具体的格式指导、优秀输出示例以及明确的反模式。模式仍然用于结构验证,但描述决定了质量。简而言之,优秀的提示工程至关重要!

工具执行必须快速

由于我们的工具是同步执行并与语音交错进行的,慢速工具会导致可听到的停顿。所有七个 steering 工具都设计为子毫秒级执行:在内存中更新状态且不阻塞 I/O。文件持久化通过 checkpoint_steering_files() 完成,模型会在自然的对话间隙调用它。如果你添加自定义工具,请保持其快速,或使用异步方式并立即返回确认。

如果你正在构建语音驱动的应用,欢迎告诉我——在下方留言吧!

想尝试 Kiro Steering Studio 吗?代码已在我们的 GitHub 仓库公开:

https://github.com/aws-samples/sample-kiro-steering-studio?sc_channel=sm&sc_publisher=YOUTUBE&sc_country=global&sc_geo=GLOBAL&sc_outcome=awareness&trkCampaign=78b97721-98e7-4499-a2db-d7f66c04e460&sc_content=2026_developer_campaigns_kiro_NAMER&sc_category=Amazon%20Nova&trk=78b97721-98e7-4499-a2db-d7f66c04e460&linkId=909040901

0 浏览
Back to Blog

相关文章

阅读更多 »

没人想负责的 Systemd Bug

TL;DR:存在一个命名空间 bug,影响 Ubuntu 20.04、22.04 和 24.04 服务器,导致随机服务故障。自 2021 年起已在系统中报告……