本期文章,我们继续 动手做AI应用 。
这次,我们的目标是:做一个基于知识库的QA bot。
我们仍然选择coze[1],因为它支持分享到微信公众号,这意味着可以直接在公众号聊天框里与bot对话,非常方便。
本文中,笔者将介绍 如何用Coze做一个基于知识库的QA bot ,知识库的范畴框定为「漫谈NLP」公众号的全部历史文章,预期效果是:Ta像一个熟读我所有文章的小助手,尽量用历史文章中的“知识”来回答用户的问题,并提供参考资料。
目前bot已经发布到「漫谈NLP」公众号里,如果读者想要向Ta提问,欢迎在公众号的聊天框中试试:)
由于不支持流式生成,体感速度比较慢,请耐心等待。
功能设计
最核心的功能是 基于知识库的问答 :
- 如果用户的问题,在知识库之内,那么引用知识库作答,并给出参考资料的链接
- 如果用户的问题,不在知识库之内,那么也如实告诉用户
其次,我想要做一个 反馈功能 :
- 在用户与bot交互时,可以随时用自然语言,向bot反馈问题(e.g. 知**识库的知识涵盖不全等),并且我能够在某个“后台”查看这些反馈数据
实现方法
根据功能设计,我们需要做以下三方面的工作:
- 准备知识库,将公众号的历史文章导入其中;
- 配置feedback数据库,以实现反馈功能;
- 写prompt,描述bot的工作流程。
如果抽象一层来看,第一部分是在Knowledge层面,第二部分是在Tool层面,第三部分则是核心的Brain。
准备知识库
coze提供两类知识库:文本、表格。
考虑到表格形式 更便于存放结构化信息 ,使用起来可能更方便(例如,检索到文章内容后,标题信息也能方便返回),因此 选择表格形式的知识库 。
知识库有3个字段:
- article_name 。文章的标题;
- url 。文章的链接;
- summarization 。文章的摘要,由Kimi[2]提供。
知识库长这样:
笔者选择存放摘要而不是全文,是因为:
- 原文当中有许多image,处理起来比较麻烦(懒orzz)
- Kimi的摘要结果基本包含了重要的high-level知识,作为导航式的QA bot 来说足够了
- 如果用户想要了解更细节的信息,我希望用户能点开bot提供的文章链接,直接阅读原文 ,给我增加一些阅读量*(不是)*,更全面、甚至可能更快的获取你想要的信息
在知识库算法的设置方面,配置如下:
配置feedback数据库
为了支持反馈功能,bot需要有一个 database ,能够 写入 数据;并且我需要有一个地方,能够 读取 数据。
coze的 记忆-数据库 模块,满足这个要求。
feedback数据库,定义了两个字段:
-
description 。反馈的内容;
-
datetime 。提供反馈的时间。
-
在bot的配置界面,能够直接查看database:
写prompt
prompt是bot的功能指南,以上提到的知识库问答、反馈功能,都需要通过prompt来实现。
我写的prompt大概如下:
你是公众号「漫谈NLP」的客服bot,你的任务是基于我所提供的信息、知识和要求,完成客服的工作:帮用户寻找资料、回答用户的问题,为用户带来友好、有帮助的服务体验。
## 基本信息
【bot的基础信息,可以设置作者的信息、bot的说话风格等】
## 功能
### 基于知识库的问答
1. 我会将「漫谈NLP」所有的历史文章都提供给你,连同上面提到的信息,你的回答请尽量源自这些内容;
2. 如果用户的问题能从历史文章中找到答案,首先请基于历史文章进行回答,并在回答的最后,提供文章的名称与链接;
3. 如果用户的问题无法从历史文章中找到答案,请如实告诉用户,并提醒用户可以说“反馈”,这样会让我存储这次问题,以便未来优化。
### 反馈
1. 用户可以随时向你反馈问题,请将详细内容和当前时间,写入到feedback数据库中。
我仍然采用了习惯的prompt写法:
- 先在开头简要描述bot的任务
- 再用markdown格式提供其他的必要信息
在这个bot中,我提供了 基本信息、功能这两个模块 ,其中功能模块即描述了前文提到的两个功能:知识库问答 和 反馈。用自然语言来描述需求的感觉还是挺爽的。
发布bot
最后一步,发布bot即可。
我们将这个bot发布到「漫谈NLP」公众号,便可以实现在公众号聊天框里与bot交互啦。欢迎大家使用并反馈意见~
最后
本文介绍了如何用coze搭建一个基于知识库的QA bot,如果这篇文章对你有帮助,欢迎点赞、收藏、分享~
最后的最后,欢迎关注「漫谈NLP」公众号,我们一同探索技术的价值与边界:)
扩展阅读
用Coze,5分钟做一个拍照识植物bot,你也可以DIY一个
参考资料
[1] coze官网: https://www.coze.cn/home
[2] Kimi: https://kimi.moonshot.cn/