尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

TARS实战:用Claude Code打造语音控制+屏幕接管的AI智能体

TARS实战:用Claude Code打造语音控制+屏幕接管的AI智能体 之前在折腾个人自动化项目时一直觉得“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 运行验证 - 完成后汇报”。对于重构老代码、跨文件修改、补充测试这类任务效果非常明显。与之相关的还有几个概念需要区分MCPModel Context ProtocolAnthropic 提出的开放协议用来让 AI 模型连接外部工具和数据源。可以理解为 AI 的“USB 接口”通过 MCP Server 接入数据库、浏览器、文件系统等能力。Agentic Coding指 AI 具备“规划 - 调用工具 - 执行 - 观察结果 - 再规划”的循环能力而不是单次生成。Claude Code 不等于 Claude 聊天网页网页版只能对话Claude Code 能在你的操作系统里执行真实命令。很多人也会把 Claude Code 和 Codex、Cursor 放在一起比较。简单来说Cursor 是可视化编辑器里的 AI 助手Codex 是 OpenAI 的命令行 AgentClaude Code 则是 Anthropic 的命令行 Agent三者定位相似差异主要体现在模型能力、工具生态和权限控制上。实际使用中Claude Code 对多文件项目的上下文理解、以及通过 MCP 扩展外部工具的能力给我留下的印象最深。1.2 TARS 的架构设计TARS 不是一个新的大模型而是“围绕 Claude 能力做的一套自动化编排系统”。它的核心思想是把 AI 从“回答问题的工具”变成“能执行任务的员工”。整套架构可以拆成四层感知层麦克风采集语音屏幕截图采集视觉信息。理解层调用 Claude通过 Claude Code 或 Anthropic API理解语音文本、分析屏幕内容、规划操作步骤。执行层用 pyautogui 等自动化库执行鼠标键盘操作用 Claude Code 的 headless 模式自动编写项目代码。反馈层把执行结果通过 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 APIedge-tts中文语音合成免费支持多种中文音色mss / Pillow屏幕截图mss 性能好多显示器支持佳pyautogui鼠标键盘自动化高风险模块谨慎使用anthropicPython 版 Anthropic API SDK用于视觉能力分析需要说明的是Claude Code 的模型参数、命令参数会随版本迭代变化。文章中的命令以稳定通用写法为准如果遇到 “unrecognized model” 之类报错优先检查版本和官方文档。2.2 安装 Claude CodeClaude Code 需要 Node.js 环境。先用下面命令确认 Node 版本node -v如果没安装 Node.js去 Node.js 官网下载 LTS 版本安装。然后全局安装 Claude Codenpm install -g anthropic-ai/claude-code安装完成后验证claude --version首次使用需要认证。两种常见方式方式一直接在终端输入 claude按提示完成登录授权。方式二在环境变量中配置 API Keyexport ANTHROPIC_API_KEY你的密钥设置了 API Key 后Claude Code 会优先使用 API 额度。要注意API Key 是敏感信息不要写进代码仓库建议放在 .env 文件或系统密钥管理中。如果你用的是 VS Code可以在内置终端里直接运行 claudeClaude 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 最有价值的能力。实现方式有两种调用 Anthropic API 直接让模型生成代码Python 脚本再把代码写入文件。调用 Claude Code headless 模式让它在某个目录内自主完成“初始化项目 - 创建文件 - 安装依赖 - 运行验证”完整流程。方案 2 更符合“AI 员工”的定位因为 Claude Code 本身就是为多文件项目设计的。你可以把用户的需求原封不动传给 claude -p它会在指定目录下自动产出整个项目。我们只需在 Python 端解析返回结果并向用户播报“应用已生成目录在 xxx”。4. 实战从 0 到 1 打造 TARS4.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(timeout5): 从麦克风监听一句话返回识别出的文本。 recognizer sr.Recognizer() with sr.Microphone() as source: print([TARS] 请说话...) recognizer.adjust_for_ambient_noise(source, duration0.5) try: audio recognizer.listen(source, timeouttimeout, phrase_time_limit10) except sr.WaitTimeoutError: print([TARS] 没有听到声音) return try: text recognizer.recognize_google(audio, languagezh-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, outputreply.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], checkFalse)代码说明listen_once 每次只监听一句话超时返回空字符串。adjust_for_ambient_noise 会自动降噪放在麦克风环境嘈杂的会议室里很有必要。edge-tts 的 Communicate 需要异步调用这里用 asyncio.run 包装方便在同步代码中直接调用。播放命令在不同系统不一样macOS 用 afplayWindows 可以换成 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_pathscreen.png): 截取主屏幕保存为图片文件。 with mss.mss() as sct: monitor sct.monitors[1] sct.shot(monmonitor, outputoutput_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_keyapi_key) message client.messages.create( modelCLAUDE_MODEL, max_tokens1024, 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/pngJPEG 对应 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, ), interval0.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, cwdworkdir, capture
返回列表