ShopMind 是我从零交付的跨境电商客服 AI Agent:五个工具、代码级政策护栏、30 题金标评测满分、实时监控面板。它不只是一个聊天机器人——它是「能放心上生产」的完整系统。
我在寻找 AI Agent 咨询方向的实习机会。与其空谈「我懂 LLM」,不如交付一个真实可运行的系统:跨境电商客服——一个天然多语言、天然有政策边界、天然需要评估与监控的场景。
FastAPI 后端 + 工具调用循环 + SQLite mock 商店 + BM25 多语言检索 + JSONL 追踪 + 监控大屏。LLM 层是适配器——供应商可插拔,业务代码零改动。
提示词是「建议」,代码是「法律」。$200 退款限额、重复退款拦截、未送达拦截全部在工具层强制执行——模型只能决定「要不要发起」,能不能通过由代码说了算。大额请求被拒后,Agent 自动转人工并留下升级记录。
30 题金标集覆盖 8 类场景(订单/物流/知识/多语言/退款/越界/幻觉/歧义),判定分两套:确定性硬门(该调的工具调了吗?数据库该写的行写了吗?)+ LLM 考官五维评分。每次改动重跑考卷,数据说话。
第 1 轮:Agent 凭记忆回答政策问题,绕过知识库——提示词收紧后修复。
第 2 轮:Agent 口头拒绝退款、未走工具,考官仍打 5 分——只有硬门抓住了它,这正是两套判定并存的意义。
第 3 轮:测试本身过度严格——反思后修正评测设计,而非迎合分数。
| 轮次 | 通过率 | 发现与动作 |
|---|---|---|
| 第 1 轮 | 93% | 客服政策题被凭记忆回答 → 收紧检索规则 |
| 第 2 轮 | 96.7% | 退款流程被绕过(考官仍给 5 分)→ 强制走工具 |
| 第 3 轮 | 96.7% | 越界测试过度严格 → 修正评测设计 |
| 最终 | 100% | 加固(PII 脱敏、503 降级、重试)后回归验证不降质 |
每一轮对话落一条 JSONL 小票:会话、消息、工具调用、token、延迟。监控大屏实时聚合——延迟分位数、token 消耗、工具分布。PII(邮箱/电话)在落盘前完成脱敏,订单号等业务标识保留以便排查。
项目已开源。克隆后三行命令跑起来,用下面的订单号当「试玩券」——每张券演示一条真实的客服路径,全部结果可预期、可验证。
py -3.11 -m venv .venv → .venv\Scripts\python -m pip install -r requirements.txt → 在 .env 填入 LLM_API_KEY → .venv\Scripts\python -m uvicorn app.main:app --port 8000 → 打开 http://127.0.0.1:8000/
| 试玩券(订单号) | 发这句话 | 你会看到 |
|---|---|---|
| ORD-10009 · Chloe Dubois $4.90 · 已签收 |
"My order ORD-10009 arrived damaged. I'd like a refund." | AI 查单 → 申请退款 → 代码放行 → 退款记录写入数据库。再发一次会被「已退款」拦截——防重复退款本身就是演示点 |
| ORD-10071 · Emma Johnson $205.40 · 已签收 |
"I want a full refund for ORD-10071." | AI 查单 → 申请退款 → 被 $200 政策拒绝 → 自动转人工 → 页面弹出人工接管横幅(human-in-the-loop),可切换「经理」身份回复后交还 AI |
| ORD-10010 · Diego Lopez 处理中 · 未发货 |
"Refund my order ORD-10010 please." | AI 走退款工具 → 代码拒绝(未签收不可退)→ 礼貌解释,不盲目转人工——边界感正确 |
| ORD-10003 · FedEx 异常件 | "My package ORD-10003 seems stuck." | AI 查物流 → 发现 exception 状态 → 主动说明异常并给出下一步建议 |
| ORD-99999 · 不存在 | "Where is my order ORD-99999?" | AI 查单 → 如实告知查无此单,绝不编造——评测集里的幻觉陷阱题,现场版 |
多语言彩蛋:把物流问题用日文(配送にはどのくらいかかりますか?)或西文(¿Cuánto tarda el envío a España?)问一遍,AI 会用客户的语言回答。