基于LLM与工具调用的电商智能体:架构设计与实战避坑指南

发布时间:2026/8/8 6:47:12
基于LLM与工具调用的电商智能体:架构设计与实战避坑指南 1. 项目缘起为什么我们需要一个电商销售与服务Agent最近几年电商领域的竞争已经从单纯的价格战、流量战转向了更深层次的效率与服务战。无论是平台型电商、品牌独立站还是直播带货商家每天都要面对海量的咨询、订单处理、售后跟进和营销活动。传统的人力客服模式在高峰期响应慢、成本高且难以保证服务标准的一致性而简单的机器人客服又常常因为“听不懂人话”或“答非所问”而让客户体验大打折扣。正是在这种背景下“电商销售与服务Agent”的概念开始被频繁提及。它不是一个简单的聊天机器人而是一个具备一定自主决策和任务执行能力的智能体。想象一下一个能够7x24小时在线、理解复杂意图、主动推荐商品、处理退换货申请、甚至根据用户行为预测需求并推送优惠的“虚拟员工”。这不仅能极大解放人力更能将标准化的服务体验提升到一个新的高度甚至创造新的销售机会。我之所以对这个项目感兴趣是因为在之前参与的几个电商中后台系统开发中深刻感受到了“人机协同”的痛点。我们尝试过集成市面上的SaaS客服系统但总感觉隔靴搔痒无法深度融入我们自己的业务流和数据流。于是我们决定自己动手从零开始构建一个贴合自身业务场景的Agent。这个项目不是纸上谈兵而是我们团队在过去半年里经过多次迭代、踩了无数坑之后最终跑通并投入实际业务场景的一个实战总结。今天我就把这个项目的核心设计思路、技术选型、实现细节以及那些“血泪教训”毫无保留地分享出来。2. Agent的核心能力定义与架构设计在动手写代码之前最关键的一步是明确我们的Agent到底要做什么以及它的能力边界在哪里。贪多嚼不烂一个试图“包打天下”的Agent最终往往会变成一个“四不像”什么都做不好。2.1 能力象限销售、服务与协同基于我们自身的业务需求我们将Agent的核心能力划分为三个象限智能导购与销售转化这是提升GMV商品交易总额的直接抓手。Agent需要能够理解用户的模糊需求如“我想买件夏天穿的、透气一点的衬衫”通过多轮对话进行需求澄清并结合用户画像、实时库存、促销活动进行精准的商品推荐。更进一步它需要掌握一定的销售技巧比如在用户犹豫时适时推送限时优惠券或者进行关联商品的搭配推荐。自动化订单与售后服务这是提升运营效率和客户满意度的关键。Agent应能自动处理高频、标准的售后场景例如状态查询用户问“我的订单到哪了”Agent能自动调用物流接口并返回实时轨迹。自助退换货用户发起退货申请Agent能引导用户选择原因、上传凭证并自动创建售后工单流转至后台系统。简单问题解答关于运费、保修期、商品规格等标准问题能直接从知识库中获取准确答案。内部工作流协同这是Agent价值升华的部分。当遇到无法自动处理的复杂问题如重大投诉、特殊退款要求时Agent不应只是说“我帮您转接人工”而应该能够理解问题的紧急程度和类型自动创建任务工单指派给相应部门的特定客服或运营人员并将之前的对话上下文和用户信息一并附上实现“无缝转交”。2.2 技术架构选型为什么是“大脑工具”模式明确了能力范围接下来就是技术选型。当前构建Agent主要有两种主流范式端到端的纯LLM大语言模型驱动和“规划器工具”的模块化设计。我们毫不犹豫地选择了后者。原因很简单电商业务逻辑复杂、数据实时性强、对准确性要求极高。一个纯LLM即使能力再强也存在“幻觉”胡编乱造、无法获取实时数据比如库存、价格、以及无法执行具体操作比如创建订单的固有缺陷。因此我们的架构核心思想是让LLM充当“大脑”负责理解和规划让一系列可靠的“工具”充当“手脚”负责执行和查询。具体架构如下图所示概念图[用户输入] | v [意图识别与对话管理模块] (LLM驱动) | v [任务规划器] (LLM驱动) - 判断需要调用哪些工具 | v [工具执行层] | | | v v v [商品查询工具] [订单查询工具] [售后工单工具] ... (其他业务工具) | | | v v v [外部API/数据库] - 获取实时数据或执行操作 | v [结果格式化与回复生成] (LLM驱动) | v [回复用户]这个架构的关键优势在于可控性每个工具都是我们精心编写和测试的代码执行逻辑确定避免了LLM的随机性。实时性工具可以直接调用最新的数据库和API保证信息的准确性。安全性通过工具来约束LLM的行为防止其执行危险或越权的操作比如直接修改数据库。可扩展性新的业务能力可以通过添加新的工具来快速实现无需重新训练整个模型。在“大脑”的选择上我们综合评估了成本、效果和响应速度最终选择了OpenAI的GPT-4系列模型作为核心LLM。虽然也有考虑过开源模型但在意图理解的准确性和复杂任务规划的连贯性上GPT-4在项目初期给了我们更大的成功把握。后续我们也在部分对成本敏感的场景中尝试用DeepSeek或GLM等国内优秀模型进行替代这是后话。3. 核心模块实现细节拆解有了顶层设计接下来就是一个个模块的攻坚。这里我挑几个最有代表性、踩坑最多的模块详细说说。3.1 意图识别与对话状态管理让Agent“听得懂、记得住”这是Agent与用户交互的起点也是最容易让用户体验“智障”的环节。我们摒弃了传统的基于关键词或简单分类模型的意图识别而是完全利用LLM的能力。实现方案 我们设计了一个系统提示词System Prompt它定义了Agent的角色、能力范围和对话规则。同时我们维护一个对话历史上下文每次用户发起新对话时我们将系统提示词、最近N轮对话历史为了控制Token消耗和当前用户问题一起发送给LLM。但这里有个关键技巧我们不是让LLM直接生成回复而是让它先输出一个结构化的中间结果。我们定义了一个JSON格式的输出要求让LLM必须按这个格式回答{ “identified_intent”: “query_order_status” // 识别出的意图来自预定义的意图列表 “extracted_parameters”: { // 从用户问题中提取的关键参数 “order_id”: “123456789” }, “requires_clarification”: false // 是否需要进一步澄清 “clarification_question”: “” // 如需澄清要问什么 “confidence”: 0.95 // 意图识别的置信度 }为什么这么做标准化结构化的输出便于后续程序处理可以直接作为调用工具的输入。可控性我们可以通过confidence字段设置阈值。比如低于0.7的意图可以让Agent回复“我不太确定您的意思您是想问订单状态还是商品信息”从而引导用户澄清避免误操作。状态管理requires_clarification和clarification_question让我们能轻松实现多轮澄清对话。例如用户说“我要退货”但没说是哪个订单。Agent就可以设置requires_clarification: true并生成clarification_question: “请问您要退的是哪个订单可以提供订单号吗”。踩坑心得对话历史上下文的管理是个技术活。保存太多轮历史Token消耗大、成本高而且可能让模型关注到过于久远的不相关信息保存太少Agent又容易“遗忘”上下文。我们的经验是对于电商场景保存最近5-10轮对话通常足够。同时对于已经明确提取的参数如订单号、商品ID可以将其从对话历史中“摘要”出来作为独立字段存储这样既能减少Token消耗又能保证关键信息不丢失。3.2 工具Tools的设计与注册给Agent装上“瑞士军刀”工具是Agent能力的实体。每个工具本质上都是一个函数它有明确的名称、描述、参数列表和执行逻辑。一个商品搜索工具的示例# 工具定义 class ProductSearchTool: name “search_products” description “根据用户描述的关键词、类别、价格范围等条件搜索商品。” parameters [ # 定义工具需要的参数 {“name”: “keywords” “type”: “string” “description”: “商品关键词如’男士衬衫‘”} {“name”: “category” “type”: “string” “description”: “商品类别如’上衣‘”} {“name”: “max_price” “type”: “number” “description”: “最高价格”} ] def run(self keywords: str None category: str None max_price: float None): “””执行搜索逻辑””” # 构建数据库查询或调用搜索微服务 query_filters {} if keywords: query_filters[‘name__icontains’] keywords if category: query_filters[‘category’] category if max_price: query_filters[‘price__lte’] max_price # 假设使用Django ORM products Product.objects.filter(**query_filters).order_by(‘-sales’)[:10] # 将结果格式化为LLM容易理解的文本 results [] for p in products: results.append(f”商品ID: {p.id} 名称: {p.name} 价格: {p.price} 库存: {p.stock}”) return “\n”.join(results)工具注册与发现 我们需要一个工具注册中心将所有定义好的工具注册进去。当任务规划器决定要调用工具时它会把所有已注册工具的名称、描述和参数格式告诉LLM。LLM根据当前对话内容选择最合适的工具并生成符合该工具参数格式的调用指令。核心技巧工具的描述description至关重要它相当于给LLM看的“工具说明书”。描述必须清晰、无歧义准确说明工具的功能和每个参数的意义。我们曾经因为一个工具的description写得太模糊导致LLM总是错误地调用它调试了很久。3.3 任务规划与执行循环Agent的“思考-行动”链条这是整个Agent的“发动机”。它的工作流程是一个循环观察获取当前用户输入和对话历史。思考LLM作为规划器分析当前状态决定下一步是直接回复用户还是需要调用工具。如果需要调用工具是调用哪一个参数是什么。行动执行被选中的工具获取工具的执行结果可能是数据也可能是操作成功的确认信息。再观察将工具执行结果作为新的“观察”输入给LLM。再思考LLM判断任务是否完成。如果完成则生成最终回复给用户如果未完成例如搜索结果显示没有商品需要调整条件则继续规划下一步行动比如建议用户放宽搜索条件。这个循环可能执行多次直到任务达成或达到最大循环次数防止死循环。实现上的一个难点如何让LLM在“思考”时能基于工具执行的结果进行有效推理我们的解决方案是在每次将工具结果喂给LLM时都会在提示词中强调“这是工具XXX的执行结果请基于这个结果继续分析。” 并且我们会把当前循环的步骤和之前调用过的工具也简要地放在上下文中帮助LLM维持任务的整体感。4. 关键业务场景的实战演练与避坑指南理论说再多不如看实战。下面我通过两个最典型的业务场景带你走一遍Agent的完整工作流程并分享其中遇到的“坑”和解决方案。4.1 场景一多轮交互的智能商品推荐用户输入“我想给爸爸买件礼物他喜欢钓鱼预算500块左右。”Agent内部处理流程意图识别LLM分析后输出identified_intent: “product_recommendation”并提取出参数recipient: “爸爸” hobby: “钓鱼” budget: “500”。置信度很高无需澄清。任务规划规划器LLM看到意图是商品推荐且已有一些参数它决定调用search_products工具。但它发现“钓鱼”是一个爱好不是明确的关键词或类别。于是它先进行了一次“内部推理”决定将“钓鱼”转化为更具体的搜索关键词如“渔具”、“钓鱼竿”、“钓鱼服”等。这是通过在一个单独的“关键词扩展”提示词中让LLM完成的。工具执行调用search_products工具关键词为“渔具”最大价格500。工具返回一批商品列表。规划与再执行LLM收到商品列表后发现结果可能不够精准或丰富。它决定再次调用工具这次关键词换成“钓鱼 配件”同时尝试不设类别筛选。第二次工具执行返回另一批结果。结果整合与回复生成LLM将两次工具执行的结果进行对比和整合挑选出几款最符合“礼物”属性如包装精美、评价好和预算的商品。然后它生成最终回复“根据您的需求我为您筛选了几款适合作为礼物的渔具1. XX品牌便携式钓椅价格488轻便舒适2. YY品牌多功能钓鱼工具盒价格368内含多种小工具… 您对哪种更感兴趣我可以为您详细介绍。”避坑指南关键词扩展陷阱直接让LLM用“钓鱼”去搜索效果往往很差。必须设计一个“查询理解与重写”的步骤利用LLM或更传统的NLP方法将用户口语化描述转换成有效的搜索关键词。我们后来甚至接入了专门的搜索词联想API。结果排序与过滤工具返回的原始数据比如按销量排序不一定适合推荐场景。LLM在整合结果时需要被引导去考虑“礼物”、“送长辈”、“性价比”等隐性因素。我们在系统提示词中明确加入了这些考量维度。避免信息过载不要一次性把几十个商品丢给LLM去总结这既浪费Token效果也不好。我们让搜索工具默认只返回Top 10的结果并且优先返回有图、描述详尽的商品。4.2 场景二从咨询到自动化工单创建的售后流程用户输入“我上周买的黑色L码衬衫尺码不对想换一件M码的。”Agent内部处理流程意图识别LLM识别出identified_intent: “after_sales_exchange”售后换货。提取参数product_feature: “黑色L码衬衫”desired_action: “换M码”。但缺少关键参数order_id订单号。多轮澄清由于confidence足够高但参数不全Agent进入澄清模式。它根据requires_clarification: true和生成的clarification_question: “好的为您办理换货。请问您的订单号是多少我需要用它来查询您的订单详情。”回复用户。用户补充用户提供订单号“ORD20241001001”。再次识别与规划LLM收到新信息更新参数。现在它规划需要调用两个工具query_order_details根据订单号查询订单详情和create_exchange_ticket创建换货工单。顺序执行首先调用query_order_details传入订单号。工具返回该订单的详细信息包括购买的商品列表、收货地址、订单状态等。LLM收到订单详情后核对该订单中是否有“黑色L码衬衫”。确认无误后它开始调用create_exchange_ticket。此时它需要自动组装工单参数从对话中提取“换M码”的需求从订单详情中提取商品ID、用户ID、原订单号等信息。执行与确认create_exchange_ticket工具执行成功返回一个工单号“EXC20241102001”。LLM生成最终回复“已为您成功创建换货申请工单号EXC20241102001。系统将为您安排更换一件M码的黑色衬衫。后续物流信息您可以在‘我的售后’中查看客服也会在24小时内与您确认。请问还有其他需要帮助的吗”避坑指南参数验证与纠错在调用query_order_details前最好先对用户提供的订单号做简单格式校验。我们曾遇到用户输错一位数字导致查询失败。后来我们在工具层增加了模糊查询和友好提示的逻辑。工单参数的自动填充这是体验的关键。不能让用户重复输入订单里已有的信息如地址、商品ID。我们的做法是在系统设计时就确保create_exchange_ticket工具能接受从query_order_details结果中自动映射的字段。这需要前后端数据结构对齐。异常流程处理如果订单已超过换货周期怎么办如果该商品M码无货怎么办这些业务规则必须提前编码到工具里。例如create_exchange_ticket工具内部会先校验业务规则如果失败则返回明确的错误原因如“该商品已超过7天换货期”然后LLM才能将这个原因转化为用户能听懂的话术回复给用户。绝对不能让LLM自己“编造”业务规则5. 性能优化、评估与持续迭代一个能跑起来的Agent只是开始一个能在生产环境稳定、高效、低成本服务的Agent才是目标。5.1 性能优化速度、成本与稳定性的三角平衡响应速度LLM的API调用是主要延迟来源。我们采取了以下措施缓存对常见、结果变化不频繁的查询如“退货政策是什么”将LLM的最终回复进行缓存。下次遇到相同或高度相似的问题直接返回缓存结果。流式输出对于需要LLM生成较长回复的场景使用API的流式响应streaming让用户能边看边等提升感知速度。超时与重试为LLM API调用设置合理的超时时间并实现指数退避的重试机制应对网络抖动。成本控制GPT-4的Token成本不菲。上下文管理如前所述精炼对话历史移除无关Token。模型分级将意图识别、任务规划等对智能要求高的任务交给GPT-4而将一些简单的文本格式化、信息提取任务尝试用更便宜的模型如GPT-3.5-Turbo甚至规则来处理。监控与告警建立每日Token消耗监控设置阈值告警及时发现异常消耗可能提示有循环调用bug。稳定性工具调用的健壮性每个工具函数都必须有完善的异常处理try-catch返回统一的错误格式防止单个工具失败导致整个Agent崩溃。循环次数限制严格限制任务规划-执行循环的最大次数我们设为5次防止陷入死循环。降级方案当LLM服务或关键工具不可用时有降级到规则引擎或简单问答库的预案。5.2 效果评估如何判断Agent做得好不好不能凭感觉必须建立量化的评估体系。自动化评估任务完成率针对我们设计好的高频场景测试集Agent能否独立完成闭环任务的比例。工具调用准确率LLM选择正确工具、并生成正确参数的比例。人工评估定期抽样对话由运营或客服同学从“问题解决程度”、“回复准确性”、“语言流畅度”、“用户体验”等多个维度打分。业务指标关联客服人力占比变化Agent上线后人工客服处理的会话量是否下降转化率提升通过Agent推荐商品并最终下单的转化率与普通商品列表页的转化率对比如何满意度调查在Agent服务结束后推送简单的满意度评分如1-5星收集直接反馈。5.3 持续迭代基于反馈的模型与流程优化Agent不是一次开发完就结束的它需要持续喂养数据、持续优化。bad case收集与分析建立渠道收集所有Agent处理失败或用户不满意的对话bad case。每周进行复盘分析原因是意图识别错了工具调用错了还是业务规则没覆盖提示词工程优化大多数问题可以通过优化系统提示词和工具描述来解决。例如我们发现Agent有时会过度追问细节就在提示词里加了一句“在不过度打扰用户的前提下尽可能高效地收集必要信息”。工具库扩充随着业务发展新的需求会产生。例如我们后来增加了“查询积分余额”、“兑换优惠券”等工具。知识库更新商品信息、促销活动、售后政策等是动态变化的必须建立机制确保Agent调用的工具和查询的知识库是最新的。这个电商销售与服务Agent项目从构想到上线再到持续优化是一个典型的“AI赋能业务”的落地过程。它让我深刻体会到现阶段成功的AI应用不是追求一个无所不能的“通用人工智能”而是将一个强大的LLM“大脑”与严谨的业务逻辑“工具”和“数据”紧密结合在明确的边界内解决具体问题。其中对业务的理解深度、对异常情况的细致处理、以及对用户体验的持续关注远比单纯追求模型的先进性更重要。如果你也正在考虑为你的业务引入一个AI Agent希望我们这些从实战中获得的经验和教训能帮你少走一些弯路。