Jev + LLM 黄金搭档:从 0 到 1 设计一套 AI 客服系统
判断和生成混在一个模型里,会让客服系统又慢又贵又难控制。把它们拆开:判断交给 Jev,回复交给 LLM,才是这套架构的核心。
一、纯 LLM 客服的三个代价
假设每天处理 1 万条客服消息,每条都走 LLM。LLM 既要理解问题、判断意图,又要生成自然语言回复,还要复查合规。这样做的代价是:
- 成本高:输入、输出都收费,输出通常更贵。
- 慢:回复逐 token 生成,一条 200 token 回复要 3~5 秒。
- 不可控:判断和回复混在一起,判断错了,回复也跟着错。
Jev 的价值是单独拆出“判断”这一步。判断由 Jev 做,又快又便宜;回复仍由 LLM 做,只在需要时上场。
二、三方分工
| 角色 | 谁来干 | 干什么 |
|---|---|---|
| 分诊员 | Jev | 判断意图、情绪、紧急程度、流程去向 |
| 回复员 | LLM | 理解上下文,生成自然语言回复 |
| 监督者 | Jev | 检查 LLM 回复是否跑偏、是否违规 |
整体流程:
用户消息进来
↓
Jev 判断:意图、情绪、紧急程度
↓
路由:自动回复 / 转 LLM / 转人工
↓
LLM 生成回复(如果需要)
↓
Jev 检查:回复是否安全、语气是否合适
↓
发送给用户 / 拦截人工审核
三、四步实现
第一步:定义判断问题
一条客服消息通常需要判断意图、情绪、是否转人工、紧急程度、是否涉及金额。一次调用全部完成:
result = jev.ask(
state=user_message,
questions=[
{"type": "choice", "question": "用户意图?",
"options": ["咨询", "投诉", "退款", "查询订单", "其他"]},
{"type": "score", "question": "情绪程度?",
"scale": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]},
{"type": "noul", "question": "是否需要转人工?"},
{"type": "choice", "question": "紧急程度?",
"options": ["低", "中", "高", "紧急"]},
],
)
第二步:按判断结果路由
路由是纯代码逻辑,不调模型:
intent = result["用户意图?"]["choice"]
emotion = result["情绪程度?"]["score"]
urgency = result["紧急程度?"]["choice"]
need_human = result["是否需要转人工?"]["probability"]
if need_human > 0.8:
route_to_human()
elif urgency == "紧急":
route_to_vip_queue()
elif intent in ["查询订单", "咨询"]:
route_to_auto_reply()
else:
route_to_llm()
关键点是:查询订单这类简单问题不碰 LLM,直接走数据库和模板回复。
第三步:LLM 只在需要的时候上场
复杂投诉、情绪安抚、多问题拆解、个性化回复才需要 LLM。LLM 上场时,Jev 已经把判断结果交给它,不用重新理解一遍:
reply = llm.generate(
system_prompt="你是一个客服,用户在投诉退款问题",
user_message=user_message,
context=f"用户情绪:{emotion}/10,紧急程度:{urgency}",
)
第四步:Jev 做最后一道检查
LLM 回复发送前,再由 Jev 检查合规与语气:
check = jev.ask(
state=reply,
questions=[
{"type": "noul", "question": "回复是否包含违规内容?"},
{"type": "noul", "question": "回复是否准确回答了用户问题?"},
{"type": "choice", "question": "回复语气?",
"options": ["友好", "中性", "生硬", "冒犯"]},
],
)
if check["回复是否包含违规内容?"]["probability"] > 0.5:
block_reply_and_review()
elif check["回复语气?"]["choice"] in ["生硬", "冒犯"]:
regenerate_reply()
else:
send_reply()
四、算一笔成本账
假设:每天 1 万条消息;纯 LLM 方案每条 500 输入 token、200 输出 token,输入 $10 / 百万、输出 $50 / 百万。
| 方案 | 每日成本 | 每月成本 |
|---|---|---|
| 纯 LLM | $150 | $4500 |
| Jev + LLM 混合 | 约 $75 | 约 $2252.5 |
混合方案里,先分流:40% 简单问题走模板,50% 走 LLM,10% 转人工。Jev 判断成本极低,1 万条约 $0.084;LLM 只处理 5000 条,约 $75。合计每日约 $75,成本接近减半。
速度上的收益更直观:
| 环节 | 纯 LLM | Jev + LLM |
|---|---|---|
| 判断意图 | 3~5 秒 | 约 0.1 秒 |
| 简单问题回复 | 3~5 秒 | 约 0.1 秒 |
| 复杂问题回复 | 3~5 秒 | 3~5 秒 |
五、上线前的影子模式
不要一上来就全量切。先让 Jev 在旁边跑,记录判断结果,但实际仍走旧流程;对比一段时间后再调阈值。
jev_result = jev.ask(state=user_message, questions=[...])
log_to_database({
"user_message": user_message,
"jev_intent": jev_result["用户意图?"]["choice"],
"jev_confidence": jev_result["用户意图?"]["confidence"],
"actual_route": original_route,
})
阈值要用数据回填,不能拍脑袋。例如跑一周后发现:
# confidence > 0.9 时正确率 95%
# confidence 0.7~0.9 时正确率 75%
# confidence < 0.7 时正确率 50%
AUTO_EXECUTE_THRESHOLD = 0.9
HUMAN_REVIEW_THRESHOLD = 0.7
先在低风险场景自动化,跑稳后再逐步扩大。
六、结论
Jev + LLM 不是二选一,而是职责分离:
| 环节 | 用什么 | 干什么 |
|---|---|---|
| 意图判断 | Jev | 一次调用判断意图、情绪、紧急程度 |
| 分流路由 | 纯代码 | 按判断结果走不同流程 |
| 简单问题 | Jev + 模板 | 不碰 LLM,自动回复 |
| 复杂问题 | LLM | 生成自然语言回复 |
| 安全检查 | Jev | 发送前审查回复 |
Jev 负责“快和省”,LLM 负责“准和暖”。两者搭在一起,成本降一半,简单问题秒回,复杂问题有温度。

696

被折叠的 条评论
为什么被折叠?



