电商场景 Agent 设计:从商品推荐到售后客服的完整链路
电商场景 Agent 设计从商品推荐到售后客服的完整链路一、用户说这件衣服有我尺码吗Agent 该如何理解电商场景的 AI Agent 和通用 Agent 有本质区别电商的每一次对话都可能涉及交易信息的准确性直接影响下单决策和售后体验。一个典型的用户问题这件黑色卫衣有 XXL 吗红色的同款还有吗 Agent 需要理解用户问的是两个维度的库存黑色/XXL、红色/通用并且这两个查询和同一件商品关联。更复杂的是售后场景我上周买的那个蓝牙耳机有杂音能换吗 Agent 需要先查订单、再查售后政策、最后生成换货工单——这是多轮多工具的联动。二、电商 Agent 的全链路架构三、Go 实现电商 Agent 核心逻辑Agent 入口意图路由package ecommerce import ( context encoding/json fmt strings ) // EcommerceIntent 电商意图类型 type EcommerceIntent string const ( IntentProductSearch EcommerceIntent product_search // 商品搜索 IntentProductCompare EcommerceIntent product_compare // 商品对比 IntentOrderQuery EcommerceIntent order_query // 订单查询 IntentRefund EcommerceIntent refund // 退款/退货 IntentLogisticsTrack EcommerceIntent logistics_track // 物流追踪 IntentCouponQuery EcommerceIntent coupon_query // 优惠券查询 IntentEscalate EcommerceIntent escalate // 升级人工 ) // EcommerceContext 电商对话上下文 type EcommerceContext struct { SessionID string UserID string UserProfile *UserProfile // 用户画像 OrderHistory []OrderSummary // 最近订单 CurrentProduct *Product // 当前讨论的商品 } type UserProfile struct { UserID string Tags []string // 用户标签: 高消费, 母婴, 数码爱好者 History []string // 浏览历史: 商品 ID 列表 Preferences map[string]string // 偏好: size→XXL, color→黑色 } type Product struct { ID string Name string Price float64 Stock map[string]int // SKU → 库存: 黑色_XXL → 10 Category string Rating float64 } // EcommerceAgent 电商 Agent type EcommerceAgent struct { llm LLMClient tools *EcommerceToolRegistry // 电商专用工具集 router *IntentRouter } // HandleUserQuery 处理用户查询的主入口 func (ea *EcommerceAgent) HandleUserQuery( ctx context.Context, sessionCtx *EcommerceContext, userQuery string, ) (string, error) { // 1. 意图识别 intent, confidence : ea.router.Classify(userQuery) fmt.Printf([AGENT] 意图: %s (置信度: %.2f)\n, intent, confidence) // 2. 根据意图选择处理策略 switch intent { case IntentProductSearch: return ea.handleProductSearch(ctx, sessionCtx, userQuery) case IntentProductCompare: return ea.handleProductCompare(ctx, sessionCtx, userQuery) case IntentOrderQuery: return ea.handleOrderQuery(ctx, sessionCtx, userQuery) case IntentRefund: // 退款操作需要用户已登录 if sessionCtx.UserID { return 请先登录后再申请退款, nil } return ea.handleRefund(ctx, sessionCtx, userQuery) case IntentLogisticsTrack: return ea.handleLogisticsTrack(ctx, sessionCtx, userQuery) case IntentEscalate: // 无缝转接人工 return ea.transferToHuman(ctx, sessionCtx, userQuery) default: // 降级让 LLM 自由回答 return ea.llm.Generate(ctx, userQuery) } }商品搜索 Agent// handleProductSearch 商品搜索——多条件筛选 库存校验 func (ea *EcommerceAgent) handleProductSearch( ctx context.Context, session *EcommerceContext, query string, ) (string, error) { // 第一步提取搜索条件 searchParams, err : ea.tools.ExtractSearchParams(ctx, query) if err ! nil { return 抱歉我没能理解您的搜索条件能再描述一下吗, nil } // 第二步调用搜索工具 products, err : ea.tools.SearchProducts(ctx, searchParams) if err ! nil { return 搜索服务暂时不可用请稍后再试, err } if len(products) 0 { return fmt.Sprintf(没有找到符合\%s\的商品试试换个关键词, query), nil } // 第三步结合用户画像做个性化排序 ranked : ea.rankByUserProfile(products, session.UserProfile) // 第四步生成推荐文案——突出库存和用户可能关心的属性 return ea.formatProductRecommendation(ranked[:min(5, len(ranked))], session), nil } // rankByUserProfile 基于用户画像的个性化排序 func (ea *EcommerceAgent) rankByUserProfile(products []Product, profile *UserProfile) []Product { if profile nil { return products // 无画像时保持原始排序 } // 评分加权基础分 偏好匹配分 type scored struct { product Product score float64 } var scoredList []scored for _, p : range products { score : p.Rating * 0.3 // 基础分好评率 // 偏好匹配 for _, tag : range profile.Tags { if strings.Contains(p.Category, tag) { score 2.0 // 品类偏好加分 } } // 有库存的优先 totalStock : 0 for _, s : range p.Stock { totalStock s } if totalStock 0 { score 1.0 } scoredList append(scoredList, scored{p, score}) } // 按分数降序排列 sortByScore(scoredList) result : make([]Product, len(scoredList)) for i, s : range scoredList { result[i] s.product } return result } // formatProductRecommendation 生成推荐文案 func (ea *EcommerceAgent) formatProductRecommendation(products []Product, session *EcommerceContext) string { var sb strings.Builder sb.WriteString(为您找到以下商品\n\n) for i, p : range products { sb.WriteString(fmt.Sprintf(%d. **%s**\n, i1, p.Name)) sb.WriteString(fmt.Sprintf( 价格: %.2f | 评分: %.1f\n, p.Price, p.Rating)) // 展示库存状态 totalStock : 0 for sku, stock : range p.Stock { totalStock stock if stock 3 stock 0 { sb.WriteString(fmt.Sprintf( ⚠️ %s 仅剩 %d 件\n, sku, stock)) } } if totalStock 0 { sb.WriteString( [暂时缺货]\n) } sb.WriteString(\n) } return sb.String() }售后处理 Agent// handleRefund 退款处理——查订单 校验政策 创建工单 func (ea *EcommerceAgent) handleRefund( ctx context.Context, session *EcommerceContext, query string, ) (string, error) { // 第一步从查询中提取订单信息 orderInfo, err : ea.tools.ExtractOrderInfo(ctx, query) if err ! nil { return 请提供订单号或告诉我您要退哪件商品, nil } // 第二步查询订单详情 order, err : ea.tools.QueryOrder(ctx, session.UserID, orderInfo.OrderID) if err ! nil { return fmt.Sprintf(未找到订单 %s请核对订单号, orderInfo.OrderID), err } // 第三步检查售后资格 eligibility : ea.checkRefundEligibility(order) if !eligibility.Eligible { return fmt.Sprintf( 抱歉%s原因: %s, eligibility.Message, eligibility.Reason, ), nil } // 第四步执行退款 refundResult, err : ea.tools.ProcessRefund(ctx, session.UserID, order.OrderID, orderInfo.Reason) if err ! nil { // 退款失败升级人工 ea.transferToHuman(ctx, session, fmt.Sprintf(退款失败: 订单 %s, 原因: %v, order.OrderID, err)) return 退款处理遇到问题已为您转接人工客服请稍候。, nil } return fmt.Sprintf( 已为您处理退款。订单 %s金额 %.2f预计 3-5 个工作日内退回原支付方式。, order.OrderID, refundResult.Amount, ), nil } type RefundEligibility struct { Eligible bool Message string Reason string } func (ea *EcommerceAgent) checkRefundEligibility(order *Order) RefundEligibility { // 规则一订单已完成且未超过 7 天 daysSinceComplete : time.Since(order.CompletedAt).Hours() / 24 if daysSinceComplete 7 { return RefundEligibility{ Eligible: false, Message: 该订单已超过 7 天无理由退货期, Reason: 超期, } } // 规则二非定制/虚拟商品 nonRefundCategories : []string{定制商品, 虚拟商品, 生鲜食品} for _, cat : range nonRefundCategories { if strings.Contains(order.Category, cat) { return RefundEligibility{ Eligible: false, Message: fmt.Sprintf(%s 不支持无理由退货, cat), Reason: 品类限制, } } } return RefundEligibility{ Eligible: true, Message: 符合退货条件正在为您处理, } }四、边界分析与 Trade-offs意图识别准确率电商意图分类比通用场景更难——用户表达方式多样这个怎么样可能是问评价、问库存、问价格——需要结合上下文消歧建议意图分类的置信度 0.7 时追问澄清而非猜测库存实时性商品搜索必须展示实时库存不能返回已售罄商品但库存查询本身有成本数据库缓存需要合理设置缓存 TTL高并发场景使用库存预扣减 定期同步金额相关的安全处理退款金额必须由服务端计算不能信任 LLM 的参数订单查询必须过滤当前用户的订单不能跨用户查询所有写操作退款、下单需要有完整的审计日志人工客服的无缝衔接Agent 转人工时需要传递对话摘要用户问题、已执行的步骤避免用户向人工客服重复描述问题摘要应包含订单号、问题类型、自动处理结果五、总结电商 Agent 设计的关键是将不确定的 LLM 生成和确定的电商业务规则分离开售前LLM 负责理解 生成文案搜索结果和库存由确定性 API 提供购买LLM 不参与金额计算和支付流程只做引导售后LLM 负责意图分类和参数提取退款决策由规则引擎决定电商场景对准确性要求极高。一个错误的退款金额或库存信息比回复不够好的伤害大得多。

相关新闻

第15篇:分布式 Agent 一致性 —— 上下文不丢的秘诀

第15篇:分布式 Agent 一致性 —— 上下文不丢的秘诀

分布式架构下,用户会话上下文如何在多个 Agent 实例之间保持一致,同时不牺牲负载均衡的弹性。这是生产环境中要面对的实际问题,也是从"Demo"到"产品"必须跨越的坎。 核心矛盾很简单:用户期望对话是连续的&…

2026/10/16 2:55:46 阅读更多 →
第14篇:Agent 并发与异步 —— 扛住高负载

第14篇:Agent 并发与异步 —— 扛住高负载

当大量用户同时使用 Agent 时,需要处理并发访问。同时,很多任务不能阻塞等着——需要异步执行。这两个问题在生产环境中几乎一定会遇到。 但比负载更棘手的问题是:多端同步——用户在 Web 端和 APP 端来回切换,Agent 正在执行的任…

2026/10/18 9:45:48 阅读更多 →
AT32 MCU GPIO配置详解与实战技巧

AT32 MCU GPIO配置详解与实战技巧

1. AT32F403A/407/407A GPIO基础概念与硬件特性AT32系列MCU的GPIO模块是开发者最先接触也是最常用的外设之一。作为芯片与外部世界的物理接口,GPIO的配置直接影响着整个系统的稳定性和可靠性。以AT32F403A为例,其GPIO控制器支持多达80个可编程引脚&#…

2026/10/17 16:30:04 阅读更多 →

最新新闻

ESP32驱动TFT屏实战:从接线到跑通Status Deck全链路

ESP32驱动TFT屏实战:从接线到跑通Status Deck全链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 17:23:15 阅读更多 →
PSR开关电源EMC实战:差模共模分析与变压器布局整改要点

PSR开关电源EMC实战:差模共模分析与变压器布局整改要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 17:23:15 阅读更多 →
Compose AI组件库实战:语音、视觉、NLP统一封装与状态管理

Compose AI组件库实战:语音、视觉、NLP统一封装与状态管理

1. 这个组件库到底解决了什么痛点移动端做AI功能集成,过去一年我经手过三个项目,每次都在重复造轮子。语音识别要接一套SDK,图像处理要接另一套,文本对话又是第三套,每套的初始化方式、回调风格、线程模型都不一样。最…

2026/10/18 17:23:15 阅读更多 →
从区域生长到低质量手指静脉分割:原理、预处理与PyQt落地实践

从区域生长到低质量手指静脉分割:原理、预处理与PyQt落地实践

毕设做了个"朴素"算法,反而让我把低质量手指静脉分割讲透了每年毕设选题季,图像方向挤破头的都是"基于深度学习的XX识别""基于Transformer的XX分割",动辄就要上万张标注数据、双卡起步的算力。我当初没跟这个风…

2026/10/18 17:23:15 阅读更多 →
【AI应用实战-claude】claudecode配置智普apikey(三):把settings改到TaoToken

【AI应用实战-claude】claudecode配置智普apikey(三):把settings改到TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 17:23:15 阅读更多 →
diagram-design 图表设计系统:从数据协议到渲染管线的工程化实践

diagram-design 图表设计系统:从数据协议到渲染管线的工程化实践

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次看到 diagram-design 这个标题,很多人会下意识以为它只是一个画流程图的工具,或者某个前端组件库的别名。但真正在项目里被图表折磨过的人会立刻反应过来:它要解…

2026/10/18 17:22:14 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →