电商客服 Agent MVP
基于 DeepSeek Tool Calling 构建智能电商客服 MVP,使用 JSON Mock 数据跑通 React 聊天页、Express API、业务 Tool、安全策略与自动化测试。
01
我的工作
- 围绕电商客服 MVP 拆分商品查询、商品推荐、订单查询、物流查询、优惠券、FAQ、售后规则和人工转接 8 个业务 Tool。
- 抽离统一 Tool Catalog,用 Zod 校验工具参数,并约束所有商品、订单、物流、优惠券和售后事实只能来自 `data/*.json`。
- 新增基于 `@modelcontextprotocol/sdk` 的 MCP Tool Layer,将同一组电商业务 Tool 注册为可通过 MCP 调用的工具,并提供 stdio server 与内存执行器。
- 封装 DeepSeek OpenAI 兼容调用层,将模型、base URL、thinking 配置和 Tool Calling 协议集中在 `llmService` 管理。
- 实现标准 Tool Calling 循环:模型决策、工具执行、结果回传、最终客服回复,并保留内存多轮上下文和工具失败处理。
- 将提示词攻击、API Key、隐私查询、越权订单操作等风险请求前置到安全策略中,在调用模型前直接拒答或进入转人工边界。
- 构建 React + Vite + TailwindCSS 聊天页,提供由后端从 Mock 数据动态生成的演示快捷入口。
- 补充 README、架构图、流程图、典型场景、Tool 清单、AI 分工说明、MIT License、Security、CI 和 Issue/PR 模板。
- 建立后端、Tool、安全策略、路由、数据完整性、MCP 执行器和前端组件测试;latest main 分支 GitHub CI 已通过。
02
技术流程
- 用户在 React 聊天界面输入客服问题
- Express /chat 接口先执行 safetyPolicy 风险检查
- 允许进入模型流程后,chatService 组合 system prompt、历史消息和 tools schema
- DeepSeek 返回 tool_calls,Tool Catalog / Tool Registry 校验工具名和参数
- 业务 Tool 从 data/*.json 读取结构化 Mock 数据
- 模型结合 Tool 结果生成最终客服回复
- 投诉、赔偿、法律、账号异常、愤怒用户或连续失败确定性转人工
- 同一组 Tool 也可通过 MCP server 暴露给 MCP 客户端或内存执行器调用
03
问题与约束
Agent 项目容易只停留在聊天界面演示,真正影响可信度的是业务事实来源、Tool 边界、异常处理和安全策略。该项目重点验证一条可运行链路:React 页面、Express 聊天接口、DeepSeek Tool Calling、JSON 业务 Tool、最终客服回复,并明确不把 MVP 包装成生产系统。
04
关键技术决策
用 Tool Catalog 管理能力边界
将商品、推荐、订单、物流、优惠券、FAQ、售后规则和人工转接注册为统一 Tool Spec,再同时供 Tool Registry 与 MCP server 复用。
MCP 层不复制业务逻辑
MCP server 只负责协议适配和结构化返回,实际业务仍调用同一组 Tool,避免 Function Calling 与 MCP 两套实现分叉。
安全策略前置
提示词泄露、API Key、隐私查询、越权改订单等请求不交给模型自由判断,而是在调用模型前确定性拦截。
演示入口动态生成
MVP 没有登录系统,因此通过 `/demo/examples` 从 JSON 数据动态生成可点击案例,避免演示者手动记 Mock 订单号和物流单号。
MVP 保持可运行但不伪装生产化
当前使用 JSON Mock 数据和内存会话,重点验证 Agent 核心链路;仓库明确不包含数据库、登录、JWT、RAG、后台管理、Docker、消息队列或多 Agent。
05
结果与复盘
完成一个可运行的智能电商客服 Agent MVP,并将仓库整理为可展示作品:README 包含界面预览、架构图、Tool Calling 时序、典型场景、Tool 清单和验证结果;最新 main 分支已合入 MCP Tool Layer,GitHub Actions 覆盖类型检查、Lint、测试和构建且通过。live intent 测试需真实 DeepSeek API Key 手动运行。
06
项目边界
公开个人项目。当前为 MVP,不连接真实电商平台,不处理真实订单;不包含数据库、登录、JWT、RAG、后台管理、Docker、消息队列或多 Agent。AI 参与了较多编码和文档生成,本人主要负责方向定义、阶段边界、功能验收、验证和迭代。