TARS实战:用Claude Code打造语音控制+屏幕接管的AI智能体
2026/8/31 3:40:56 网站建设 项目流程

之前在折腾个人自动化项目时,一直觉得“AI 编程助手”和“AI 智能体”之间还有一条明显的鸿沟:Claude Code 能在终端里改代码、跑命令,但它听不到我说话,也看不到我屏幕,更不会主动替我把一个想法从“一句话”变成“一个能跑的应用”。于是我动手做了一件事——把 Claude Code、语音识别、屏幕截图和自动化控制串起来,打造了一个名叫 TARS 的“AI 员工”。

TARS 这个名字致敬电影《星际穿越》里的机器人。在我这个项目里,它具备三个核心能力:

  • 语音对话:用麦克风说话,TARS 听懂后调用 Claude 回复,再通过中文语音念出来。
  • 接管屏幕:截取当前屏幕画面,交给 Claude 视觉能力分析,再通过自动化工具执行点击、输入等操作。
  • 自动构建应用:把一句需求描述交给 Claude Code,由它独立完成项目初始化、代码编写和运行验证。

这篇文章会从零开始拆解整套方案。适合有基础 Python 或前端经验、想了解 Claude Code 与 AI Agent 落地的开发者;如果你只是听说过 Claude Code 但还没安装过,也能照着文章一步步完成环境配置。文章包含完整的可运行代码、命令和常见报错排查表,可以直接复制到本地项目里改。

1. 背景与核心概念

1.1 什么是 Claude Code

先回答最基础的问题:Claude Code 是什么?

官方定义上,它是 Anthropic 推出的命令行 AI 编程 Agent。你可以在终端里启动它,它会阅读你的项目文件、分析问题、修改代码、执行命令,并在多轮对话中持续完成任务。和普通“问答式”AI 编程工具不同,Claude Code 不是只给你一段参考答案,而是真正在本地项目中动手改文件。

它解决的核心痛点是:以往我们用 AI 写代码,流程是“复制代码 -> 粘贴到项目 -> 手动调试”;而 Claude Code 把这条链路压缩成“描述需求 -> AI 自动改代码 -> AI 运行验证 -> 完成后汇报”。对于重构老代码、跨文件修改、补充测试这类任务,效果非常明显。

与之相关的还有几个概念需要区分:

  • MCP(Model Context Protocol):Anthropic 提出的开放协议,用来让 AI 模型连接外部工具和数据源。可以理解为 AI 的“USB 接口”,通过 MCP Server 接入数据库、浏览器、文件系统等能力。
  • Agentic Coding:指 AI 具备“规划 -> 调用工具 -> 执行 -> 观察结果 -> 再规划”的循环能力,而不是单次生成。
  • Claude Code 不等于 Claude 聊天网页:网页版只能对话,Claude Code 能在你的操作系统里执行真实命令。

很多人也会把 Claude Code 和 Codex、Cursor 放在一起比较。简单来说:Cursor 是可视化编辑器里的 AI 助手,Codex 是 OpenAI 的命令行 Agent,Claude Code 则是 Anthropic 的命令行 Agent,三者定位相似,差异主要体现在模型能力、工具生态和权限控制上。实际使用中,Claude Code 对多文件项目的上下文理解、以及通过 MCP 扩展外部工具的能力给我留下的印象最深。

1.2 TARS 的架构设计

TARS 不是一个新的大模型,而是“围绕 Claude 能力做的一套自动化编排系统”。它的核心思想是:把 AI 从“回答问题的工具”变成“能执行任务的员工”。

整套架构可以拆成四层:

  1. 感知层:麦克风采集语音,屏幕截图采集视觉信息。
  2. 理解层:调用 Claude(通过 Claude Code 或 Anthropic API)理解语音文本、分析屏幕内容、规划操作步骤。
  3. 执行层:用 pyautogui 等自动化库执行鼠标键盘操作,用 Claude Code 的 headless 模式自动编写项目代码。
  4. 反馈层:把执行结果通过 TTS 合成中文语音播报给用户。

这样拆解之后,每个模块都可以独立测试、独立替换。比如今天语音识别用 Google Speech API,明天想换成本地 Whisper,只需要改一个函数;今天自动构建用 Claude Code CLI,以后想换成别的 Agent,也只需要改一个适配层。这种模块化思路,也是整个项目能快速跑起来的关键。

1.3 本文的实战目标

为了不让文章停留在概念层面,我会带着你实现一个最小可用的 TARS,具体功能包括:

  • 在终端启动后,TARS 会用中文语音提示你“请吩咐”。
  • 你说“打开计算器”,它会截屏分析并尝试用自动化工具打开系统计算器。
  • 你说“帮我做一个待办事项网页”,它会调用 Claude Code 在当前目录自动生成一个可运行的网页应用。
  • 整个过程会有语音反馈,并打印每步日志。

全部代码都会贴在对应小节,标注文件路径,你可以直接复制到自己的项目里调整。文中还预留了安全开关——屏幕接管和自动化执行都属于“高风险操作”,我会在代码里默认开启人工确认,生产使用必须有额外防呆机制。

2. 环境准备与版本说明

2.1 工具清单

下面是本文涉及的主要工具。版本需要根据你的项目实际情况调整,本文示例以常见环境为例,重点演示配置思路。

工具用途说明
Node.js 18+运行 Claude CodeClaude Code 是以 CLI 方式分发的 Node 工具
Claude CodeAI 编程 Agent / 自动构建应用通过 npm 全局安装,具体版本以官方文档为准
Anthropic API Key调用 Claude 视觉与对话能力在 Anthropic 控制台申请,需付费额度
Python 3.10+编写语音、截图、自动化脚本建议使用 venv 虚拟环境
speech_recognition麦克风语音识别默认走 Google Web Speech API
edge-tts中文语音合成免费,支持多种中文音色
mss / Pillow屏幕截图mss 性能好,多显示器支持佳
pyautogui鼠标键盘自动化高风险模块,谨慎使用
anthropicPython 版 Anthropic API SDK用于视觉能力分析

需要说明的是,Claude Code 的模型参数、命令参数会随版本迭代变化。文章中的命令以稳定通用写法为准,如果遇到 “unrecognized model” 之类报错,优先检查版本和官方文档。

2.2 安装 Claude Code

Claude Code 需要 Node.js 环境。先用下面命令确认 Node 版本:

node -v

如果没安装 Node.js,去 Node.js 官网下载 LTS 版本安装。然后全局安装 Claude Code:

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

安装完成后验证:

claude --version

首次使用需要认证。两种常见方式:

方式一:直接在终端输入 claude,按提示完成登录授权。

方式二:在环境变量中配置 API Key:

export ANTHROPIC_API_KEY="你的密钥"

设置了 API Key 后,Claude Code 会优先使用 API 额度。要注意,API Key 是敏感信息,不要写进代码仓库,建议放在 .env 文件或系统密钥管理中。

如果你用的是 VS Code,可以在内置终端里直接运行 claude,Claude Code 会自动读取当前打开的目录作为工作区,这比单独开一个终端要更方便。官方也提供了 VS Code 扩展,可以在插件市场搜索安装,但核心能力仍然基于同一个 CLI。

2.3 准备 Python 环境

语音、截图和自动化部分我选择用 Python 实现,原因是生态成熟、代码量少。先创建虚拟环境:

mkdir my-tars cd my-tars python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate

然后安装依赖:

pip install anthropic edge-tts speechrecognition pyaudio mss pyautogui pillow

这里有两个容易踩坑的地方:一是 pyaudio 在 Windows / macOS 上经常需要额外编译或用预编译 wheel 安装,遇到问题先单独安装 pyaudio;二是 edge-tts 首次合成语音需要联网访问微软服务,离线环境需要换本地 TTS 方案。

3. 核心原理拆解

3.1 Claude Code 的 Agent 工作方式

Claude Code 的能力本质是一个“Agent 循环”:Claude 接收到你的指令后,会自主决定调用哪些工具,每调用一次工具就拿到结果,然后基于结果继续决策,直到任务完成或达到停止条件。

在终端交互模式下,你可以直接对话,也可以在子命令模式下自动化运行。自动化集成时最常用的是 headless 模式:

claude -p "请把 README.md 里的项目名称改成 my-tars" --allowedTools "Read Write Edit"

其中 -p 表示通过命令行参数传入提示词,--allowedTools 控制 Claude 可以使用的工具白名单,--output-format text 可以输出纯文本结果。这种模式非常适合被 Python 脚本通过 subprocess 调用。

为了防止 AI 在无人值守时执行危险命令,Claude Code 默认会对每个高权限操作弹出确认。自动化场景可以追加 --dangerously-skip-permissions 跳过确认,但强烈不建议在生产环境使用。后面实战部分我会改成更安全的“任务清单 + 人工确认”方案。

3.2 语音对话链路

语音对话链路为:麦克风 -> 语音识别 -> 文本 -> Claude 对话 -> 文本回复 -> TTS 合成 -> 播放。

这里的关键是“语音识别”和“语音合成”都要选择适合中文的引擎。语音识别我用 speech_recognition,它默认调用 Google Web Speech API,识别中文时只要指定语言为 zh-CN 即可;想要离线或更高精度,可以换成 faster-whisper 或 Vosk。语音合成我用 edge-tts,它提供多个中文音色,比如:

  • zh-CN-XiaoxiaoNeural:女声,温柔自然。
  • zh-CN-YunxiNeural:男声,适合助手角色。
  • zh-CN-XiaoyiNeural:女声,偏活泼。

TARS 我会选择 Yunxi 男声,“员工”感更强一些。

3.3 屏幕接管链路

屏幕接管的实现思路是:把当前屏幕截成图片,交给 Claude 的视觉能力识别界面元素和位置,然后由 pyautogui 执行点击、输入、滚动等操作。

这条链路听起来很“科幻”,但它依赖一个基本事实:Claude 能读图,并且能理解“图上某个图标大概在屏幕的哪个坐标”。我们可以让它输出结构化结果,比如:

{"action": "click", "x": 960, "y": 540}

然后 Python 端解析 JSON,执行对应操作。为了让步骤更可控,我会让 Claude 一次只输出一个动作,执行完再截屏确认,形成“看一眼 -> 动一下 -> 再看一眼”的闭环。

这里的权限边界必须强调:屏幕接管会读取你屏幕上所有可见信息,包括聊天记录、密码输入框、内部系统等。测试时请使用干净的虚拟机或专用测试账号,不要在生产电脑上随意开启。

3.4 自动构建应用链路

自动构建应用是 TARS 最有价值的能力。实现方式有两种:

  1. 调用 Anthropic API 直接让模型生成代码,Python 脚本再把代码写入文件。
  2. 调用 Claude Code headless 模式,让它在某个目录内自主完成“初始化项目 -> 创建文件 -> 安装依赖 -> 运行验证”完整流程。

方案 2 更符合“AI 员工”的定位,因为 Claude Code 本身就是为多文件项目设计的。你可以把用户的需求原封不动传给 claude -p,它会在指定目录下自动产出整个项目。我们只需在 Python 端解析返回结果,并向用户播报“应用已生成,目录在 xxx”。

4. 实战:从 0 到 1 打造 TARS

4.1 创建项目结构

下面开始写代码。最终项目结构如下:

my-tars/ ├── venv/ ├── tars/ │ ├── __init__.py │ ├── voice.py # 语音识别与合成 │ ├── screen.py # 屏幕截图与 Claude 视觉分析 │ ├── action.py # 鼠标键盘自动化操作 │ ├── builder.py # 调用 Claude Code 自动构建应用 │ └── main.py # 主控逻辑 ├── workspace/ # 自动生成的应用输出目录 └── .env # API Key 等敏感配置

4.2 编写语音对话模块

TARS 的语音模块包含两个函数:一个负责“听”,一个负责“说”。先创建 tars/voice.py:

# 文件路径:tars/voice.py import asyncio import speech_recognition as sr import edge_tts TTS_VOICE = "zh-CN-YunxiNeural" def listen_once(timeout=5): """从麦克风监听一句话,返回识别出的文本。""" recognizer = sr.Recognizer() with sr.Microphone() as source: print("[TARS] 请说话...") recognizer.adjust_for_ambient_noise(source, duration=0.5) try: audio = recognizer.listen(source, timeout=timeout, phrase_time_limit=10) except sr.WaitTimeoutError: print("[TARS] 没有听到声音") return "" try: text = recognizer.recognize_google(audio, language="zh-CN") print(f"[TARS] 识别结果:{text}") return text except sr.UnknownValueError: print("[TARS] 无法识别语音") return "" except sr.RequestError as exc: print(f"[TARS] 语音识别服务异常:{exc}") return "" async def _save_audio(text, output="reply.mp3"): tts = edge_tts.Communicate(text, TTS_VOICE) await tts.save(output) def speak(text): """把文本合成为中文语音并播放。""" print(f"[TARS] {text}") asyncio.run(_save_audio(text)) # macOS 播放 import subprocess subprocess.run(["afplay", "reply.mp3"], check=False)

代码说明:

  • listen_once 每次只监听一句话,超时返回空字符串。
  • adjust_for_ambient_noise 会自动降噪,放在麦克风环境嘈杂的会议室里很有必要。
  • edge-tts 的 Communicate 需要异步调用,这里用 asyncio.run 包装,方便在同步代码中直接调用。
  • 播放命令在不同系统不一样:macOS 用 afplay,Windows 可以换成 playsound 库或 PowerShell 播放。

4.3 编写屏幕接管模块

屏幕接管分成两步:截图分析、执行操作。

先写屏幕截图与 Claude 视觉分析。这里需要调用 anthropic SDK,把截图 base64 编码后发给 Claude:

# 文件路径:tars/screen.py import base64 import os import mss from anthropic import Anthropic CLAUDE_MODEL = "claude-sonnet-4-20250514" def capture_screen(output_path="screen.png"): """截取主屏幕,保存为图片文件。""" with mss.mss() as sct: monitor = sct.monitors[1] sct.shot(mon=monitor, output=output_path) return output_path def ask_claude_about_screen(prompt, image_path): """把截图交给 Claude 视觉模型分析,返回文本结果。""" api_key = os.environ.get("ANTHROPIC_API_KEY") if not api_key: raise RuntimeError("缺少 ANTHROPIC_API_KEY 环境变量") with open(image_path, "rb") as f: image_data = base64.b64encode(f.read()).decode("utf-8") client = Anthropic(api_key=api_key) message = client.messages.create( model=CLAUDE_MODEL, max_tokens=1024, messages=[ { "role": "user", "content": [ {"type": "image", "source": { "type": "base64", "media_type": "image/png", "data": image_data, }}, {"type": "text", "text": prompt}, ], } ], ) return message.content[0].text

这里 model 参数要换成你账号内实际可用的模型 ID,不同时间的 Claude 视觉模型列表会有差异。media_type 要根据截图格式调整,PNG 对应 image/png,JPEG 对应 image/jpeg。

接着写执行操作的 action.py,用 pyautogui 控制鼠标键盘:

# 文件路径:tars/action.py import json import pyautogui def execute_action(action: dict, confirm: bool = True): """执行一个结构化动作:{"action": "click", "x": 100, "y": 200}""" act = action["action"] if confirm: print(f"[TARS] 即将执行:{action}") user_input = input("按回车确认,输入 q 取消:") if user_input.strip().lower() == "q": return False if act == "click": pyautogui.click(action["x"], action["y"]) elif act == "type": pyautogui.write(action.get("text", ""), interval=0.05) elif act == "hotkey": pyautogui.hotkey(*action["keys"]) elif act == "scroll": pyautogui.scroll(action.get("clicks", -3)) else: print(f"[TARS] 未知动作:{act}") return True

这段代码默认开启 confirm 人工确认。每个动作执行前都会把动作 JSON 打印出来,等你按回车确认。这个开关在测试阶段非常有用,能避免 AI 误点。

为了让“截屏分析 -> 执行动作”自动串联,可以在 screen.py 中加一个解析函数,让 Claude 只输出一个 JSON 动作:

# 文件路径:tars/screen.py(追加) import json def decide_next_action(task: str, image_path: str) -> dict: prompt = ( f"你是屏幕操作助手。任务:{task}\n" "请分析当前屏幕截图,只输出一个 JSON 动作,格式如下:\n" '{"action": "click", "x": 960, "y": 540}\n' "支持的动作:click(点击坐标)、type(输入文本)、" "hotkey(快捷键,keys 为按键列表)、scroll(滚动,clicks 为格数)。\n" "只输出 JSON,不要输出其他内容。" ) text = ask_claude_about_screen(prompt, image_path) # 去掉可能的 ```json 包裹 text = text.strip().strip("`") if text.startswith("json"): text = text[4:].strip() return json.loads(text)

4.4 编写自动构建应用模块

自动构建应用模块通过 subprocess 调用 Claude Code 的 headless 模式。创建一个 builder.py:

# 文件路径:tars/builder.py import subprocess def build_app(requirement: str, workdir: str = "workspace") -> str: """在指定目录下调用 Claude Code 生成应用,返回执行日志。""" cmd = [ "claude", "-p", requirement, "--allowedTools", "Read,Write,Edit,Bash", "--output-format", "text", "--dangerously-skip-permissions", ] print(f"[TARS] 开始构建应用,目录:{workdir}") result = subprocess.run( cmd, cwd=workdir, capture

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

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

立即咨询