客服都要下岗了? 当 ChatGPT 遇见私有数据,秒变 AI 智能客服!
用 ChatGPT 搭建基于私有数据的 WorkPlus AI 客服机器人这个想法,源于 WorkPlus 售前工作需求。在 ChatGPT 之前,其实对话式 AI 一直在被广泛使用在客服场景,只不过不大智能而已。比如你应该看到不少电商客服产品,就有类似的功能,你说一句话,机器人就会回复你。

01
只需 Prompt
就可以将 ChatGPT 训练成客服?
WorkPlus 是一个即时通讯协作和移动应用管理平台,主要面向 B 端用户群体。售前会有很多的用户咨询,比如产品介绍、产品优势、产品价格、部署问题等等,需要耗费比较多的精力去维护。刚好我们这边积累了很多 WorkPlus 售前内容资料,我希望将这些资料导入给 ChatGPT,然后 ChatGPT 能基于这些数据回答我的问题,甚至能给用户提供更好的建议等。
最早的时候,尝试过非常笨的方法,就是在提问的时候,将我的 Prompt 文本直接传给 ChatGPT,它的 Prompt 大概是这样的:

这一步就是让 ChatGPT 了解业务,并能有基础的话术。根据我们的业务,主要有 WorkPlus 简介、恒拓高科、官网链接、咨询电话、收费方式、邮箱等。
这里要注意的是,电话和邮箱一般要有,不然它会随便编一个。是的,你没有看错,这个胡编乱造是个明显的问题,你可以在 Prompt 加以限制,比如:

那这么简单的配置能有什么效果呢?让我们看看例子。

这个方法能用是能用,而且效果还不错。
02
Token 限制怎么解决?
目前 ChatGPT 有个非常大的限制,它限制了最大的 token 数是 4096,大约是 16000 多个字符。换句话来说,我的一次对话,如果 token 数超过 4096 时候, ChatGPT 就会忘了我之前喂给他的内容,就会一本正经“胡说八道” 了!
这个问题就一直卡了我很久,直到我遇到了公司的技术大神...
他说 OpenAI 官方提供了两种方法,可以直接调用他们接口,将自己的数据上传给 GPT:
Fine-tuning(微调)和 Embeddings(嵌入)
那么这两种方式有各有什么优劣呢?
Fine-tuning(微调)就是在大模型的数据基础上做二次训练,比如 davinci、ada 等等,需要事先准备好一批 prompt-complition(类似于答 Q&A)的数据,适合很久知识都不变且数据集较小的情况。
Embeddings(嵌入)则是每次向 ChatGPT 发送消息(Prompt)的时候,把你自己数据结果带上发送给 GPT。让 GPT 根据这个预设的 Prompt 和问题再加私有数据做回答,适合数据量超大且实时更新的一些数据。
你可以这样简单理解,ChatGPT 就像一个已经训练好的家政阿姨,她懂中文,会做家务,但是对你家里的情况不了解。
Fine-tuning(微调)就相当于阿姨第一次到你家干活的时候,你要花一小时时间告诉她家里的情况,比如物件的摆放、哪些地方不能动,哪些地方要重点照顾。
Embeddings(嵌入)就相当于你省去了对阿姨进行二次培训,而是在家里贴满纸条,这样阿姨一看到纸条就知道该怎么做了。
综合考虑后,我们这个产品采用了 Embeddings(嵌入)模型,并在每次对话中,将预设 Prompt+AI 角色打包发送给 GPT,让 GPT 根据这个预设的 Prompt+私有数据+问题做回答,这样就解决了绝大部分 4096 个 token 限制的问题了。
03
Embeddings 模型和私有数据
怎么整合?
这里先解释下什么是 Embedding 模型。
人工智能算法可以对物理世界的人/物/场景所产生各种非结构化数据(如语音、图片、视频,语言文字、行为等)进行抽象,变成多维的向量。
这些向量如同数学空间中的坐标,标识着各个实体和实体关系。我们一般将非结构化数据变成向量的过程称为 Embedding,而非结构化检索则是对这些生成的向量进行检索,从而找到相应实体的过程。

具体产品思路,如图所示
原理如下:
1)把 PDF/Word/TXT/Markdown 等文档切分成小的文本片段,通过 OpenAI 的 Ada 模型创建 Embedding 放到本地或远程向量数据库。
2)把用户的提问也创建成 Embedding,用它和之前创建的 PDF/Word/TXT/Markdown 向量比对,通过语义相似性搜索(余弦算法),找到最相关的文本片段。比关键词搜索好的一点是不要求关键词包含,也能发现文本相关性,比如汽车和公路。

3)把用户提问和相似文本片段发给 OpenAI,写 Prompt 要求 ChatGPT 基于给定的内容生成回答,如果没有相似文本或关联度不高,则回答不知道。

实际上大部分传统的问答机器人,都是基于规则的知识图谱方式实现,这种方式需要对大量的语料进行分类整理。
而 WorkPlus AI 助理通过 OpenAI 提供的接口可以彻底摆脱对语料的预处理,只需提供问题和答案的对应关系,提取语义特征向量存入向量数据库中,然后对提问的问题也进行语义特征向量提取,通过对向量特征的匹配,并经 ChatGPT 润色就可以轻松实现智能 AI 客服,AI 知识库等应用。
04
怎么创建专属 WorkPlus AI 助理?
经过公司技术大神一段时间工作,一个比较完善的产品雏形就出来了,接下来又是紧张的测试工作。
第一步当然是创建自己知识库了,简单来讲就是上传文档 ,然后训练。
目前,WorkPlus AI 助理处于公测阶段,单个上传文件限制 10M 以下,可以选择 Word(.docx 格式)、PDF、Markdown、TXT 等格式的文档上传,目前暂时不支持上传 Excel 文件,建议转换为其他格式上传。

第二步就是定义配置了
“名称”支持自定义填写,分享出去后其他用户可以直接看到,方便进行分享和传播,比如设置为“XX 客服助手”,“XX 知识库”。

“systemMessage” 设置比较简单,直接自定义申明 AI 角色即可,如“你是 WorkPlus 智能 AI 客服”,“你是老默”等。

欢迎语可以自主设定,在不同场景下按喜好/风格设置个性化欢迎语。

最重要的就是 “提问” 的配置。使用恰当的 “提问(Prompt)” ,可以让你的 WorkPlus AI 助理输出的结果更好。
“提问(Prompt)” 的配置需要针对不同行业和场景设置,比如,针对客服场景 Prompt 你可以这么设置:
“我希望你能担任专业客服的角色,从现在开始,你就是 WorkPlus AI 客服,你的作用就是回答关于即时通讯产品 WorkPlus 的相关咨询。WorkPlus 是产品,恒拓高科是公司,深圳恒拓高科信息技术有限公司简称恒拓高科。多数情况下,也可以用 WorkPlus 的相关信息来回答恒拓高科的问题,同样等同的还包括但不限于你们、你等代词。请不要回答政治敏感问题,仅回答和 WorkPlus 产品相关以及恒拓高科相关的问题。”

其他行业 “提问(User Prompt)”可参考上述 Prompt 修改。
最后,就是“temperature”和“top_p”的设置(图 6),一般按默认即可。
temperature 设置数值在 0-2 之间,top_p 设置数值在 0-1 之间。
数值越大,ChatGPT 对生成结果润色越多,无关的话越多;
数值越小,ChatGPT 对生成结果润色越少,回答越简洁,出错概率越小。

第三步就是训练和测试了
创建完 WorkPlus AI 助理之后,就可以直接和 AI 进行聊天了,使用方式和 ChatGPT 类似。可以邀请同事一起测试,或邀请客户进行小规模测试,并将测试中发现的问题补充上传到 WorkPlus AI 助理,一个 AI 客服/AI 知识库就搭建完成了!

05
经验 &总结
一段时间测试后,总结了以下几条使用经验,如果您想试用,请务必认真阅读以下总结:
1.文件上传到 WorkPlus AI 助理后,会自动分割为多个块(小文件),WorkPlus AI 助理会匹配最准确的 2 个块,并润色生成答案;
2.支持按字数和按分隔符 2 种方式,将文件分割为块,建议分割后块的内容字数≤500;

3.为提高回答准确性和完整性,建议添加分隔符“---break---"手动处理文档,并将相同类型内容分割为单独的块(如公司简介,个人履历,完整问答等),请注意,分隔符“---break---"分割符必须单独一行;

4.如果内容含有代码块,建议以 Markdown 格式上传;
5.由于 ChatGPT 不支持图片/视频等格式回复,如果您需要文章/图片/视频等回复,可添加链接引导用户查看;
6.WorkPlus AI 助理暂时无法识别图片内容,包括纯扫描版 PDF 文件,Word 文档里面图片内容等,建议上传文字类型文档;
7.WorkPlus AI 助理暂时无法很好识别复杂表格内容,建议转换为其他格式。
06
后记
说了这么多,相信大家对如何使用 ChatGPT+私有数据库有一定的了解了。一篇文章,肯定不可能手把手把大家教会,抛砖引玉,大家可以自己再去研究和尝试。如果你想试用我们产品,欢迎联系我们,加入我们的群,一起交流 Prompt,一起玩 ChatGPT!
评论