1. 项目概述
最近在做一个电商智能客服系统的项目,用大语言模型(LLM)作为核心引擎,目标是解决电商客服场景中的各种痛点。这个系统要能处理订单查询、物流跟踪、售后咨询等各种常见问题,还要能无缝转接人工客服。今天就来详细聊聊这个系统的设计思路和实现方案。
先说说为什么需要这样的系统。现在电商平台的客服普遍存在几个问题:重复性问题多(比如"我的快递到哪了"这种问题每天要回答几百遍)、人工成本高、服务质量不稳定。我们调研发现,80%的客服咨询其实都可以用自动化方案解决,关键是要让系统既能理解用户意图,又能准确执行具体操作。
这个系统最核心的特点是"业务流程配置化"。什么意思呢?就是业务人员可以通过配置的方式定义各种客服流程,不需要开发人员写代码。比如新增一个"退货申请"的业务流程,只需要在管理后台配置流程步骤和规则就行。这样业务迭代会非常快,基本上当天配置当天就能上线。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 整体架构
系统采用分层设计,主要分为四层:
-
接入层:处理各种渠道的请求,包括网页、APP、小程序等。支持HTTP和WebSocket两种协议,WebSocket用于需要实时交互的场景。
-
应用装配层:这层很有意思,它负责把各种业务能力组装起来。比如一个"订单查询"的业务流程,可能需要调用用户认证、订单查询、物流查询等多个服务。这层就是用配置的方式把这些服务串起来。
-
核心处理层:这是最复杂的一层,又细分为五个子层:
- 图编排层:用Neo4j图数据库来管理业务流程
- 对话理解层:用LLM理解用户意图
- 策略决策层:决定下一步该执行什么操作
- 动作执行层:实际调用各种API完成操作
- 会话状态层:维护对话上下文
-
数据支撑层:包括业务数据库、知识库、日志系统等。
2.2 关键技术选型
技术选型方面有几个关键决策:
-
LangGraph:选用这个框架来做状态机编排,因为它特别适合处理多轮对话。比如用户要修改收货地址,可能需要先验证身份,然后确认订单,最后才能修改。LangGraph可以很好地管理这种复杂流程。
-
FastAPI:作为Web框架,性能好,异步支持完善,而且自动生成API文档,对后续维护很有帮助。
-
Neo4j:用图数据库存储业务流程配置,比关系型数据库更直观。比如可以把"订单查询"流程中的每个步骤表示为图节点,步骤之间的关系用边表示,这样业务人员看着图就能理解流程。
-
LLM服务:支持兼容OpenAI协议的各类大模型,可以根据实际需求选择不同规模的模型。在测试环境可以用小模型节省成本,生产环境再用大模型保证效果。
3. 核心功能实现
3.1 对话流程管理
对话管理是这个系统最核心的部分。我们设计了一个状态机引擎,每个业务流程都是一个状态机。举个例子,"订单查询"流程可能有这些状态:
- 初始状态:等待用户输入订单号
- 验证状态:检查订单号是否有效
- 查询状态:获取订单详情
- 展示状态:返回订单信息给用户
- 结束状态:流程完成
每个状态之间的转换条件都可以配置。比如从"初始状态"到"验证状态"的转换条件是"收到包含订单号的消息"。
提示:在设计状态机时,一定要考虑异常情况。比如用户输入的订单号无效,要能优雅地处理并引导用户重新输入。
3.2 业务逻辑插件化
系统支持通过"Action"的方式扩展业务逻辑。Action就是一个个独立的Python函数,可以完成特定任务。比如:
python复制def query_order(order_id: str) -> dict:
"""查询订单详情"""
# 调用订单系统API
# 返回订单信息
pass
开发人员只需要按照规范编写这样的函数,系统就能自动发现并注册为可用Action。然后在业务流程配置中就可以引用这些Action。
3.3 知识检索增强
直接用LLM回答业务问题有个很大的风险:幻觉(hallucination),就是模型会编造看似合理但实际上错误的信息。为了解决这个问题,我们实现了检索增强生成(RAG)机制:
- 先把业务知识整理成结构化的文档
- 建立向量索引
- 用户提问时,先检索相关文档
- 把检索结果和问题一起给LLM生成回答
这样能显著提高回答的准确性。实测下来,准确率从原来的70%提升到了95%以上。
4. 部署与运维
4.1 模型打包
系统支持两种部署模式:
- 开发模式:直接运行源码,方便调试和开发
- 生产模式:把业务配置和代码打包成标准化模型包
打包过程包括:
- 配置校验:检查业务流程配置是否合法
- 依赖分析:确定需要打包哪些代码和资源
- 版本管理:生成唯一的版本号
打包好的模型包可以在不同环境间迁移,支持快速回滚。
4.2 监控与日志
生产环境部署时,我们特别加强了监控:
- 对话质量监控:记录每个对话的满意度评分
- 异常监控:捕获并分析系统异常
- 性能监控:跟踪API响应时间
- 业务指标监控:比如自动解决率、转人工率等
所有日志都结构化存储,方便后续分析。我们还设置了告警规则,比如当自动解决率低于某个阈值时自动通知运维人员。
5. 踩坑经验分享
做了这个项目后,总结了几条重要经验:
-
状态持久化很重要:刚开始没做好会话状态持久化,服务器重启后用户对话就断了。后来改成了Redis存储会话状态,支持断点续聊。
-
限流必不可少:LLM API通常有调用频率限制,必须做好限流。我们实现了令牌桶算法来控制请求速率。
-
测试要全面:多轮对话的测试比单轮复杂得多。我们开发了一个对话测试框架,可以模拟用户连续发多条消息,验证整个流程。
-
备选方案要准备好:LLM服务可能会不稳定,我们设计了降级方案,当主要服务不可用时自动切换到备用服务。
-
业务配置要版本控制:业务人员可能会频繁修改流程配置,必须做好版本管理。我们集成Git来管理配置变更历史。
这个项目最让我惊喜的是LangGraph的表现。用它来管理复杂业务流程真的很方便,配置可视化,调试也简单。不过要注意的是,状态机设计不能太复杂,否则业务人员理解起来会很困难。我们的经验是,单个流程最好不超过10个状态。
