通过LangChain Agent模拟实现美团外卖下单场景

这是一个极具代表性的 LangChain Agent 实战场景 :将用户的自然语言语音指令 ,通过智能代理(Agent)自动分解为多个工具调用,最终完成美团外卖下单这一复杂现实任务。

下面我将为你提供一个 端到端、可落地、安全合规 的完整方案,涵盖:

  1. 系统架构设计
  2. 工具(Tools)开发(模拟美团 API)
  3. Agent 决策逻辑(含少辣、加雪碧等细节)
  4. 语音输入处理
  5. 安全与合规设计
  6. 部署与测试建议

⚠️ 重要说明

由于美团官方未开放公开下单 API ,本方案使用 模拟工具 + 用户授权确认机制 ,符合《生成式 AI 服务管理暂行办法》要求------所有敏感操作需用户二次确认


一、整体架构

复制代码
graph LR
    A[用户手机语音] --> B(ASR 语音识别)
    B --> C{LangChain Agent}
    C --> D[工具1:商品搜索]
    C --> E[工具2:购物车管理]
    C --> F[工具3:下单预览]
    F --> G[用户手机确认]
    G -->|确认| H[工具4:模拟下单]
    G -->|取消| I[终止流程]
    H --> J[返回订单号]

核心原则:

  • 不直接调用真实支付接口
  • 所有操作可逆、可审计
  • 用户全程可控

二、工具(Tools)定义

我们将模拟以下 4 个工具(实际对接美团需企业合作,此处为演示):

工具 1:搜索商品

复制代码
from langchain.tools import tool
from typing import List, Dict

# 模拟美团商品数据库
MENU = {
    "杨国福麻辣烫": {
        "id": "yangguofu_001",
        "base_price": 28.0,
        "options": ["微辣", "中辣", "重辣", "不辣"],
        "extras": ["雪碧 3元", "可乐 3元", "酸梅汤 4元"]
    }
}

@tool
def search_mall_product(shop_name: str, product_name: str) -> Dict:
    """根据店铺名和商品名搜索商品信息"""
    if shop_name == "杨国福" and "麻辣烫" in product_name:
        return MENU["杨国福麻辣烫"]
    return {"error": "未找到商品"}

工具 2:构建购物车

复制代码
@tool
def build_shopping_cart(
    product_id: str,
    spice_level: str = "微辣",
    extras: List[str] = None
) -> Dict:
    """构建包含口味和附加品的购物车"""
    if spice_level not in ["微辣", "中辣", "重辣", "不辣"]:
        raise ValueError("辣度选项无效")
    
    base = MENU["杨国福麻辣烫"]
    total = base["base_price"]
    items = [f"{product_id} ({spice_level})"]
    
    if extras:
        for item in extras:
            if "雪碧" in item:
                total += 3.0
                items.append("雪碧 500ml")
    
    return {
        "items": items,
        "total_price": total,
        "spice_level": spice_level,
        "extras": extras or []
    }

工具 3:生成下单预览(关键!用于用户确认)

复制代码
@tool
def generate_order_preview(cart: Dict) -> str:
    """生成人类可读的订单预览,供用户确认"""
    items_str = "\n".join(f"- {item}" for item in cart["items"])
    return f"""
【订单预览】
店铺:杨国福麻辣烫
商品:
{items_str}
总价:¥{cart['total_price']:.2f}
备注:少放辣(已设为 {cart['spice_level']})

✅ 请回复"确认下单"以完成支付
❌ 回复"取消"可终止流程
"""

工具 4:模拟下单(实际应跳转美团 App)

复制代码
@tool
def simulate_place_order(confirm: str) -> str:
    """模拟下单(实际应唤起美团 App 或返回 deep link)"""
    if confirm.strip() == "确认下单":
        # 实际场景:生成美团 deep link 或调用企业 API
        return "订单已提交!订单号:MF20240320123456\n请在美团 App 中完成支付。"
    else:
        return "订单已取消。"

三、Agent 配置(使用 OpenAI Functions)

复制代码
from langchain_openai import ChatOpenAI
from langchain import hub
from langchain.agents import create_openai_functions_agent, AgentExecutor

# 初始化 LLM(需支持 function calling)
llm = ChatOpenAI(model="gpt-4-turbo", temperature=0)

# 拉取官方 prompt
prompt = hub.pull("hwchase17/openai-functions-agent")

# 创建 Agent
agent = create_openai_functions_agent(
    llm=llm,
    tools=[
        search_mall_product,
        build_shopping_cart,
        generate_order_preview,
        simulate_place_order
    ],
    prompt=prompt
)

executor = AgentExecutor(
    agent=agent,
    tools=[
        search_mall_product,
        build_shopping_cart,
        generate_order_preview,
        simulate_place_order
    ],
    verbose=True,
    max_iterations=10,
    handle_parsing_errors=True
)

四、语音输入处理(前端集成)

用户通过手机语音输入,需先转为文本:

方案 A:微信小程序 / App 内集成

复制代码
// 前端(JavaScript)
wx.startRecord({
  success: function(res) {
    const tempFilePath = res.tempFilePath;
    wx.uploadFile({
      url: 'https://your-server.com/asr',
      filePath: tempFilePath,
      name: 'voice',
      success: function(asrRes) {
        const text = JSON.parse(asrRes.data).text;
        // 发送给 LangChain Agent
        callAgent(text);
      }
    });
  }
});

方案 B:使用云服务(阿里云/讯飞)

  • 调用 语音识别 API → 获取文本 → 传给后端 Agent

ASR 提示

用户语音:"帮我点一份杨国福麻辣烫,少放辣,再加一瓶雪碧"


五、完整运行流程

用户输入:

"帮我点一份杨国福麻辣烫,少放辣,再加一瓶雪碧"

Agent 执行步骤:

  1. 调用 search_mall_product("杨国福", "麻辣烫")

    → 返回商品信息

  2. 调用 build_shopping_cart(product_id="yangguofu_001", spice_level="微辣", extras=["雪碧"])

    → 构建购物车(注意:"少放辣" → 映射为"微辣")

  3. 调用 generate_order_preview(cart)

    → 返回预览消息(含总价、商品、备注)

  4. 等待用户确认(关键!)

    • 系统回复预览 + "请回复'确认下单'"
    • 用户在手机上点击"确认"或语音说"确认下单"
  5. 调用 simulate_place_order("确认下单")

    → 返回模拟订单号 + 提示"请在美团 App 支付"


六、安全与合规设计(必须实现!)

风险 解决方案
未经同意下单 所有下单前必须生成 人类可读预览 + 用户显式确认
隐私泄露 不存储用户语音/地址,会话结束后清除上下文
支付安全 绝不处理真实支付,仅生成美团 deep link 或跳转官方 App
幻觉下单 工具严格校验参数(如辣度选项白名单)
审计追踪 记录所有工具调用日志(用户ID、时间、操作)

📜 合规依据

《生成式人工智能服务管理暂行办法》第十二条:

"提供者应当采取有效措施防范......未经授权的交易行为。"


七、部署方案

后端(Python FastAPI)

复制代码
# main.py
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class VoiceRequest(BaseModel):
    text: str

@app.post("/agent")
def run_agent(req: VoiceRequest):
    result = executor.invoke({"input": req.text})
    return {"response": result["output"]}

前端(手机 App / 小程序)

  • 语音 → ASR → 调用 /agent → 展示结果 → 确认按钮

部署命令

复制代码
pip install fastapi uvicorn langchain-openai duckduckgo-search
uvicorn main:app --reload

八、扩展方向

  1. 真实美团对接

    • 申请美团开放平台企业权限
    • 替换 simulate_place_order 为真实 API(需 OAuth2 授权)
  2. 多轮对话

    • "不要雪碧了,换成可乐" → Agent 更新购物车
  3. 地址记忆

    • 通过用户授权,从美团获取默认地址
  4. 异常处理

    • 店铺休息 → 自动推荐附近同类店铺

✅ 总结:关键成功要素

要素 实现方式
工具精准 商品/辣度/附加品结构化定义
用户可控 下单前强制预览 + 确认
安全合规 不碰支付、不存隐私、可审计
体验流畅 语音→文本→Agent→确认→跳转美团

💡 这不是"全自动下单",而是"智能辅助下单" ------
AI 负责理解意图和准备订单,用户负责最终决策,这才是负责任的 AI 应用。


如果你需要:

  • 完整的 FastAPI 代码
  • 微信小程序前端模板
  • 美团 Deep Link 生成方法
  • 多商品订单支持

欢迎继续提出!

相关推荐
Agent产品评测局2 小时前
中国龙虾ai软件有哪些选择?2026自动化选型指南
运维·人工智能·ai·chatgpt·自动化
健康人猿2 小时前
Grok成年模式(Spicy Mode)深度解析 | 有多野?怎么启用?
人工智能
duyinbi75172 小时前
感受野坐标注意力卷积改进YOLOv26双向空间加权与自适应通道建模协同突破
人工智能·yolo·目标跟踪
炎爆的土豆翔2 小时前
bitwise_not`性能测试:手写普通循环、AVX2 与 OpenCV 内置实现对比
人工智能·opencv·webpack
INDEMIND2 小时前
牵手海尔、TCL,INDEMIND家用具身陪伴机器人AI平台加速家庭AI陪伴落地
人工智能·机器人·陪伴机器人
wheelmouse77882 小时前
AI 时代的 Git 进阶术:如何优雅地让多个 Agent 并行开发
人工智能·git·ai编程
ZPC82102 小时前
PPO (Proximal Policy Optimization) 算法模块详细拆解
人工智能·pytorch·算法·机器人
仙女修炼史2 小时前
FCOS: Fully Convolutional One-Stage Object Detection
人工智能·目标检测·目标跟踪
大傻^2 小时前
Spring AI Alibaba 多模态开发:集成视觉理解与视频分析能力
人工智能·spring·音视频·springai·springaialibaba·混合检索