agent 对话式 订购、查询、对比美食、酒店性价比的后端基本架构是什么样的

阿里云服务器

构建一个支持对话式订购、查询、对比美食/酒店性价比的 Agent 后端架构,核心在于将大语言模型(LLM)的意图理解能力传统业务系统的结构化数据能力相结合。

这是一个典型的 Agentic RAG (检索增强生成) + Function Calling (工具调用) 架构。以下是 2026 年主流的后端基本架构设计:


🏗️ 整体架构分层图

graph TD
    User[用户 (微信/APP/Web)] --> Gateway[API 网关 / WebSocket]
    Gateway --> AgentCore[Agent 编排引擎]
    
    subgraph "Agent 核心层 (Brain)"
        AgentCore --> Planner[任务规划器 (Planner)]
        AgentCore --> Memory[记忆模块 (Short/Long Term)]
        AgentCore --> LLM[大模型路由 (LLM Router)]
    end
    
    subgraph "工具与技能层 (Tools & Skills)"
        Planner --> ToolExecutor[工具执行器]
        ToolExecutor --> SearchTool[搜索/查询工具]
        ToolExecutor --> CompareTool[对比分析工具]
        ToolExecutor --> OrderTool[下单/支付工具]
        ToolExecutor --> MapTool[地图/LBS 工具]
    end
    
    subgraph "数据与服务层 (Data & Services)"
        SearchTool --> VectorDB
        SearchTool --> SearchEngine[外部搜索引擎/API]
        CompareTool --> DataWarehouse
        OrderTool --> OMS[订单管理系统]
        OrderTool --> Payment[支付网关]
        MapTool --> GIS[地图服务]
    end
    
    subgraph "监控与安全"
        AgentCore --> Guardrails[安全护栏/敏感词过滤]
        ToolExecutor --> RateLimiter[限流/防刷]
    end

🧩 核心模块详解

1. 接入层 (Interface Layer)

  • 协议:推荐使用 WebSocketSSE (Server-Sent Events)

    • 原因:对话式 Agent 需要流式输出(打字机效果),且多轮对话需要保持长连接以维持上下文状态。

  • 会话管理:生成唯一的 Session_ID,用于关联用户的整个对话生命周期。

2. Agent 编排引擎 (Orchestration Layer) - 大脑

这是最核心的部分,通常基于 LangChain, LlamaIndex, AutoGen 或自研框架。

  • 意图识别 (Intent Recognition)

    • 判断用户是想“查信息”、“做对比”还是“直接买”。

    • 示例:“帮我找附近便宜的火锅” -> SEARCH_INTENT;“A 酒店和 B 酒店哪个划算” -> COMPARE_INTENT

  • 任务规划 (Planner)

    • 对于复杂指令(如“帮我订一个评分高且离地铁近的酒店,要便宜点的”),将其拆解为子任务:

    1. 调用地图 API 获取用户位置。

    2. 调用搜索工具查找附近酒店。

    3. 调用比价工具筛选“便宜”且“高分”。

    4. 生成推荐列表。

    5. 等待用户确认后调用下单工具。

  • 状态管理 (State Management)

    • 维护槽位 (Slots):例如在订餐流程中,记录 { cuisine: "火锅", location: "朝阳", budget: "100", time: "今晚" }。如果槽位未满,自动发起追问。

3. 工具层 (Tool Layer) - 手脚

Agent 通过 Function Calling 调用这些工具。

  • 查询工具 (Search Tool)

    • 混合检索:结合 关键词搜索 (Elasticsearch)向量检索 (Vector DB)

    • 场景:用户说“适合情侣约会的安静餐厅”,向量检索能理解“安静”、“浪漫”的语义,而不仅仅是匹配关键词。

  • 对比工具 (Comparison Tool)

    • 结构化数据处理:从数据库提取多个实体的属性(价格、评分、距离、设施)。

    • LLM 分析:将结构化数据转化为自然语言对比报告(“A 酒店比 B 酒店贵 50 元,但评分高 0.5 分,且含早餐”)。

  • 交易工具 (Order/Payment Tool)

    • 对接内部 OMS (订单系统) 和支付网关。

    • 关键机制Human-in-the-loop (人机回环)。在真正扣款前,必须生成一个“确认卡片”,让用户点击“确认支付”,Agent 才能执行最终下单动作,防止幻觉导致误操作。

  • 外部 API 集成

    • 对接美团/大众点评/携程/OpenTable 等第三方 API(如有授权),或爬取公开数据(需合规)。

4. 数据层 (Data Layer)

  • 向量数据库 (Vector DB):存储商家详情、用户评论、SOP 文档。用于语义搜索和 RAG。

    • 技术选型:Milvus, Pinecone, Qdrant, 或阿里云 DashVector。

  • 关系型数据库 (RDBMS):存储订单、用户信息、实时库存、确切价格。

  • 缓存 (Redis):存储多轮对话的上下文 (Context)、热点商家数据、Session 状态。

5. 安全与风控 (Guardrails)

  • 输入过滤:防止 Prompt 注入攻击,过滤敏感词。

  • 输出校验:确保 Agent 生成的价格、地址不与数据库严重偏离(幻觉检测)。

  • 幂等性控制:防止用户重复点击导致重复下单。


🔄 典型交互流程示例:对比并订购

用户:“帮我对比一下海底捞和西贝,看哪个性价比高,然后帮我定个便宜的那家。”

  1. 意图识别:识别为 COMPARE + ORDER 复合意图。

  2. 槽位检查:发现缺少“地点”、“人数”、“时间”。

  3. 多轮追问:Agent 回复:“好的,请问您想在哪个区域用餐?几位?大概几点?”

  4. 用户补充:“朝阳区大悦城,2 人,晚上 7 点。”

  5. 任务执行 (Parallel)

    • Thread A:调用搜索工具,查“海底捞 (大悦城店)”的价格、评分、人均。

    • Thread B:调用搜索工具,查“西贝 (大悦城店)”的价格、评分、人均。

  6. 对比分析

    • 工具将数据传给 LLM。

    • LLM 生成对比文案:“海底捞人均 150 元,评分 4.8;西贝人均 120 元,评分 4.6。西贝性价比更高。”

  7. 确认环节 (Critical)

    • Agent 生成订单预览卡片:“为您推荐西贝,预计消费 240 元,是否确认下单?”

    • 用户点击“确认”

  8. 执行下单

    • 调用 create_order 工具,写入数据库,调用支付接口。

  9. 反馈结果:“下单成功!订单号 xxx,请按时就餐。”


💡 关键技术难点与解决方案

难点解决方案
数据实时性价格和库存变化快。解决方案:搜索工具必须实时调用业务数据库或第三方 API,不能仅依赖向量库的静态快照。
幻觉问题模型可能编造不存在的菜品或价格。解决方案:Grounding (接地) 技术,强制模型在回答时必须引用检索到的具体数据片段;在下单前增加“事实校验”步骤。
复杂对比逻辑“性价比”是主观的。解决方案:允许用户定义权重(如“我更看重口味而不是价格”),或在 Prompt 中预设加权算法公式。
长上下文记忆用户可能聊了 20 轮后才下单。解决方案:使用 Summary Memory (总结历史对话) 或 Vector Memory (将历史对话向量化检索),避免 Token 超限。
多模态展示纯文字对比不直观。解决方案:Agent 返回结构化 JSON,前端渲染为对比表格地图标记卡片轮播,而不仅仅是文本。

🛠️ 推荐技术栈 (2026 版)

  • 开发框架: LangChain, LlamaIndex, Microsoft AutoGen, 或阿里云百炼 (Model Studio) 的 Agent 编排功能。

  • 大模型: 通义千问 (Qwen-Max/Plus), GPT-4o, 或针对垂直领域微调的开源模型 (如 Llama 3 衍生版)。

  • 向量库: Milvus, Qdrant, Elasticsearch (Vector plugin).

  • 后端语言: Python (首选,生态最丰富), Go (高性能网关).

  • 消息队列: Kafka/RabbitMQ (处理异步下单、日志记录).

  • 部署: Kubernetes + Docker, Serverless (函数计算) 用于弹性扩缩容。

这个架构既能保证对话的灵活性,又能确保交易数据的准确性和安全性,是目前构建此类商业 Agent 的标准范式。