医生接待员语音代理
一个由LiveKit驱动的语音代理,充当诊所接待员。它为两个分支机构(锡亚尔科特和拉合尔)预订预约,提供日间可用性,与患者确认详细信息,并通过TTS实时通话。
特性
- 🎤 自然语音对话(低延迟,插入)
- 🗓️ 分行/日间可用性(锡亚尔科特:周一至周三,拉合尔:周四至周六)
- ⏰ 固定一小时时段(10–2,4–8)
- 🧰 功能工具:检查可用性、预订、列出预订
- 🔌 提供商:Deepgram STT、谷歌Gemini LLM、ElevenLabs TTS、Silero VAD
先决条件
- Python 3.9或更高版本
- API密钥:
- 深度编程API密钥(STT) - Google Gemini API密钥(LLM) - ElevenLabs API密钥(TTS) - LiveKit Cloud凭据(可选;仅适用于云部署)
快速开始
1) 安装依赖项
python -m venv .\venv
.\venv\Scripts\Activate.ps1
python -m pip install -U pip
pip install -r requirements.txt2) 配置环境
copy .env.example .env
# Then edit .env and add your keys必修的: DEEPGRAM_API_KEY, GEMINI_API_KEY, ELEVENLABS_API_KEY
3) 运行代理
# Using Python directly
python .\main.py console
# Or via the PowerShell helper (if configured to run main.py)
.\start-agent.ps1 -Mode console4) (可选)启用谷歌日历同步
该项目包括一个类似MCP的小型HTTP服务器,为预订的约会创建Google日历事件。
# One-time: download OAuth client JSON from Google Cloud Console
# Place it as .\credentials.json
# Set a SECRET_KEY in your .env (any random string)
# Optionally set GOOGLE_MCP_URL (default http://localhost:5000/create-event)
# Run the calendar server in a separate terminal
python .\mcp_server.py
# In your browser, authorize access
http://127.0.0.1:5000/authorize在OAuth成功之后, token.json 保存在本地。当你预约时,代理人会发邮件到 GOOGLE_MCP_URL 创建日历事件。
建筑
┌─────────────┐ ┌────────────────────────────┐
│ Microphone│──▶──│ LiveKit AgentSession │──▶ ElevenLabs TTS (voice out)
│ + Speakers │ │ (STT+LLM+TTS+VAD pipeline)│
└─────────────┘ └───────┬─────────┬──────────┘
│ │
Deepgram Gemini (Optional)
STT LLM ──▶ Google Calendar Server代码概述
- 入口点:
main.py - 代理类:
DoctorReceptionist - 工具:
- get_current_date_and_time - check_availability(city, day) - book_appointment(patient_name, city, day, slot) - show_appointments()
语音管道配置
- STT:Deepgram Nova-2(
DEEPGRAM_API_KEY,STT_LANGUAGE=en) - 法学硕士:谷歌双子座(
GEMINI_API_KEY,LLM_CHOICE=gemini-2.5-flash默认) - TTS:ElevenLabs(
ELEVENLABS_API_KEY,可选ELEVENLABS_VOICE_ID,ELEVENLABS_TTS_MODEL) - VAD:Silero(通过插件捆绑,无需额外密钥)
故障排除
- 401到LiveKit推理STT:该项目在本地使用Deepgram STT。如果你切换到
inference.STT,您必须设置有效的LiveKit Cloud凭据。 - 瞬态STT断开连接:通常是网络/提供商打嗝。重试或保持交互通常会解决问题。
- 音频设备问题:检查操作系统中的麦克风/扬声器权限。
环境变量引用
| 变量 | 必填 | 描述 |
|---|---|---|
DEEPGRAM_API_KEY | 是 | STT的Deepcram API密钥 |
GEMINI_API_KEY | 是 | 用于LLM的Google Gemini API密钥 |
ELEVENLABS_API_KEY | 是 | ElevenLabs API TTS密钥 |
ELEVENLABS_VOICE_ID | 否 | ElevenLabs语音ID(可选) |
ELEVENLABS_TTS_MODEL | 否 | ElevenLabs TTS型号(可选) |
ELEVENLABS_STREAMING_LATENCY | 否 | 整数延迟提示(默认值0) |
STT_LANGUAGE | 无 | STT语言代码(默认 en) |
LLM_CHOICE | 否 | LLM模型(默认 gemini-2.5-flash) |
LIVEKIT_URL | 否 | LiveKit服务器URL(适用于云) |
LIVEKIT_API_KEY | 否 | LiveKit API密钥(用于云) |
LIVEKIT_API_SECRET | 否 | LiveKit API机密(用于云) |
LOG_LEVEL | 否 | 日志记录级别(默认 INFO) |
GOOGLE_MCP_URL | 否 | 日历服务器终结点(默认 http://localhost:5000/create-event) |
SECRET_KEY | 否 | Flask会话秘密 mcp_server.py |
资源
- LiveKit代理:https://docs.livekit.io/agents/
- LiveKit Python SDK:https://github.com/livekit/agents
