2026 全流程实战:把顾客语音变成订单 JSON,小龙虾门店 AI 智能体上线指南
2026 全流程实战把顾客语音变成订单 JSON小龙虾门店 AI 智能体上线指南基于 STT/TTS、LLM API 和可观测调试思路复现一个可跑通的餐饮语音运营助手 MVP最终效果先说清楚本文会复现一个小龙虾门店语音运营助手。顾客发来一段语音系统完成四件事语音转文字、抽取结构化订单 JSON、生成给店员确认的话术、可选生成语音回复。输入是一段音频输出包含 transcript、intent、reply、reply_audio 四类字段。它不是自动收钱机器人也不是替老板拍脑袋承诺配送的赛博店长它更像晚高峰旁边那个不喊累的实习生先把信息整理好再交给人确认。下面按可复现 MVP 展开。新闻相关内容会明确标注为事实描述架构选择和趋势判断属于观点分析。工具资源导航如果你看完这波热点想顺手把方案跑起来或者把账号环境补齐这两个入口可以先收藏API调用主打各种主流模型接入、稳定转发和低门槛调用。GPT代购官方渠道GPT PLUS/pro充值秒到账可开发票文末资源导航属于工具信息整理请结合平台规则和自身需求判断。1. 热点拆解先分清事实和观点【事实描述】2026-04-19MarkTechPost 报道 xAI 推出独立的 Grok Speech-to-Text 和 Text-to-Speech API目标是企业语音开发者。2026-04-19MarkTechPost 发布 PrismML Bonsai 1-Bit LLM 教程主题包括 CUDA、GGUF、benchmark、chat、JSON 和 RAG。2026-04-18Anthropic 发布 Claude Opus 4.7重点包括 agentic coding、高分辨率视觉和长周期自主任务。2026-04-18Google AI 发布 Auto-Diagnose用 LLM 在规模化场景诊断集成测试失败。2026-04-13OpenAI News 称 Cloudflare Agent Cloud 接入 OpenAI GPT-5.4 和 Codex用于企业构建、部署和扩展真实任务中的 AI agents。2026-04-19NVIDIA 发布 Ising定位为面向混合量子-经典系统的开放量子 AI 模型家族。【观点分析】这几条新闻拼起来信息量不小语音能力正在从大模型附属功能变成独立积木Agent 不再只停留在演示视频里而是被推向部署、调试、扩展本地轻量模型和 RAG 继续降低边缘场景成本测试诊断也开始被 LLM 接管一部分脏活累活。对开发者来说这意味着 2026 年做 AI 项目重点不是会不会喊一句智能体而是能不能把 API、日志、权限、成本和人工确认串起来。2. 场景定义小龙虾门店语音订单助手实体案例选择小龙虾门店因为它非常工程化口味多、斤数多、配送时间敏感、顾客经常语音下单。老板关心的不是模型参数而是别把三斤听成七斤别把蒜蓉听成十三香。目标接收顾客语音文件。调用 STT把音频转成文本。调用 ChatGPT 类 LLM API抽取订单意图。生成店员可读的确认话术。可选调用 TTS把话术转成语音。所有关键步骤可记录日志方便排错。非目标不自动扣款不自动退款不绕过店员确认不承诺高峰期一定配送。3. 技术栈选择层选择作用Web 服务Python 3.11 FastAPI快速提供 HTTP 接口API 调用httpx调用 STT、LLM、TTS数据结构Pydantic约束订单 JSON菜单知识menu.txt最小 RAG上线可换向量库语音能力STT/TTS adapter不绑定某家字段方便替换调试分阶段日志对齐 Auto-Diagnose 类思路注意素材只说明 xAI 推出了独立 Grok STT/TTS API没有给出具体 endpoint、鉴权字段和价格。因此本文代码把 STT/TTS 写成 adapter实际接入时按对应平台文档替换不假装知道不存在的细节。4. 创建项目与示例菜单bashmkdir crayfish-agent cd crayfish-agentpython -m venv .venvsource .venv/bin/activatepip install fastapi uvicorn httpx pydantic python-multipart创建一个示例菜单实际项目请替换为真实门店配置bashcat menu.txt ‘EOF’蒜蓉小龙虾示例套餐适合不吃辣用户十三香小龙虾示例套餐默认中辣配送5公里内优先高峰期需要店员二次确认EOF环境变量建议这样预留bashexport LLM_API_BASE‘https://your-api-base’export LLM_API_KEY‘sk-xxx’export LLM_MODEL‘your-chat-model’export STT_API_BASE‘’export TTS_API_BASE‘’如果不配置外部 API下面代码会进入 dry-run 模式便于先跑通流程。5. 关键代码app.pypythonfrom fastapi import FastAPI, UploadFile, Filefrom pydantic import BaseModel, Fieldimport os, httpxapp FastAPI(title‘crayfish-voice-agent’)class OrderIntent(BaseModel):dish: str ‘小龙虾’weight_jin: float | None Noneflavor: str | None Nonedelivery_time: str | None Noneaddress: str | None Nonephone: str | None Noneconfidence: float 0.0missing_fields: list[str] Field(default_factorylist)async def stt(audio: bytes) - str:base os.getenv(‘STT_API_BASE’)if not base:return ‘今晚6点三斤蒜蓉小龙虾送到软件园A座电话13800000000’async with httpx.AsyncClient(timeout60) as client:r await client.post(base, files{‘file’: (‘voice.wav’, audio)})r.raise_for_status()data r.json()return data.get(‘text’, ‘’)async def extract_order(text: str) - OrderIntent:key os.getenv(‘LLM_API_KEY’)base os.getenv(‘LLM_API_BASE’)model os.getenv(‘LLM_MODEL’, ‘chat-model’)if not key or not base:return OrderIntent(weight_jin3, flavor‘蒜蓉’, delivery_time‘今晚6点’, address‘软件园A座’, phone‘13800000000’, confidence0.75)menu open(‘menu.txt’, encoding‘utf-8’).read() if os.path.exists(‘menu.txt’) else ‘’prompt ‘参考门店菜单’ menu ‘。从顾客文本中提取餐饮订单返回字段 dish, weight_jin, flavor, delivery_time, address, phone, confidence, missing_fields。只返回 JSON。文本’ textpayload {‘model’: model,‘messages’: [{‘role’: ‘system’, ‘content’: ‘你是门店订单抽取助手缺失信息放入 missing_fields。不要承诺价格、配送和退款。’},{‘role’: ‘user’, ‘content’: prompt}],‘temperature’: 0.1}async with httpx.AsyncClient(timeout60) as client:r await client.post(base.rstrip(‘/’) ‘/v1/chat/completions’, headers{‘Authorization’: Bearer ’ key}, jsonpayload)r.raise_for_status()content r.json()[‘choices’][0][‘message’][‘content’]import jsonreturn OrderIntent(**json.loads(content))def build_reply(intent: OrderIntent) - str:if intent.missing_fields:return ‘还差这些信息’ ‘、’.join(intent.missing_fields) ‘。请店员补问后再确认。’return f’已记录{intent.weight_jin}斤{intent.flavor}{intent.dish}{intent.delivery_time}送到{intent.address}。请店员核对价格和配送能力。’async def tts(text: str) - str:base os.getenv(‘TTS_API_BASE’)if not base:return ‘dry-run: 未配置 TTS先返回文本’async with httpx.AsyncClient(timeout60) as client:r await client.post(base, json{‘text’: text, ‘voice’: os.getenv(‘TTS_VOICE’, ‘default’)})r.raise_for_status()open(‘reply.mp3’, ‘wb’).write(r.content)return ‘reply.mp3’app.post(‘/voice-order’)async def voice_order(file: UploadFile File(…)):audio await file.read()text await stt(audio)intent await extract_order(text)reply build_reply(intent)reply_audio await tts(reply)return {‘transcript’: text, ‘intent’: intent.model_dump(), ‘reply’: reply, ‘reply_audio’: reply_audio}这里的 TTS adapter 假设返回二进制音频。如果你接入的平台返回 URL 或 JSON只需要改 tts 函数不要把业务逻辑写散。6. 本地运行与验证bashecho fake demo.wavuvicorn app:app --reload --port 8000curl -F ‘filedemo.wav’ http://127.0.0.1:8000/voice-orderdry-run 模式下即使 demo.wav 不是真音频也能验证完整链路。接入真实 STT 后请换成真实 wav 或平台支持的音频格式。7. 调试排错清单422 报错通常是缺少 python-multipart重新安装依赖。STT 返回空检查音频格式、采样率、上传字段名。由于不同 STT API 字段不一样先在 stt 函数里打印响应。JSON 解析失败把 temperature 调低提示词强调只返回 JSON必要时增加一次 JSON 修复步骤。结果乱承诺system prompt 必须写清楚不要承诺价格、配送和退款最终由店员确认。延迟太高STT、LLM、TTS 串行会慢。可以先返回文本确认再异步生成语音常见菜单问答可缓存。集成测试难查Google AI 在 2026-04-18 发布 Auto-Diagnose 的方向值得借鉴。实际项目里把 stt、extract、reply、tts 分阶段打日志否则出错时你会在一锅日志粥里捞小龙虾。8. 上线建议、成本与合规最小 DockerfiledockerfileFROM python:3.11-slimWORKDIR /appCOPY . .RUN pip install fastapi uvicorn httpx pydantic python-multipartCMD uvicorn app:app --host 0.0.0.0 --port 8000生产环境不要直接用 --reload。建议加 HTTPS、密钥托管、请求限流、日志脱敏和人工审核队列。成本主要来自三块音频时长、LLM token、TTS 输出。降低成本的办法包括短音频先截断静音、菜单 FAQ 做缓存、低风险查询走本地轻量模型。PrismML Bonsai 1-Bit LLM 教程提到 CUDA、GGUF、JSON 和 RAG说明本地小模型在结构化与检索场景有工程价值但具体部署参数应以对应项目文档为准。合规上电话、地址、语音都可能包含个人信息。建议默认不长期保存原始音频日志里脱敏手机号明确告知用户用途。食品安全投诉、退款、赔付、价格争议等场景不要自动闭环交给人工处理。9. 趋势判断开发者该学什么语音 API 独立化之后餐饮、客服、物流这类行业会更容易把自然语言入口接进系统。Cloudflare Agent Cloud 与 OpenAI GPT-5.4、Codex 的结合说明企业级 Agent 更关注部署和扩展而不只是聊天效果。Claude Opus 4.7 强调 agentic coding 和长周期任务意味着开发者写胶水代码、修接口、生成测试的效率会继续提高但工程责任不会消失。NVIDIA Ising 代表更远的异构计算方向对小龙虾门店 MVP 不是明天就要用的东西但提醒我们AI 基础设施还会继续分层。10. 总结这套 MVP 的核心不是炫技而是把语音、LLM、TTS、日志和人工确认串成一个能跑的闭环。开发者做副业项目时优先找这种流程明确、错误可控、价值可解释的场景。先用 dry-run 跑通再替换真实 API先让店员确认再考虑自动化。毕竟模型再聪明也不该在晚高峰替老板承诺全城半小时送达。