使用chatgpt实现ai客服
公司最近接入了openai用于实现ai客服,记录一下。
openai目前支持微调(Fine-tuning)和 嵌入(Embedding)两种自定义的方式,我们公司这里选择的是嵌入。用到了openai的openai.Embedding.create与openai.ChatCompletion.create接口。
chatgpt可以在 prompt 中增加上下文,来提高Completion 准确率和相关性,我们这里在调用ChatCompletion.create时提供上下文给chatgpt,让他来回答。这里的上下文就是客服的历史会话记录,为了提高准确性,我们需要从历史会话中挑选出最准确的会话。获取准确的会话的方法就是把会话向量化,通过向量对比相似度,最终取得最相似的会话提供给chatgpt,这里就用到了Embedding.create接口,把历史会话文本转化为向量。向量数据需要向量数据库存储,这里我们用的是rediserach这个插件,它支持向量数据的存储。
在我们游戏中,ai客服大致工作流程如下图:
说下使用体验,我们游戏目前使用的历史会话数据大约有5w条,ai的回复准确率还行,也有几个问题。第一个,真人的历史会话中有这种场景,玩家提了bug客服不能立刻反馈,于是回复玩家:“我们已经反馈给开发人员”等这种话术。如果我们在查询相似历史会话的时候命中这种会话数据,那么ai也会回复说已经反馈到相关人员哪里,实际上相关人员是不知道的,显然这是有问题的。第二个,游戏中有些专业术语ai不能正常理解,比如我们游戏中有个叫月卡的道具,搜索相似历史会话时会话中带有月卡字样,ai就会把月卡理解为月牌。目前以上的问题都是简单处理,检查下ai给的回答,如果有问题的话就不用ai的回答,直接给玩家转人工。后面打算在后台做个配置,在上下文中动态加入提示,让ai回避这些有问题的回答。