☰
如何用Claude Code构建语音控制自动构建的AI助手TARS
2026/10/21 1:38:37 网站建设 项目流程

如果你已经习惯了在对话框里问 AI “这段代码哪里有问题”,那最近半年最值得关注的变量,可能不是对话效果又好了多少,而是 AI 开始从“给你建议”切换到“替你执行”。Claude Code 就是这条路线里走得比较靠前的一类工具:它跑在你的终端里,能自己读文件、改代码、执行命令、跑测试,再把结果用自然语言汇报回来。换句话说,它不再是一个“回答者”,而更像一个“执行者”。

这篇文章的起点是一个演示项目:把一个具备语音对话能力、能在屏幕上展示执行过程、还能自动构建应用的 AI 开发助手,命名为 TARS(致敬《星际穿越》里的那个靠谱机器人)。我们会把 Claude Code 作为 TARS 的执行内核,给它接上语音识别和语音合成,再让它接手一个完整的开发任务。读完以后,你能得到一个可以自己扩展的最小框架,也能理解这类工具真实的强项、边界和风险。

1. “AI 员工”到底解决什么问题

很多人第一次接触 Claude Code,会把它当作“终端里的 ChatGPT”。这个理解不能说错,但会低估它。ChatGPT 这类聊天工具的核心流程是:你提问,它回答,你复制代码,自己粘到项目里,自己跑,自己修。整个闭环里,AI 只承担了“出主意”这一环,剩下的体力活还是你的。

Claude Code 则把闭环往前推了一大步:它可以直接在终端里执行命令,可以读取项目文件,可以修改代码,可以运行测试,可以基于报错继续排查。它不再只输出“建议”,而是直接产出“结果”。AI 员工这个词,本质指的就是这种从“顾问”到“执行者”的转变。

传统开发流程里,一个需求从提出到落地,大概要经过拆解需求、搜索方案、写代码、跑构建、修 bug、回归验证这几个环节。前几步依赖经验和检索能力,后几步依赖机械执行能力。Claude Code 真正降低的是后几步的成本:那些“我已经知道怎么改,但就是要花时间改”的活,可以交给它。

这篇文章最值得读的人有三类:

  • 已经知道 Claude Code 能做什么,但只在命令行里玩过“问答式”交互,想把它接入真实开发流程的人。
  • 想做一个能听懂自然语言、能自动执行构建任务的内部工具或团队机器人的人。
  • 想弄清楚这类 AI Agent 的安全边界、权限控制、常见坑和工程化落地方式的人。

如果你只是想找一个“更聪明的代码补全插件”,Claude Code 不一定是最合适的选择。它的价值不在“补全”,而在“执行”。

2. Claude Code 的核心概念与适用场景

2.1 Claude Code 是什么

Claude Code 是 Anthropic 推出的终端编程 Agent。它最典型的交互方式是:你在终端里启动它,给它一个自然语言目标,它会自己规划步骤,调用工具完成操作,然后汇报结果。

和普通 CLI 工具不同,Claude Code 不是一个“执行单一命令”的程序,而是一个“会持续判断下一步做什么”的 Agent。它可以在你的授权范围内读取工程结构、搜索关键字、修改文件、执行 shell 命令,并根据命令输出决定下一步动作。

这类工具之所以最近讨论度高,是因为它把一个长期存在的需求真正产品化了:让 AI 从“理解代码”变成“操作系统”。

2.2 几个容易混淆的概念

使用 Claude Code 之前,有几个概念值得先理清楚。

Agent:指的是能够自主规划并调用工具完成任务的人工智能程序。Claude Code 本身就是一个 Agent 形态的产品,它不满足于一次性生成答案,而是会循环执行“观察结果 → 决策 → 行动”。

Skill(技能):可以理解为给 Agent 配置的“可复用工作流”。比如“发布版本”“跑全量测试”“生成数据库迁移脚本”,这些如果每次都要重新写一遍提示词,会很累。把类似流程固化为一个 Skill,Agent 以后遇到对应场景就按标准流程执行。

MCP(Model Context Protocol):Anthropic 提出的开放协议,用于让 AI 应用接入外部工具和数据源。通过 MCP,Claude Code 可以连接内部 API、数据库、文件系统、浏览器工具等。MCP 的价值在于统一了“AI 如何调用外部工具”的接口。

2.3 和 Codex、Cursor 这类工具有什么差别

很多读者会拿 Claude Code 和 OpenAI Codex、Cursor 对比。它们都属于 AI 编程助手,但侧重点不一样。

对比维度Claude CodeOpenAI CodexCursor
主要形态终端 CLI,也有桌面/IDE 集成终端 CLI,也有编辑器扩展AI 代码编辑器
模型Anthropic Claude 系列OpenAI 模型可切换多种模型
执行能力在终端执行命令、读写文件在终端执行命令、读写文件以编辑器交互为主
适合场景自动化任务、构建流程、CI自动化任务、构建流程日常编码、代码理解、重构
扩展能力Skill、MCP、环境变量配置依赖 OpenAI 生态编辑器生态和插件

从实际使用感受看,Claude Code 和 Codex 更接近:它们都强调“在终端里干活”,而不是“在编辑器里给你提建议”。Cursor 的优势在于把 AI 无缝嵌进了编辑器的日常操作里,但对“自动执行构建流程”这类任务,它并不是为这个场景设计的。

2.4 它适合做什么,不适合做什么

从目前的实践看,Claude Code 很适合这类任务:

  • 生成项目骨架,比如创建一个 Flask 或 Spring Boot 应用。
  • 在已有项目中实现某个明确的功能,并补齐测试。
  • 根据报错日志自动修 bug,反复运行验证。
  • 执行构建、生成代码、重构、批量替换。
  • 在 CI 流程里作为自动化开发工具,接收任务并提交代码。

它不适合的任务也很明显:

  • 需要复杂人工审批的正式发布流程,尤其是生产环境部署。
  • 需求本身模糊、需要大量业务判断的项目。
  • 需要访问内部敏感数据或生产数据库的场景。
  • 完全无人值守的“给个需求,自动做完”的幻想场景。

Claude Code 是一个执行力很强的辅助者,但还不是一个能独立承担业务责任的员工。这个边界,实操的时候越早认清越好。

3. 环境准备与安装

开始搭建 TARS 之前,先准备一个干净的 Claude Code 环境。下面这些步骤不依赖具体操作系统,Windows、macOS、Linux 都适用,差异主要在 PATH 配置和终端类型上。

3.1 安装前提

Claude Code 基于 Node.js 运行,所以第一步是确认本机有可用的 Node 环境。建议使用最新的 LTS 版本,避免老版本产生的兼容性问题。

node -v npm -v

如果命令输出版本号,说明 Node.js 环境正常。如果提示command not found,需要先安装 Node.js,再继续后面的步骤。

3.2 安装 Claude Code

通过 npm 全局安装@anthropic-ai/claude-code:

npm install -g @anthropic-ai/claude-code

安装完成后,验证版本:

claude --version

如果能看到版本号,说明安装成功。如果报command not found,最可能的原因是 npm 全局 bin 目录没有加入系统 PATH。

3.3 认证与登录

Claude Code 是连接 Anthropic 模型服务的客户端,使用前必须通过认证。常见认证方式有三种:

第一种,直接运行claude,按提示完成交互式登录。这种方式适合个人开发环境。

第二种,使用 API Key。在服务器、CI 或自动化脚本里,交互式登录不方便,建议用环境变量。

export ANTHROPIC_API_KEY="你的API Key"

设置后运行:

claude -p "你好,请用一句话介绍你自己"

-p表示 print 模式,也就是非交互模式。它把 prompt 作为参数传入,执行完直接输出结果,适合被脚本调用。

第三种,企业 SSO 登录。如果你的组织统一管理账号,需要联系管理员开通权限,并按企业文档完成认证。

这里要特别提醒:很多开发者在安装这一步遇到问题,并不是因为代码写错,而是账号或网络环境不在服务支持范围内。如果你运行claude时看到区域可用性相关提示,应该先确认自己的账号和网络环境是否符合官方支持条件,通过合规渠道解决,而不是用非官方方式绕过限制。

3.4 在 VSCode 中使用 Claude Code

VSCode 集成是很多国内开发者关心的点。实际使用中,最简单的做法其实是在 VSCode 的终端里直接运行claude,让 Claude Code 使用当前打开的文件夹作为工作目录。

如果你希望看到 Agent 修改文件的 diff 过程,可以配合 Git 的变更面板观察。Claude Code 每改一个文件,VSCode 的源代码管理面板都会显示变更;这样你不需要盯着终端,也能“看见”它在屏幕上的操作轨迹。这是很多团队实际采用的观察方式,比黑盒执行要安全得多。

4. 模型配置与第三方兼容接口

安装完成只是第一步,真正影响使用体验的是模型配置。这里经常出现两个问题:一是模型名配置错误,二是想接第三方模型但协议不兼容。

4.1 通过环境变量控制模型

Claude Code 支持用环境变量指定默认模型。常见的是:

export ANTHROPIC_MODEL="你的模型ID" export ANTHROPIC_BASE_URL="https://api.anthropic.com"

ANTHROPIC_MODEL指定默认使用的模型。ANTHROPIC_BASE_URL指定 API 端点,一般不需要修改,只有接第三方兼容服务时才需要动它。

模型 ID 一定要填当前版本认识的名称,否则启动时会报类似这样的错误:

your-model-name is not a model this version of claude code recognizes

遇到这个错误,第一件事不是查代码,而是检查ANTHROPIC_MODEL的拼写和这个版本支持的模型列表。官方支持的模型 ID 以官方文档为准,不要凭记忆写。

4.2 接第三方模型的判断原则

网上经常看到“把 Claude Code 接入 DeepSeek”这类教程。这件事能不能做,取决于一个重要原则:Claude Code 依赖 Anthropic Messages API 的语义,第三方模型必须提供一个“能兼容这个协议”的端点,或者有一个适配层把请求转成自己模型能理解的形式。

如果你的内部网关或第三方供应商提供了兼容端点,可以设置:

export ANTHROPIC_BASE_URL="你的兼容API地址" export ANTHROPIC_API_KEY="你的API Key" export ANTHROPIC_MODEL="对方支持的模型名"

然后运行一个最简单的请求验证:

claude -p "你好"

如果返回了正常回答,说明协议兼容;如果卡住、报错或返回异常,说明该端点并不完全兼容 Anthropic Messages API,需要换方案。

这里给一个更稳妥的建议:生产项目优先使用官方模型和官方 API,第三方接入作为技术验证可以,但要充分评估稳定性、隐私和成本。不要因为“看起来很酷”就把核心开发流程押在一个不稳定的兼容层上。

4.3 配置管理的工程规范

模型配置涉及 API Key、模型名、端点地址,这些内容不应该散落在团队成员的本地环境里。

推荐的做法是:

  • 项目级配置用.claude/settings.json这类文件固化,提交到仓库,保证团队成员行为一致。
  • API Key 一律通过环境变量或密钥管理服务注入,绝不写进代码仓库。
  • 如果团队经常切换不同模型供应商,可以用社区常见的配置切换工具,本质上它们就是把不同环境变量组合管理起来,但使用时要注意工具本身的安全性和维护状态。

5. TARS 架构设计:语音、屏幕与自动构建

现在进入正题。我们要把 Claude Code 升级成一个具备三种能力的 AI 员工 TARS。

“AI 员工的三种能力”分别对应三个模块:

  • 语音对话:让用户能“说”任务,TARS 能“答”结果。
  • 屏幕接管:让开发者能看到 TARS 正在执行什么,以及必要的时候让 TARS 操作浏览器、打开页面、截图验证。
  • 自动构建应用:让 TARS 根据自然语言指令直接生成代码、安装依赖、运行测试。

整体架构可以用下面这张图理解:

麦克风/键盘 ↓ 语音识别(Vosk / Whisper 等) ↓ 指令文本 ↓ [TARS 调度器] → Claude Code CLI(claude -p) ↓ ↓ TTS 语音播报 执行命令/读写文件/运行测试 ↓ 开发者屏幕(通过终端、VSCode、浏览器观察执行过程)

这个架构的核心是 Claude Code。语音识别负责把人类说话变成文本,调度器负责把文本交给 Claude Code,Claude Code 负责把自然语言变成真实操作,TTS 负责把结果念给用户听,屏幕观察则让整个过程可审计、可干预。

关于“接管屏幕”,这里要澄清一个容易误会的点:Claude Code 本身并不像一个远程控制软件那样直接拖动你的鼠标。它更多是通过执行命令、读写文件来“操作电脑”。如果任务需要操作浏览器,比如打开本地页面、点击按钮、截图验证,那就需要额外接入浏览器自动化工具,这属于广义的“屏幕接管”,我们会在后面的自动构建部分演示。

设计的核心原则是:语音只负责“输入”,真正干活的是 Claude Code。不要把语音识别和 Claude Code 混在一起,它们解耦后,任何一个环节都可以单独替换。

6. 语音对话模块实现

语音对话是 TARS 最外层的交互体验。这里我用 Python 实现一个最小闭环:录音 → 语音识别 → 调用 Claude Code → 语音播报。

6.1 技术选型

语音识别用 Vosk,它是一个支持离线的语音识别工具,有中文模型,安装简单,不用把音频上传到第三方服务,更可控。语音合成用 pyttsx3,它是本地 TTS 引擎,离线可用,中文支持取决于系统是否安装了中文语音包。

如果你已经有公司内部的语音服务,也可以把这一段替换成内部 API,架构不变。

6.2 安装依赖

pip install vosk sounddevice pyttsx3

Vosk 的中文模型需要单独下载。把模型解压到model/zh-cn目录,代码会从那里加载。

6.3 语音输入模块

文件路径:tars/voice_input.py

import json import queue import time import sounddevice as sd from vosk import Model, KaldiRecognizer MODEL_PATH = "model/zh-cn" SAMPLE_RATE = 16000 model = Model(MODEL_PATH) recognizer = KaldiRecognizer(model, SAMPLE_RATE) audio_queue = queue.Queue() def callback(indata, frames, time_info, status): if status: print(f"录音状态异常: {status}") audio_queue.put(bytes(indata)) def listen(duration: int = 5) -> str: """录制一段时间音频并返回识别出的中文文本。""" results = [] with sd.RawInputStream( samplerate=SAMPLE_RATE, blocksize=8000, dtype="int16", channels=1, callback=callback, ): deadline = time.time() + duration while time.time() < deadline: data = audio_queue.get() if recognizer.AcceptWaveform(data): text = json.loads(recognizer.Result()).get("text", "") if text: results.append(text) return "".join(results)

这段代码的思路是:用sounddevice打开麦克风音频流,持续采集 16kHz 的 int16 音频数据;每收到一块数据,就交给 Vosk 识别器处理;当 Vosk 认为一句话已经完整,就会返回识别结果。listen函数最后把识别出的文字拼起来返回。

注意:这里用RawInputStream配合队列是比较典型的实时音频处理写法,能避免一次性录制固定长度带来的静音误判。如果你想把流程简化,也可以用sd.rec录制固定时长,但识别效果会差一些。

6.4 语音输出模块

文件路径:tars/voice_output.py

import pyttsx3 _engine = pyttsx3.init() _engine.setProperty("rate", 180) _engine.setProperty("volume", 0.9) def speak(text: str) -> None: """将文本转为语音并播放。""" _engine.say(text) _engine.runAndWait()

pyttsx3的好处是离线、跨平台。但要注意:如果你的系统没有安装中文语音包,它可能没有声音。这种情况下,可以去系统设置里补装中文语音,或者换成edge-tts这类在线 TTS 服务。

6.5 调度器调用 Claude Code

文件路径:tars/cli_agent.py

import subprocess def ask_claude(prompt: str, timeout: int = 180) -> str: """调用 Claude Code 的非交互模式执行任务并返回结果。""" cmd = ["claude", "-p", prompt, "--output-format", "text"] try: result = subprocess.run( cmd, capture_output=True, text=True, timeout=timeout, encoding="utf-8", ) except subprocess.TimeoutExpired: return "任务执行超时,请拆分指令后重试。" if result.returncode != 0: return f"Claude Code 执行失败:\n{result.stderr}" return result.stdout.strip()

这里用的是claude -p的 print 模式。这个模式专为脚本调用设计:输入一个 prompt,Claude Code 执行完直接输出结果,退出进程。

参数--output-format text让输出保持纯文本,方便直接作为语音播报内容。timeout=180是必须的,否则一个长时间任务可能让整个 TARS 进程一直挂起。

在非交互模式里,Claude Code 能否执行命令,取决于项目目录的权限配置。如果在 print 模式中因为命令审批被卡住,可以先在交互模式里运行一次claude,对常用命令选择允许,或配置项目权限规则。

7. 自动构建与屏幕接管实践

语音模块接好之后,TARS 已经能“听懂话”并把指令交给 Claude Code。接下来要验证它真的能干活:自动构建应用,并在屏幕上呈现执行过程。

7.1 用 Claude Code 生成一个 Flask 应用

我们用一个最小但完整的任务来验证 TARS 的“自动构建”能力:生成一个 Flask Web 应用,包含一个/api/hello接口。

cd ~/projects/tars-demo claude -p "在当前目录创建一个最小 Flask 应用,包含 GET /api/hello 接口,并添加 requirements.txt"

执行完成后,目录里应该会出现类似这样的文件结构:

tars-demo/ ├── app.py └── requirements.txt

app.py的内容大致是一个标准的 Flask 应用定义。requirements.txt里至少包含flask。

这个例子想说明的并不是“Flask 代码怎么写”,而是整个流程发生了变化:过去你要自己新建文件、写代码、创建依赖文件;现在只需要给 Agent 一个自然语言目标,剩下的执行细节由它完成。

7.2 自动安装依赖并运行健康检查

生成代码只完成了一半,更接近真实工作的是“装依赖、跑服务、检查是否正常”。继续给 Claude Code 下指令:

claude -p "安装 requirements.txt 中的依赖,启动应用,然后请求 /api/hello 验证接口是否正常;如果失败,自动修复后重试"

这个任务会让 Claude Code 自动执行类似下面的操作:

  • 创建虚拟环境或直接安装依赖。
  • 后台启动 Flask 应用。
  • 用 curl 请求/api/hello。
  • 根据返回结果判断是否成功。
  • 如果失败,读取报错并修改代码,再次验证。

这就是“自动构建应用”的真实含义:不是生成一段代码就结束,而是把“生成 → 构建 → 验证 → 修复”的循环交给 Agent 执行。

7.3 在屏幕上观察 TARS 的执行过程

很多团队使用 Claude Code 时,最大的心理障碍是“看不见它在干什么”。解决这个问题有几个层次:

最基础的方式,是把 Claude Code 跑在 VSCode 的终端里。每一条 shell 命令都会显示在终端面板中,用户可以实时看到它正在执行什么。

进阶的方式,是配合 Git 的分支和 diff 功能。Claude Code 修改文件后,VSCode 的源代码管理面板会立刻展示变更内容。你可以在它运行结束后逐项审查。

如果需要让 TARS 真正“操作屏幕”,比如打开浏览器、访问页面、截图,可以通过浏览器自动化工具实现。下面是一个 Playwright 的示例,让 TARS 打开本地页面并截图:

文件路径:tars/screen_worker.py

from playwright.sync_api import sync_playwright def capture_screen(url: str, output: str = "tars_screen.png

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询