以【四季水果店】客服为案例,使用coze平台搭建智能客服系统。实现:
- 准确识别用户意图并做出分类解答;
- 精确召回知识库进行正确回复;
- 高效分析智能客服回复效果并及时更新知识库
一、效果预览

二、实现方案
- 用户输入问题后,先进行意图识别,将咨询问题分为产品问题和其他问题;
- 如果是产品问题,使用大模型进行历史对话上下文理解,并进行问题改写;
-- a. 从知识库中检索相关支持材料;
-- b. 发送给大模型,让大模型进行总结润色;
-- c. 添加代码节点,将用户问题和大模型回复进行格式化,以便插入飞书;
-- d. 添加插件节点,将用户问题和解决方案存储到飞书中;
-- e. 输出给用户->结束;
-- f. 增加一个管理员可将用户历史问题记录,通过自动化工具自动插入到知识库中,以便动态更新优化知识库 - 如果是非产品问题,则使用大模型进行知识检索和回复,提升用户体验:
三、业务流程图

四、具体步骤
1. 创建智能体
智能体是我们工作流和插件的集合载体,这里先创建一个名为【四季水果店智能客服】的智能体,配置模型和对话开场白等信息。
(1)创建一个智能体

(2)配置大模型

(3)配置工作流
这里先配置一个工作流,不管用户提出什么问题,直接走这个工作流,工作流内容稍后进行配置

(4)配置开场白
当用户进入会话时,自动弹出开场白。

到这里智能体基础配置就完成了,主要配置了大模型版本、工作流、开场白,其他详细配置可根据项目需要进行配置。
2. 工作流配置
刚刚我们在配置工作流时,临时创建了一个工作流,当用户进行咨询时默认直接执行工作流,现在我们来对他进行详细配置。
(1)创建一个对话流
对话流是工作流的一种特殊形式,主要用户对话场景。

(2)添加意图识别节点
进行用户意图识别,将用户问题分流成产品问题和非产品问题,不同意图将走不同流程进行处理


(3)产品:添加大模型改写问题
大模型需要结合历史记录上下文进行问题改写,改写成更专业的检索词汇。这一步是很关键的,比如之前用户发送自己咨询烂果坏果的相关信息,现在发送一句"你看看上边发的信息",这就需要大模型进行上下文理解,从而分析用户是想进行坏果部分赔偿的咨询。

python
# 角色
你是一个用户问题理解专家,你的任务是结合对话上下文和用户的问题,充分理解每次用户的问题,并对用户的问题进行准确的表达。
# 工作流程
## 步骤一:结合上下文信息理解用户问题
- 你必须结合上下文信息和用户当前的提问,准确地理解用户在问什么问题。比如用户先问了一句"配料里面有啥",然后再问"没看到啊",此时你结合上下文来理解用户的第二个问题,就能明白用户是在问"怎么在工作流中找到添加插件的入口"。
## 步骤二:结合步骤一的理解判断是否需要对用户的意图进行改写
对用户问题进行重新描述
- 结合步骤一的理解,你必须对当前用户的问题进行重新改写,以准确的语言描述用户的问题。
(4)产品:添加知识库节点
根据大模型改写后的问题,去知识库检索支持资料。这里的知识库一共包含2种知识库,
- 本地关于店铺商品和日常售前售后通用问题的材料;
- 在线飞书用户FAQ文档,主要根据实际使用中用户采纳的解决方案,用以不断更新优化我们的知识库;

(5)产品:添加大模型节点-总结回复
使用大模型根据用户的问题和知识库返回的支持语料,按照我们的要求,进行总结和语言润色,一般要求语气亲切,平易近人,可在给大模型的提示词中设置。

python
# 水果店客服机器人提示词
## 角色
你叫电商小助手,专门解答用户关于店内水果的问题。
## 工作流程
### 步骤一:问题理解与回复分析
1. 认真理解从知识库中召回的内容和用户输入的问题,判断召回的内容是不是用户问题的答案。
2. 如果你不能理解用户的问题,例如用户的问题太简单、不包含必要信息,此时你需要追问用户,直到你确定已理解了用户的问题和需求。
### 步骤二:回答用户问题
根据理解的问题,从知识库中提取相关信息,以准确、简洁、易懂的方式回答用户。
## 限制
1. 风格:回答必须准确无误、言简意赅、容易理解,进行专业和确定性的回复。
2. 语言:用与用户输入相同的语言回答。
3. 如果用户的问题已经超出你的知识库范围,不知道答案,则不需要回答。话术参考"对不起,我已经学习的知识中不包含问题相关内容,暂时无法提供答案"。
4. 回答长度:答案应该简洁清晰,不超过300字。
5. 一定要使用Markdown格式回复。
## 完整用户提示词:
用户咨询{{input}},知识库匹配结果是{{outputList}},你需要根据你的技能给他回复:
- 如果{{outputList}}不为空,总结一下知识库的召回内容,给出回复
(6)产品:添加代码节点-消息结构化
新增一个代码节点用以将用户的问题和大模型返回的解决方案,格式化成可插入飞书的格式。可查看飞书多维表格插件的add_records要求的格式。

javascript
// 在这里,您可以通过 'params' 获取节点中的输入变量,并通过 'ret' 输出结果
// 'params' 已经被正确地注入到环境中
// 下面是一个示例,获取节点输入中参数名为'input'的值:
// const input = params.input;
// 下面是一个示例,输出一个包含多种数据类型的 'ret' 对象:
// const ret = { "name": '小明', "hobbies": ["看书", "旅游"] };
async function main({ params }: Args): Promise<Output> {
// 构建输出对象
const ret =
[
{
"fields": {
"用户问题": params.user,
"机器人答案": params.bot
}
}
]
return ret;
}
(7)产品:添加飞书插件add_records将记录插入飞书表格
上一步我们已经使用代码将信息格式化为插件要求的格式,这一步调用插件,输入飞书文档的token,传入格式化好的数据即可插入飞书记录。

说明:
- app_token:点击飞书文档【分享】按钮,点击复制链接即可

(8)产品:输出回复用户
配置输出节点,直接将大模型整理好的答案输出回复给用户。输出后,接入【结束】节点,预示着这轮对话结束了,当用户再发送信息时,则开启新的一轮会话。

(9)非产品:添加大模型节点总结回复用户
当用户咨询到了非产品问题时,我们直接调用大模型,提示大模型根据我们的要求回复用户,进行兜底,从而提升用户体验。

python
# 水果店客服机器人提示词
## 角色
你叫电商小助手,专门解答用户关于水果店相关的问题。
## 工作流程
1. 认真理解分析用户问题,以准确、简洁、易懂的方式回答用户。。
2. 如果你不能理解用户的问题,例如用户的问题太简单、不包含必要信息,此时你需要追问用户,直到你确定已理解了用户的问题和需求。
## 限制
1. 风格:回答必须准确无误、言简意赅、容易理解,进行专业和确定性的回复。
2. 语言:用与用户输入相同的语言回答。
3. 如果用户的问题已经超出你的知识库范围,不知道答案,则不需要回答。话术参考"对不起,我已经学习的知识中不包含问题相关内容,暂时无法提供答案"。
4. 回答长度:答案应该简洁清晰,不超过300字。
5. 一定要使用Markdown格式回复。
## 用户问题
{{user}}
(10)添加结束节点
前边两种类型都已经接入了输出节点,将结果输出给了用户,最后接入的结束节点不需要变量和输出内容,直接删除变量即可。

到这一步整个智能体流程就已经完成了,如果对使用飞书和知识库比较熟悉的话可以略过,如果第一次使用,可以接下来看详细的配置
3. 飞书表格自动同步
在飞书文档中我们一共需要创建2个文档:
- 水果店客服记录表(多维表格):用来记录用户的问题和机器人的答案;
- 水果店客服FAQ(普通表格):用来记录【水果店客服记录表】中被采纳的记录,并且作为工作流的知识库之一;
水果店客服记录表由工作流自动记录,当我们工作人员审查这个记录表,发现有可采纳的记录时,可将这条记录中的【是否登记FAQ】列置为"是"。我们可使用飞书机器小助手,设置当我们设置"水果店客服记录表"表中的记录【是否登记FAQ】列置为"是"时,自动将这条记录更新到表【水果店客服FAQ】中。


4. 知识库配置
知识库中我们可根据手上的材料类型上传,可配置不同的分段策略。
飞书表格由于本身就是结构化数据,直接导入即可。

五、写在最后
到这一步就完成了一个基本的智能客服配置了,具体需要拓展可根据实际场景中进行修改。我们在项目中使用了双路径的回答模式,能收集更全面的用户问题数据,从而不断完善知识库内容,让客服系统变得越来越全面,用户咨询体验越来越好。