基于LLM与工具调用的电商智能体:架构设计与实战避坑指南
2026/8/8 6:46:58 网站建设 项目流程

1. 项目缘起:为什么我们需要一个电商销售与服务Agent?

最近几年,电商领域的竞争已经从单纯的价格战、流量战,转向了更深层次的效率与服务战。无论是平台型电商、品牌独立站,还是直播带货,商家每天都要面对海量的咨询、订单处理、售后跟进和营销活动。传统的人力客服模式,在高峰期响应慢、成本高,且难以保证服务标准的一致性;而简单的机器人客服,又常常因为“听不懂人话”或“答非所问”而让客户体验大打折扣。

正是在这种背景下,“电商销售与服务Agent”的概念开始被频繁提及。它不是一个简单的聊天机器人,而是一个具备一定自主决策和任务执行能力的智能体。想象一下,一个能够7x24小时在线、理解复杂意图、主动推荐商品、处理退换货申请、甚至根据用户行为预测需求并推送优惠的“虚拟员工”。这不仅能极大解放人力,更能将标准化的服务体验提升到一个新的高度,甚至创造新的销售机会。

我之所以对这个项目感兴趣,是因为在之前参与的几个电商中后台系统开发中,深刻感受到了“人机协同”的痛点。我们尝试过集成市面上的SaaS客服系统,但总感觉隔靴搔痒,无法深度融入我们自己的业务流和数据流。于是,我们决定自己动手,从零开始构建一个贴合自身业务场景的Agent。这个项目不是纸上谈兵,而是我们团队在过去半年里,经过多次迭代、踩了无数坑之后,最终跑通并投入实际业务场景的一个实战总结。今天,我就把这个项目的核心设计思路、技术选型、实现细节以及那些“血泪教训”毫无保留地分享出来。

2. Agent的核心能力定义与架构设计

在动手写代码之前,最关键的一步是明确我们的Agent到底要做什么,以及它的能力边界在哪里。贪多嚼不烂,一个试图“包打天下”的Agent最终往往会变成一个“四不像”,什么都做不好。

2.1 能力象限:销售、服务与协同

基于我们自身的业务需求,我们将Agent的核心能力划分为三个象限:

  1. 智能导购与销售转化:这是提升GMV(商品交易总额)的直接抓手。Agent需要能够理解用户的模糊需求(如“我想买件夏天穿的、透气一点的衬衫”),通过多轮对话进行需求澄清,并结合用户画像、实时库存、促销活动,进行精准的商品推荐。更进一步,它需要掌握一定的销售技巧,比如在用户犹豫时适时推送限时优惠券,或者进行关联商品的搭配推荐。

  2. 自动化订单与售后服务:这是提升运营效率和客户满意度的关键。Agent应能自动处理高频、标准的售后场景,例如:

    • 状态查询:用户问“我的订单到哪了?”,Agent能自动调用物流接口并返回实时轨迹。
    • 自助退换货:用户发起退货申请,Agent能引导用户选择原因、上传凭证,并自动创建售后工单,流转至后台系统。
    • 简单问题解答:关于运费、保修期、商品规格等标准问题,能直接从知识库中获取准确答案。
  3. 内部工作流协同:这是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在项目初期给了我们更大的成功把握。后续我们也在部分对成本敏感的场景中,尝试用DeepSeekGLM等国内优秀模型进行替代,这是后话。

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 // 意图识别的置信度 }

为什么这么做?

  1. 标准化:结构化的输出便于后续程序处理,可以直接作为调用工具的输入。
  2. 可控性:我们可以通过confidence字段设置阈值。比如低于0.7的意图,可以让Agent回复“我不太确定您的意思,您是想问订单状态,还是商品信息?”,从而引导用户澄清,避免误操作。
  3. 状态管理requires_clarificationclarification_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的“发动机”。它的工作流程是一个循环:

  1. 观察:获取当前用户输入和对话历史。
  2. 思考:LLM(作为规划器)分析当前状态,决定下一步是直接回复用户,还是需要调用工具。如果需要调用工具,是调用哪一个,参数是什么。
  3. 行动:执行被选中的工具,获取工具的执行结果(可能是数据,也可能是操作成功的确认信息)。
  4. 再观察:将工具执行结果作为新的“观察”输入给LLM。
  5. 再思考:LLM判断任务是否完成。如果完成,则生成最终回复给用户;如果未完成(例如,搜索结果显示没有商品,需要调整条件),则继续规划下一步行动(比如建议用户放宽搜索条件)。

这个循环可能执行多次,直到任务达成或达到最大循环次数(防止死循环)。

实现上的一个难点:如何让LLM在“思考”时,能基于工具执行的结果进行有效推理?我们的解决方案是,在每次将工具结果喂给LLM时,都会在提示词中强调:“这是工具XXX的执行结果,请基于这个结果继续分析。” 并且,我们会把当前循环的步骤和之前调用过的工具也简要地放在上下文中,帮助LLM维持任务的整体感。

4. 关键业务场景的实战演练与避坑指南

理论说再多,不如看实战。下面我通过两个最典型的业务场景,带你走一遍Agent的完整工作流程,并分享其中遇到的“坑”和解决方案。

4.1 场景一:多轮交互的智能商品推荐

用户输入:“我想给爸爸买件礼物,他喜欢钓鱼,预算500块左右。”

Agent内部处理流程:

  1. 意图识别:LLM分析后,输出identified_intent: “product_recommendation”,并提取出参数:recipient: “爸爸”, hobby: “钓鱼”, budget: “500”。置信度很高,无需澄清。
  2. 任务规划:规划器LLM看到意图是商品推荐,且已有一些参数,它决定调用search_products工具。但它发现“钓鱼”是一个爱好,不是明确的关键词或类别。于是,它先进行了一次“内部推理”,决定将“钓鱼”转化为更具体的搜索关键词,如“渔具”、“钓鱼竿”、“钓鱼服”等。这是通过在一个单独的“关键词扩展”提示词中让LLM完成的。
  3. 工具执行:调用search_products工具,关键词为“渔具”,最大价格500。工具返回一批商品列表。
  4. 规划与再执行:LLM收到商品列表后,发现结果可能不够精准或丰富。它决定再次调用工具,这次关键词换成“钓鱼 配件”,同时尝试不设类别筛选。第二次工具执行返回另一批结果。
  5. 结果整合与回复生成:LLM将两次工具执行的结果进行对比和整合,挑选出几款最符合“礼物”属性(如包装精美、评价好)和预算的商品。然后,它生成最终回复:“根据您的需求,我为您筛选了几款适合作为礼物的渔具:1. XX品牌便携式钓椅(价格488,轻便舒适);2. YY品牌多功能钓鱼工具盒(价格368,内含多种小工具)… 您对哪种更感兴趣?我可以为您详细介绍。”

避坑指南

  • 关键词扩展陷阱:直接让LLM用“钓鱼”去搜索,效果往往很差。必须设计一个“查询理解与重写”的步骤,利用LLM或更传统的NLP方法,将用户口语化描述转换成有效的搜索关键词。我们后来甚至接入了专门的搜索词联想API。
  • 结果排序与过滤:工具返回的原始数据(比如按销量排序)不一定适合推荐场景。LLM在整合结果时,需要被引导去考虑“礼物”、“送长辈”、“性价比”等隐性因素。我们在系统提示词中明确加入了这些考量维度。
  • 避免信息过载:不要一次性把几十个商品丢给LLM去总结,这既浪费Token,效果也不好。我们让搜索工具默认只返回Top 10的结果,并且优先返回有图、描述详尽的商品。

4.2 场景二:从咨询到自动化工单创建的售后流程

用户输入:“我上周买的黑色L码衬衫,尺码不对,想换一件M码的。”

Agent内部处理流程:

  1. 意图识别:LLM识别出identified_intent: “after_sales_exchange”(售后换货)。提取参数:product_feature: “黑色L码衬衫”desired_action: “换M码”。但缺少关键参数:order_id(订单号)。
  2. 多轮澄清:由于confidence足够高但参数不全,Agent进入澄清模式。它根据requires_clarification: true和生成的clarification_question: “好的,为您办理换货。请问您的订单号是多少?我需要用它来查询您的订单详情。”回复用户。
  3. 用户补充:用户提供订单号“ORD20241001001”。
  4. 再次识别与规划:LLM收到新信息,更新参数。现在它规划需要调用两个工具:query_order_details(根据订单号查询订单详情)和create_exchange_ticket(创建换货工单)。
  5. 顺序执行
    • 首先调用query_order_details,传入订单号。工具返回该订单的详细信息,包括购买的商品列表、收货地址、订单状态等。
    • LLM收到订单详情后,核对该订单中是否有“黑色L码衬衫”。确认无误后,它开始调用create_exchange_ticket。此时,它需要自动组装工单参数:从对话中提取“换M码”的需求,从订单详情中提取商品ID、用户ID、原订单号等信息。
  6. 执行与确认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做得好不好?

不能凭感觉,必须建立量化的评估体系。

  1. 自动化评估
    • 任务完成率:针对我们设计好的高频场景测试集,Agent能否独立完成闭环任务的比例。
    • 工具调用准确率:LLM选择正确工具、并生成正确参数的比例。
    • 人工评估:定期抽样对话,由运营或客服同学从“问题解决程度”、“回复准确性”、“语言流畅度”、“用户体验”等多个维度打分。
  2. 业务指标关联
    • 客服人力占比变化:Agent上线后,人工客服处理的会话量是否下降?
    • 转化率提升:通过Agent推荐商品并最终下单的转化率,与普通商品列表页的转化率对比如何?
    • 满意度调查:在Agent服务结束后,推送简单的满意度评分(如1-5星),收集直接反馈。

5.3 持续迭代:基于反馈的模型与流程优化

Agent不是一次开发完就结束的,它需要持续喂养数据、持续优化。

  • bad case收集与分析:建立渠道,收集所有Agent处理失败或用户不满意的对话(bad case)。每周进行复盘,分析原因:是意图识别错了?工具调用错了?还是业务规则没覆盖?
  • 提示词工程优化:大多数问题可以通过优化系统提示词和工具描述来解决。例如,我们发现Agent有时会过度追问细节,就在提示词里加了一句“在不过度打扰用户的前提下,尽可能高效地收集必要信息”。
  • 工具库扩充:随着业务发展,新的需求会产生。例如,我们后来增加了“查询积分余额”、“兑换优惠券”等工具。
  • 知识库更新:商品信息、促销活动、售后政策等是动态变化的,必须建立机制,确保Agent调用的工具和查询的知识库是最新的。

这个电商销售与服务Agent项目,从构想到上线,再到持续优化,是一个典型的“AI赋能业务”的落地过程。它让我深刻体会到,现阶段成功的AI应用,不是追求一个无所不能的“通用人工智能”,而是将一个强大的LLM“大脑”,与严谨的业务逻辑“工具”和“数据”紧密结合,在明确的边界内解决具体问题。其中,对业务的理解深度、对异常情况的细致处理、以及对用户体验的持续关注,远比单纯追求模型的先进性更重要。如果你也正在考虑为你的业务引入一个AI Agent,希望我们这些从实战中获得的经验和教训,能帮你少走一些弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询