Loading... # 为豪华汽车修理店构建 AI 接待员 # 一、概述 ## 1. 简介 ### A. 是什么 这是一个为豪华汽车修理店定制的 AI 语音接待员系统,名为 Axle。它能够接听电话、回答价格和服务相关问题、记录回访请求,帮助店主挽回因漏接电话造成的业务损失。 ### B. 为什么学 - 展示 RAG(检索增强生成)在实际业务中的应用 - 演示如何将 LLM 与语音通信集成 - 了解 AI Agent 的完整开发流程 - 学习向量搜索和知识库构建的最佳实践 ### C. 学完能做什么 - 使用 MongoDB Atlas 构建向量知识库 - 集成 Vapi 实现语音 AI 代理 - 使用 Claude 构建基于知识库的问答系统 - 设计企业级 AI 应用的升级路径 # 二、项目背景 ## 1. 业务问题 Dane 经营一家豪华汽车修理店,每天因在车底下工作而漏接数百个电话。每个未接电话都意味着潜在的收入损失:从 45 美元的刹车服务到 2000 美元的发动机维修。客户电话无人接听时,会转向其他服务商。 ## 2. 解决方案概述 构建一个名为 Axle 的 AI 接待员,具备以下能力: - 24/7 接听电话 - 准确回答价格和服务问题 - 了解营业时间、政策等业务信息 - 在无法回答时收集回访信息 ```mermaid graph LR A[客户来电] --> B[Vapi 语音平台] B --> C[FastAPI Webhook] C --> D[MongoDB Atlas 向量搜索] D --> E[检索相关文档] E --> F[Anthropic Claude] F --> G[生成回复] G --> C C --> B B --> H[语音播放给客户] ```  # 三、技术栈 ## 1. 核心组件 | 组件 | 用途 | 说明 | |------|------|------| | Vapi | 语音平台 | 电话号码、语音识别/合成、工具调用 | | Deepgram | 语音转文字 | 集成于 Vapi | | ElevenLabs | 文字转语音 | 集成于 Vapi | | FastAPI + Uvicorn | Webhook 服务 | 处理 Vapi 回调请求 | | MongoDB Atlas | 数据存储 | 知识库、向量搜索、通话记录 | | Voyage AI | 文本嵌入 | voyage-3-large 模型 | | Anthropic Claude | 响应生成 | claude-sonnet-4-6 | | Ngrok | 隧道服务 | 本地开发时暴露公网地址 | | Copilot CLI | AI 辅助开发 | 代码生成工具 | ## 2. 为什么选择这套技术栈 - **Vapi**:一站式语音解决方案,无需单独处理电信复杂性 - **MongoDB Atlas**:原生向量搜索,知识库和通话记录统一存储 - **Voyage AI**:高质量的语义嵌入,适合专业领域知识 - **Claude**:优秀的指令遵循能力,减少幻觉问题 # 四、实施步骤 ## 1. 步骤一:构建大脑(RAG 管道) ### A. 知识库准备 抓取修理店网站数据,提取以下信息: - 服务类型和定价(21+ 份文档) - 营业时间 - 支付方式 - 取消政策 - 质保信息 - 代步车服务 - 擅长的汽车品牌 ### B. 向量化存储 使用 Voyage AI 将每个文档转换为 1024 维向量: ```python # 示例:文档向量化 import voyageai voyage_client = voyageai.Client(api_key="your_key") document = "刹车服务:450美元,包含前后刹车片更换..." embedding = voyage_client.embed( [document], model="voyage-3-large" ) ``` ### C. 检索流程 ```mermaid graph TD A[用户提问] --> B[使用 Voyage AI 嵌入查询] B --> C[MongoDB Atlas 向量搜索] C --> D[返回前3个最相关文档] D --> E[传递给 Claude + 严格系统提示] E --> F{是否包含答案?} F -->|是| G[生成简洁对话回复] F -->|否| H[请求回访信息] G --> I[返回答案] H --> J[保存到 callbacks 集合] ```  ### D. 系统提示设计 关键原则: - 仅从知识库回答 - 保持简短对话风格 - 不知道时明确说明 - 禁止幻觉 # 五、步骤二:连接真实电话号码 ## 1. FastAPI Webhook 服务器 ```python from fastapi import FastAPI, Request from pymongo import MongoClient app = FastAPI() @app.post("/webhook") async def handle_call(request: Request): data = await request.json() # 提取用户查询 query = data.get("message", "") # 调用 RAG 管道 response = rag_pipeline(query) # 记录到 MongoDB client = MongoClient("mongodb+srv://...") db = client["mechanic_shop"] db["calls"].insert_one({ "caller_number": data.get("caller_number"), "query": query, "response": response, "timestamp": datetime.now() }) return {"response": response} ``` ## 2. Ngrok 隧道配置 开发阶段使用 Ngrok 暴露本地服务: ```bash # 启动 Ngrok ngrok http 8000 # 将生成的 URL 配置到 Vapi Dashboard # https://abc123.ngrok.io/webhook ``` ## 3. Vapi 助手配置 在 Vapi Dashboard 中设置: - **欢迎语**:"Hi, thanks for calling Dane's Motorsport, how can I help you today?" - **工具函数**: - `answerQuestion`:RAG 支持的问答 - `saveCallback`:收集回访信息 - **Webhook URL**:指向 FastAPI 服务器 ## 4. 对话记忆管理 Vapi 在每次请求中发送完整对话历史,RAG 管道可以获取前文作为上下文: ```python def rag_pipeline(query, conversation_history=[]): # 构建带历史记录的查询 context = "\n".join([f"Q: {h['query']}\nA: {h['response']}" for h in conversation_history]) # 结合历史和当前查询进行检索 enhanced_query = f"{context}\nCurrent question: {query}" # ... 执行检索和生成 ``` # 六、步骤三:语音优化 ## 1. 选择合适的声音 作者测试了约 20 种 AI 声音,最终选择 **Christopher**: - 平静自然 - 语速适中 - 符合汽车修理店的专业氛围 声音选择的重要性超预期:错误的语音会让完美的 AI 回复感觉不对。 ## 2. 语音专用系统提示 文本回复和语音回复截然不同。针对语音优化: | 文本风格 | 语音风格 | |---------|---------| | "Great question!" | 避免 | | "$45.00" | "forty-five dollars" | | 项目符号列表 | 完整句子 | | markdown 格式 | 纯文本 | | 详细说明 | 2-4 句话上限 | **优化后的提示词示例**: ``` 你是一家豪华汽车修理店的接待员。回答时: - 使用短句 - 语气友好专业 - 价格用完整单词表达 - 最多 2-4 句话 - 不知道时请求回访信息 ``` ## 3. 升级流程设计 当问题超出知识库范围时: 1. 明确告知客户不知道答案 2. 询问客户姓名和回访电话 3. 保存到 callbacks 集合 4. 店主可以批量跟进 ```python def handle_unknown_query(query, caller_info): # 保存回访请求 db["callbacks"].insert_one({ "caller_number": caller_info.get("number"), "name": caller_info.get("name"), "question": query, "timestamp": datetime.now(), "status": "pending" }) return "我不太确定这个问题的答案。方便留下您的姓名和电话吗?店主会尽快回电。" ``` # 七、数据价值 ## 1. 通话日志记录 每次交互存储到 `calls` 集合: - 来电号码 - 查询内容 - AI 回复 - 是否转人工 - 时间戳 ## 2. 业务洞察 店主可以分析: - 客户最常问的问题 - 来电高峰时段 - AI 转人工的频率 - 回访转化率 这使电话系统成为数据资产,指导业务改进。 # 八、测试策略 ## 1. 集成测试覆盖 测试套件包含: - RAG 管道测试 - Webhook 处理器测试 - 端到端流程测试 ## 2. 边缘案例处理 | 场景 | 处理方式 | |------|---------| | Vapi 发送格式错误的请求 | 优雅降级或返回错误 | | 向量搜索无高置信度结果 | 触发升级流程 | | 客户未留下回访电话 | 请求提供或礼貌结束 | | 知识库信息过时 | 定期更新机制 | # 九、未来计划 ## 1. 即将推出的功能 - **日历集成**:通话中直接预约 - **短信通知**:新回访请求即时通知 - **管理仪表板**:统一管理待回访列表 - **安全加固**:生产环境安全配置 - **Railway 部署**:持久化公网 URL ## 2. 业务影响预期 - 每周漏接电话:100+ - 每个未接电话潜在价值:50-2000 美元 - 系统优势:24/7 运行,永不占线,熟悉所有价格和政策 # 十、核心经验 ## 1. 关键洞察 **不要将原始 LLM 用于特定业务的语音代理**。原因: - 可能产生错误的价格信息 - 破坏客户期望 - 导致客户流失 ## 2. 最佳实践 1. **基于真实知识库**:所有回答必须基于可验证的信息 2. **约束回答范围**:仅从知识库回答 3. **优先设计升级路径**:这不是边缘案例,是核心功能 4. **重视语音体验**:声音和表达方式与内容同样重要 5. **持续监控和改进**:通过通话日志优化系统 ## 3. 开发时间 项目分三个冲刺阶段完成: - 第一阶段:RAG 管道 - 第二阶段:电话集成 - 第三阶段:语音优化 最困难的部分不是代码,而是让语音听起来像是在汽车修理店工作的人,而不是硅谷创业公司的聊天机器人。 *** ## 参考资料 1. [How I Built an AI Receptionist for a Luxury Mechanic Shop - Part 1](https://www.itsthatlady.dev/blog/building-an-ai-receptionist-for-my-brother/) 最后修改:2026 年 03 月 24 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏