1. 构建一个基于大模型的智能客服系统
任务说明
构建一个基于大模型的智能客服系统,核心能力包括:对用户输入进行意图识别(查询订单、退换货、物流、人工客服),并根据识别结果调用对应处理逻辑生成回答。系统采用“意图识别 + 规则响应”的轻量架构,大模型仅负责意图分类,业务答案由本地规则给出,避免大模型幻觉并降低响应延迟。
环境依赖
- Python 3.9+
- ==1.30.0(或兼容版本,需支持Chat Completions API)
- 环境变量
_已设置
完整实现代码
import os
import json
from import
client = (=os.getenv("_"))
# 意图标签与对应业务处理函数映射
INTENT_ACTIONS = {
"order_query": lambda user_input: f"您的最近一笔订单:订单号 #20240512,金额 ¥299,状态:已发货。",
"return_exchange": lambda user_input: "退换货政策:签收后7天内支持无理由退换,商品需保持完好。您可在「我的订单」中申请。",
"logistics": lambda user_input: "您的订单 #20240512 正在运输中,预计2天内送达。快递单号:SF1234567890。",
"human_service": lambda user_input: "正在为您转接人工客服,当前排队约2分钟,请稍候。",
}
SYSTEM_PROMPT = """你是客服意图分类器。仅输出一个JSON对象,格式为{"intent": "标签"}。
可选标签:order_query(查询订单)、return_exchange(退换货)、logistics(物流查询)、human_service(转人工)。
不要输出任何其他内容。"""
def classify_intent(user_input: str) -> str:
"""调用大模型识别用户意图,返回意图标签"""
try:
response = client.chat.completions.create(
model="-mini",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_input},
],
temperature=0,
max_tokens=20,
)
content = response.choices[0].message.content.strip()
intent = json.loads(content)["intent"]
return intent if intent in INTENT_ACTIONS else "human_service"
except Exception:
# 解析失败或API异常时兜底转人工
return "human_service"
def customer_service_reply(user_input: str) -> str:
"""智能客服主入口:意图识别 + 规则回答"""
intent = classify_intent(user_input)
action = INTENT_ACTIONS.get(intent, INTENT_ACTIONS["human_service"])
return action(user_input)
if __name__ == "__main__":
# 简单命令行交互验证
test_inputs = [
"我想查一下我的订单到哪了",
"这件衣服不合适,想退货",
"快递什么时候能送到?",
"帮我转人工客服",
]
for text in test_inputs:
print(f"用户: {text}")
print(f"客服: {customer_service_reply(text)}\n")
运行方式
export _="sk-你的密钥"
python customer_service.py
验证方法与通过标准
- 功能验证:运行后,四条测试输入应分别输出订单信息、退换货政策、物流状态、转人工提示,且每条回复与对应意图的业务逻辑一致。
- 意图识别准确性:观察输出内容,确认大模型将“查订单到哪了”识别为物流意图(logistics)而非订单查询(order_query),将“想退货”识别为return_exchange。若某条分类错误,可调整SYSTEM_PROMPT中的示例说明。
- 异常兜底:临时设置无效的_再运行,系统应返回“正在为您转接人工客服”,不抛出未捕获异常。
常见问题
- 返回非JSON格式:若大模型偶尔输出多余文字导致json.loads失败,代码已通过except捕获并兜底为human_service,不影响主流程。
- 意图边界模糊:例如“订单什么时候到”既涉及订单又涉及物流,当前模型可能分类不稳定。可在SYSTEM_PROMPT中增加一句“物流查询优先于订单查询”来约束。