构建一个支持对话式订购、查询、对比美食/酒店性价比的 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)
协议:推荐使用 WebSocket 或 SSE (Server-Sent Events)。
原因:对话式 Agent 需要流式输出(打字机效果),且多轮对话需要保持长连接以维持上下文状态。
会话管理:生成唯一的
Session_ID,用于关联用户的整个对话生命周期。
2. Agent 编排引擎 (Orchestration Layer) - 大脑
这是最核心的部分,通常基于 LangChain, LlamaIndex, AutoGen 或自研框架。
意图识别 (Intent Recognition):
判断用户是想“查信息”、“做对比”还是“直接买”。
示例:“帮我找附近便宜的火锅” ->
SEARCH_INTENT;“A 酒店和 B 酒店哪个划算” ->COMPARE_INTENT。任务规划 (Planner):
对于复杂指令(如“帮我订一个评分高且离地铁近的酒店,要便宜点的”),将其拆解为子任务:
调用地图 API 获取用户位置。
调用搜索工具查找附近酒店。
调用比价工具筛选“便宜”且“高分”。
生成推荐列表。
等待用户确认后调用下单工具。
状态管理 (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 生成的价格、地址不与数据库严重偏离(幻觉检测)。
幂等性控制:防止用户重复点击导致重复下单。
🔄 典型交互流程示例:对比并订购
用户:“帮我对比一下海底捞和西贝,看哪个性价比高,然后帮我定个便宜的那家。”
意图识别:识别为
COMPARE+ORDER复合意图。槽位检查:发现缺少“地点”、“人数”、“时间”。
多轮追问:Agent 回复:“好的,请问您想在哪个区域用餐?几位?大概几点?”
用户补充:“朝阳区大悦城,2 人,晚上 7 点。”
任务执行 (Parallel):
Thread A:调用搜索工具,查“海底捞 (大悦城店)”的价格、评分、人均。
Thread B:调用搜索工具,查“西贝 (大悦城店)”的价格、评分、人均。
对比分析:
工具将数据传给 LLM。
LLM 生成对比文案:“海底捞人均 150 元,评分 4.8;西贝人均 120 元,评分 4.6。西贝性价比更高。”
确认环节 (Critical):
Agent 生成订单预览卡片:“为您推荐西贝,预计消费 240 元,是否确认下单?”
用户点击“确认”。
执行下单:
调用
create_order工具,写入数据库,调用支付接口。反馈结果:“下单成功!订单号 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 的标准范式。