news 2026/4/21 5:38:26

2026 全流程实战:把顾客语音变成订单 JSON,小龙虾门店 AI 智能体上线指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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-19,MarkTechPost 报道 xAI 推出独立的 Grok Speech-to-Text 和 Text-to-Speech API,目标是企业语音开发者。
  • 2026-04-19,MarkTechPost 发布 PrismML Bonsai 1-Bit LLM 教程,主题包括 CUDA、GGUF、benchmark、chat、JSON 和 RAG。
  • 2026-04-18,Anthropic 发布 Claude Opus 4.7,重点包括 agentic coding、高分辨率视觉和长周期自主任务。
  • 2026-04-18,Google AI 发布 Auto-Diagnose,用 LLM 在规模化场景诊断集成测试失败。
  • 2026-04-13,OpenAI News 称 Cloudflare Agent Cloud 接入 OpenAI GPT-5.4 和 Codex,用于企业构建、部署和扩展真实任务中的 AI agents。
  • 2026-04-19,NVIDIA 发布 Ising,定位为面向混合量子-经典系统的开放量子 AI 模型家族。

【观点分析】

这几条新闻拼起来,信息量不小:语音能力正在从大模型附属功能变成独立积木;Agent 不再只停留在演示视频里,而是被推向部署、调试、扩展;本地轻量模型和 RAG 继续降低边缘场景成本;测试诊断也开始被 LLM 接管一部分脏活累活。对开发者来说,这意味着 2026 年做 AI 项目,重点不是会不会喊一句智能体,而是能不能把 API、日志、权限、成本和人工确认串起来。

2. 场景定义:小龙虾门店语音订单助手

实体案例选择小龙虾门店,因为它非常工程化:口味多、斤数多、配送时间敏感、顾客经常语音下单。老板关心的不是模型参数,而是别把三斤听成七斤,别把蒜蓉听成十三香。

目标:

  1. 接收顾客语音文件。
  2. 调用 STT,把音频转成文本。
  3. 调用 ChatGPT 类 LLM API,抽取订单意图。
  4. 生成店员可读的确认话术。
  5. 可选调用 TTS,把话术转成语音。
  6. 所有关键步骤可记录日志,方便排错。

非目标:不自动扣款,不自动退款,不绕过店员确认,不承诺高峰期一定配送。

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. 创建项目与示例菜单

bash
mkdir crayfish-agent && cd crayfish-agent
python -m venv .venv
source .venv/bin/activate
pip install fastapi uvicorn httpx pydantic python-multipart

创建一个示例菜单,实际项目请替换为真实门店配置:

bash
cat > menu.txt <<‘EOF’
蒜蓉小龙虾:示例套餐,适合不吃辣用户
十三香小龙虾:示例套餐,默认中辣
配送:5公里内优先,高峰期需要店员二次确认
EOF

环境变量建议这样预留:

bash
export 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.py

python
from fastapi import FastAPI, UploadFile, File
from pydantic import BaseModel, Field
import os, httpx

app = FastAPI(title=‘crayfish-voice-agent’)

class OrderIntent(BaseModel):
dish: str = ‘小龙虾’
weight_jin: float | None = None
flavor: str | None = None
delivery_time: str | None = None
address: str | None = None
phone: str | None = None
confidence: float = 0.0
missing_fields: list[str] = Field(default_factory=list)

async def stt(audio: bytes) -> str:
base = os.getenv(‘STT_API_BASE’)
if not base:
return ‘今晚6点,三斤蒜蓉小龙虾,送到软件园A座,电话13800000000’
async with httpx.AsyncClient(timeout=60) 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_jin=3, flavor=‘蒜蓉’, delivery_time=‘今晚6点’, address=‘软件园A座’, phone=‘13800000000’, confidence=0.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。文本:’ + text
payload = {
‘model’: model,
‘messages’: [
{‘role’: ‘system’, ‘content’: ‘你是门店订单抽取助手,缺失信息放入 missing_fields。不要承诺价格、配送和退款。’},
{‘role’: ‘user’, ‘content’: prompt}
],
‘temperature’: 0.1
}
async with httpx.AsyncClient(timeout=60) as client:
r = await client.post(base.rstrip(‘/’) + ‘/v1/chat/completions’, headers={‘Authorization’: 'Bearer ’ + key}, json=payload)
r.raise_for_status()
content = r.json()[‘choices’][0][‘message’][‘content’]
import json
return 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(timeout=60) 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. 本地运行与验证

bash
echo fake > demo.wav
uvicorn app:app --reload --port 8000
curl -F ‘file=@demo.wav’ http://127.0.0.1:8000/voice-order

dry-run 模式下,即使 demo.wav 不是真音频,也能验证完整链路。接入真实 STT 后,请换成真实 wav 或平台支持的音频格式。

7. 调试排错清单

  1. 422 报错:通常是缺少 python-multipart,重新安装依赖。
  2. STT 返回空:检查音频格式、采样率、上传字段名。由于不同 STT API 字段不一样,先在 stt 函数里打印响应。
  3. JSON 解析失败:把 temperature 调低,提示词强调只返回 JSON;必要时增加一次 JSON 修复步骤。
  4. 结果乱承诺:system prompt 必须写清楚不要承诺价格、配送和退款,最终由店员确认。
  5. 延迟太高:STT、LLM、TTS 串行会慢。可以先返回文本确认,再异步生成语音;常见菜单问答可缓存。
  6. 集成测试难查:Google AI 在 2026-04-18 发布 Auto-Diagnose 的方向值得借鉴。实际项目里,把 stt、extract、reply、tts 分阶段打日志,否则出错时你会在一锅日志粥里捞小龙虾。

8. 上线建议、成本与合规

最小 Dockerfile:

dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install fastapi uvicorn httpx pydantic python-multipart
CMD 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;先让店员确认,再考虑自动化。毕竟模型再聪明,也不该在晚高峰替老板承诺全城半小时送达。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 5:24:57

egergergeeert开源可部署实践:本地化图像生成规避数据外泄风险

egergergeeert开源可部署实践&#xff1a;本地化图像生成规避数据外泄风险 1. 产品概述 egergergeeert 是一套面向图像创作场景的文生图解决方案&#xff0c;支持通过自然语言描述直接生成各类视觉内容。该工具特别适合需要快速产出概念图、插画草图、角色设计等创意工作的场…

作者头像 李华
网站建设 2026/4/21 5:24:56

Qwen3.5-9B-GGUF GPU优化部署:batch_size与n_ctx参数调优黄金组合

Qwen3.5-9B-GGUF GPU优化部署&#xff1a;batch_size与n_ctx参数调优黄金组合 1. 模型概述与部署基础 Qwen3.5-9B-GGUF是阿里云开源的Qwen3.5-9B模型经过GGUF格式量化后的版本&#xff0c;具有以下核心特性&#xff1a; 模型架构&#xff1a;采用创新的Gated Delta Networks…

作者头像 李华
网站建设 2026/4/21 5:24:08

Kandinsky-5.0-I2V-Lite-5s本地化部署精讲:MobaXterm连接服务器与文件传输

Kandinsky-5.0-I2V-Lite-5s本地化部署精讲&#xff1a;MobaXterm连接服务器与文件传输 1. 引言 如果你是一名Windows开发者&#xff0c;正在寻找高效管理远程GPU服务器的方法&#xff0c;那么MobaXterm绝对是你的得力助手。今天我们就来手把手教你如何用这款神器连接星图GPU平…

作者头像 李华
网站建设 2026/4/21 5:22:40

二叉树的遍历和线索二叉树--中序线索二叉树的遍历

一、遍历特点 1. 不需要递归 2. 不需要栈 3. 顺着线索指针&#xff0c;依次访问 4. 遍历顺序依然&#xff1a;左 → 根 → 右二、先回顾结点标记 - ltag 0&#xff1a;left 是左孩子 - ltag 1&#xff1a;left 是前驱线索- rtag 0&#xff1a;right 是右孩子 - rtag 1&…

作者头像 李华