voice-screen-share 技能
> 语音通话 + 屏幕共享技能。Claw 通过 Python 代码驱动浏览器端的语音通话界面,实现实时语音对话和屏幕共享。
一、功能概述
| 功能模块 | 说明 |
|---|---|
| 语音通话 | 用户麦克风 → 浏览器 STT → Claw 处理 → AI 回复 → TTS 语音播放 |
| 屏幕共享 | 用户浏览器授权 → 实时屏幕画面展示 |
| Claw 集成 | Claw 通过 voice_call_driver 模块控制整个对话流程 |
二、架构设计
┌─────────────────────────────────────────────────────────┐
│ 浏览器 (http://localhost:8765) │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ Web Speech API│ │ getDisplay- │ │ Audio Player │ │
│ │ 麦克风→文字 │ │ Media 屏幕共享│ │ TTS语音播放 │ │
│ └──────┬───────┘ └──────────────┘ └───────▲───────┘ │
│ │ │ │
│ ┌──────▼──────────────────────────────────┴──────────┐ │
│ │ WebSocket /ws/voice │ │
│ └──────┬──────────────────────────▲──────────────────┘ │
└─────────┼──────────────────────────┼─────────────────────┘
│ │
┌─────────▼──────────────────────────▼─────────────────────┐
│ FastAPI 服务 (claw_bridge.py) │
│ │
│ /ws/voice ←→ 浏览器前端 (多个连接) │
│ /ws/claw ←→ Claw AI (WebSocket 客户端) │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 消息流: │ │
│ │ 用户语音(STT) → /ws/voice → /ws/claw → Claw处理 │ │
│ │ Claw回复 → /ws/claw → /ws/voice → TTS → 前端播放 │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ edge-tts: 文字 → 语音 (mp3, base64) │
└───────────────────────────────────────────────────────────┘
▲
│ import voice_call_driver
┌─────────┴─────────────────────────────────────────────────┐
│ Claw (python_cell_exec) │
│ │
│ start_service() → 启动 FastAPI + WebSocket 桥接 │
│ wait_for_user() → 阻塞等待用户语音 │
│ reply_to_user() → 发送 AI 回复 (自动 TTS) │
│ stop_service() → 停止服务 │
└───────────────────────────────────────────────────────────┘
三、环境依赖
已预装(无需额外安装):
- fastapi uvicorn edge-tts websockets
四、Claw 使用指南
基本用法(python_cell_exec 中执行)
import sys, os
sys.path.insert(0, r"D:\360MoveData\Users\liuho\Documents\lingxi-claw\20260519-18-40-11-542\voice-screen-share")
from voice_call_driver import *
# 1. 启动服务
start_service()
# 2. 通知用户打开页面
url = get_url()
print(f"请在浏览器中打开: {url}")
用户在浏览器打开页面后,点击「开始通话」并授权麦克风,即可开始语音对话。
持续对话循环
# 继续上面的代码...
# 3. 持续对话循环
while True:
msg = wait_for_user(timeout=300) # 最多等5分钟
if msg is None:
print("等待超时,没有用户输入")
break
user_text = msg["text"]
print(f"[用户] {user_text}")
# ===== 在这里编写 AI 回复逻辑 =====
# 这是 Claw 发挥能力的地方:
# - 调用搜索引擎查询信息
# - 使用 python 处理数据
# - 调用其他工具(browser、docx、xlsx 等)
# - 生成分析报告
# ===================================
ai_reply = f"我收到了你说的:{user_text}。这是 Claw 的语音回复演示。"
# 4. 发送回复(前端自动播放 TTS 语音)
reply_to_user(ai_reply)
# 5. 结束
stop_service()
与浏览器自动化结合(屏幕共享场景)
# 启动语音通话
start_service()
# 用户点击「共享屏幕」后,Claw 可以看到用户屏幕
# 结合 nodriver 浏览器自动化操作用户电脑
import sys; sys.path.insert(0, os.path.join(os.getenv("SKILL_PATH"), "browser", "scripts"))
import browser
# 打开网页
browser.navigate("https://www.baidu.com")
# 同时语音通话保持
msg = wait_for_user()
if msg:
reply_to_user("我已经打开了百度首页,你还需要我做什么?")
带思考状态的回复
msg = wait_for_user()
if msg:
user_text = msg["text"]
# 通知前端显示"思考中..."
set_thinking()
# 执行耗时操作(搜索、计算等)
# search(...) / python处理...
# 发送回复并恢复空闲状态
reply_to_user("经过分析,结果如下...")
# reply_to_user 内部会自动设置 idle 状态
五、API 参考
voice_call_driver 模块
| 函数 | 说明 | 参数 |
|---|---|---|
start_service(wait_ready=True, timeout=30) |
启动服务 | wait_ready: 是否等待就绪; timeout: 超时秒数 |
get_url() |
获取前端页面 URL | 无 |
wait_for_user(timeout=120) |
阻塞等待用户语音 | timeout: 超时秒数,超时返回 None |
reply_to_user(text) |
发送 AI 回复(自动 TTS) | text: 回复文字 |
set_thinking() |
通知前端 AI 正在思考 | 无 |
set_idle() |
通知前端 AI 空闲 | 无 |
get_history() |
获取完整对话历史 | 返回 [(role, text), ...] |
clear_history() |
清空对话历史 | 无 |
is_connected() |
检查连接状态 | 返回 bool |
stop_service() |
停止所有服务 | 无 |
wait_for_user() 返回值
{
"type": "user_audio_text",
"text": "用户说的文字内容",
"history": [
{"role": "user", "text": "..."},
{"role": "ai", "text": "..."},
...
]
}
六、配置选项
在 claw_bridge.py 中可修改:
| 配置项 | 默认值 | 说明 |
|---|---|---|
VOICE_SERVICE_PORT |
8765 | 服务端口 |
TTS_VOICE |
zh-CN-XiaoxiaoNeural | TTS 语音角色 |
TTS_RATE |
+0% | TTS 语速(如 "+20%", "-10%") |
TTS_VOLUME |
+0% | TTS 音量 |
可选 TTS 语音
| 语音 ID | 角色 |
|---|---|
| zh-CN-XiaoxiaoNeural | 晓晓(女声,默认) |
| zh-CN-YunxiNeural | 云希(男声) |
| zh-CN-XiaoyiNeural | 晓依(女声) |
| zh-CN-YunjianNeural | 云健(男声) |
| zh-CN-XiaomoNeural | 晓墨(女声) |
| zh-CN-YunyangNeural | 云扬(男声) |
七、浏览器兼容性
| 浏览器 | 语音识别 | 屏幕共享 | 推荐度 |
|---|---|---|---|
| Chrome 33+ | 支持 | 支持 | 推荐 |
| Edge 79+ | 支持 | 支持 | 推荐 |
| Firefox | 部分 | 支持 | 一般 |
| Safari | 不支持 | 部分 | 不推荐 |
八、安全注意事项
- 服务仅绑定本地端口,不暴露到公网
- 麦克风和屏幕共享需用户主动授权
- 对话数据仅在内存中,不持久化
- TTS 使用微软免费服务,无需 API Key
九、故障排查
| 问题 | 解决方案 |
|---|---|
| 端口被占用 | 修改 VOICE_SERVICE_PORT |
| 语音识别不工作 | 使用 Chrome/Edge,检查麦克风权限 |
| TTS 无声音 | 检查网络连接(edge-tts 需联网) |
| Claw 连接失败 | 检查服务是否启动,查看控制台日志 |
| 页面打不开 | 确认 start_service() 返回成功 |