AI Agent · Full-Stack · 2026

一个会拒绝、
有证据、说四种语言的客服 Agent

ShopMind 是我从零交付的跨境电商客服 AI Agent:五个工具、代码级政策护栏、30 题金标评测满分、实时监控面板。它不只是一个聊天机器人——它是「能放心上生产」的完整系统。

5工具集成
4种语言
30/30评测通过
24条自动化测试
Maya · ShopMind 客服
I want a full refund for ORD-10071, this product is terrible.
🔧 get_order🔧 request_refund🔧 escalate_human
已为您转交人工处理——订单 $205.40 超过 $200 限额,经理将在 24 小时内联系您。REF-20016 / ESC-30001
⚡ 3.8s · in 2373 / out 228 tokens

为什么做这个项目

我在寻找 AI Agent 咨询方向的实习机会。与其空谈「我懂 LLM」,不如交付一个真实可运行的系统:跨境电商客服——一个天然多语言、天然有政策边界、天然需要评估与监控的场景。

100%
金标集通过率 30/30
4.93
LLM 考官均分 /5
3.7s
延迟 p50
0
被拒退款写入数据库

系统设计

FastAPI 后端 + 工具调用循环 + SQLite mock 商店 + BM25 多语言检索 + JSONL 追踪 + 监控大屏。LLM 层是适配器——供应商可插拔,业务代码零改动。

护栏:政策写在代码里,不写在提示词里

提示词是「建议」,代码是「法律」。$200 退款限额、重复退款拦截、未送达拦截全部在工具层强制执行——模型只能决定「要不要发起」,能不能通过由代码说了算。大额请求被拒后,Agent 自动转人工并留下升级记录。

评测:这是整个项目的引擎

30 题金标集覆盖 8 类场景(订单/物流/知识/多语言/退款/越界/幻觉/歧义),判定分两套:确定性硬门(该调的工具调了吗?数据库该写的行写了吗?)+ LLM 考官五维评分。每次改动重跑考卷,数据说话。

评测真的抓到了三个 bug

第 1 轮:Agent 凭记忆回答政策问题,绕过知识库——提示词收紧后修复。
第 2 轮:Agent 口头拒绝退款、未走工具,考官仍打 5 分——只有硬门抓住了它,这正是两套判定并存的意义。
第 3 轮:测试本身过度严格——反思后修正评测设计,而非迎合分数。

迭代记录(真实数据)

轮次通过率发现与动作
第 1 轮93%客服政策题被凭记忆回答 → 收紧检索规则
第 2 轮96.7%退款流程被绕过(考官仍给 5 分)→ 强制走工具
第 3 轮96.7%越界测试过度严格 → 修正评测设计
最终100%加固(PII 脱敏、503 降级、重试)后回归验证不降质

可观测性

每一轮对话落一条 JSONL 小票:会话、消息、工具调用、token、延迟。监控大屏实时聚合——延迟分位数、token 消耗、工具分布。PII(邮箱/电话)在落盘前完成脱敏,订单号等业务标识保留以便排查。

亲手试玩 · Try it yourself

项目已开源。克隆后三行命令跑起来,用下面的订单号当「试玩券」——每张券演示一条真实的客服路径,全部结果可预期、可验证。

运行方法

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 会用客户的语言回答。