通过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 生成方法
  • 多商品订单支持

欢迎继续提出!

相关推荐
小陈工1 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
墨染天姬5 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
AI成长日志5 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_948114246 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠6 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
FserSuN6 小时前
LangChain DeepAgent 多 Agent 架构原理学习
架构·langchain
黎阳之光6 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好6 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力6 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo6 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin