原文:基于本地知识的问答机器人langchain-ChatGLM - 知乎

背景

ChatGPT火了后,各种大语言模型(LLM)模型相继被发布,完全开源的有ChatGLM、BLOOM、LLaMA等。但是这些模型学到的知识是滞后的(比如ChatGPT的知识是截止到2021年),并且这些知识是通用领域的。

在实际应用场景中,除闲聊机器人外,大多数机器人是为了完成特定任务的。比如数字人虚拟主播、某公司的智能客服等都需要围绕具体的业务来进行问答。如何将具体业务知识融合到大语言模型里,是问答机器人落地应用需要考虑的一个重要问题。

一、langchain-ChatGLM简介

langchain-ChatGLM是一个基于本地知识的问答机器人,使用者可以自由配置本地知识,用户问题的答案也是基于本地知识生成的。github链接为:GitHub - imClumsyPanda/langchain-ChatGLM: langchain-ChatGLM, local knowledge based ChatGLM with langchain | 基于本地知识的 ChatGLM 问答。

二、以淘宝衣服为例,测试问答效果

以淘宝衣服属性构建本地知识,测试问答效果。将淘宝链接为https://detail.tmall.com/item.htm?abbucket=6&id=656544342321&ns=1&spm=a230r.1.14.48.b3f84f64A9YLJ0的"宝贝详情"和"尺码推荐"整理成《local_knowledge_clothing_describe.txt》,内容如下:

身高:160-170cm, 体重:90-115斤,建议尺码M。
身高:165-175cm, 体重:115-135斤,建议尺码L。
身高:170-178cm, 体重:130-150斤,建议尺码XL。
身高:175-182cm, 体重:145-165斤,建议尺码2XL。
身高:178-185cm, 体重:160-180斤,建议尺码3XL。
身高:180-190cm, 体重:180-210斤,建议尺码4XL。
身高:180-195cm, 体重:210-230斤,建议尺码5XL。
面料分类:涤纶
图案:几何图案
领型:连帽
衣门襟:拉链
颜色:黑色302春秋款(斜插口袋) 深灰色302春秋款(斜插口袋) 蓝色302春秋款(斜插口袋) 米色302春秋款(斜插口袋) 黑色303春秋款(工装口袋) 深灰色303春秋款(工装口袋) 蓝色303春秋款(工装口袋) 黑色303(冬季棉衣款加棉加厚) 深灰色303(冬季棉衣款加棉加厚) 蓝色303(冬季棉衣款加棉加厚) 黑色302(冬季棉衣款加棉加厚) 米色302(冬季棉衣款加棉加厚) 黑色303春秋款+黑色302春秋款 深灰色303春秋款+黑色302春秋款
袖型:收口袖
适用季节:春秋
袖长:长袖
厚薄:常规
适用场景:其他休闲
衣长:常规款
版型:宽松型
款式细节:假两件
工艺处理:涂层
适用对象:青少年
面料功能:防风
穿搭方式:外穿
材质成分:聚酯纤维100% 

加载《local_knowledge_clothing_describe.txt》作为本地知识,问答效果如下所示:

用户:身高173,体重144斤,选什么尺寸
客服您的身高为173厘米,体重为144斤,建议选择尺码为XL。这个尺寸适用于身高在170-178厘米之间,体重在130-150斤之间的人。选择XL尺寸可以确保衣服能够合适地遮盖住身体,同时不会过小或过大,确保穿着舒适。
用户:衣服是什么材质
客服: 衣服的材质成分为聚酯纤维100%

从测试的问答效果上来看,满足了基本的要求,具体情况仍需要更多的实测结果来说明。

三、langchain-ChatGLM的原理

先上图,langchain-ChatGLM的架构如下图所示:

图1、langchain-ChatGLM的架构

3.1、从本地知识中获取与用户query相关的context

通过Faiss搜索得到与query_embedding关系最紧密的Top K个Document,将这些Document的内容按换行符拼起来作为query的context。举例说明如下图所示:

图2、通过Faiss搜索得到query相关的context

3.2、用query和context填充模版得到prompt

模版示例如下,可根据问答效果自行修改

prompt_template = """基于以下已知信息,简洁和专业的来回答用户的问题。不允许在答案中添加编造成分。已知内容:{context}问题:{query}"""

将context和query填充到模版得到的prompt,加它输入给ChatGLM-6B就能生成response。

四、langchain-ChatGLM使用中

五、问答需要优化的环节

个人认为langchain-ChatGLM是一种使用本地知识进行问答的框架,它的实际问答效果与下面两个问题相关:

1、如何通过得到query相关性高的context,即与query相关的Document尽可能多的能被召回;

2、如何让LLM基于query和context得到高质量的response。

5.1、让query相关的Document尽可能多的被召回

将本地知识切分成Document的时候,需要考虑Document的长度、Document embedding质量和被召回Document数量这三者之间的相互影响。在文本切分算法还没那么智能的情况下,本地知识的内容最好是已经结构化比较好了,各个段落之间语义关联没那么强。Document较短的情况下,得到的Document embedding的质量可能会高一些,通过Faiss得到的Document与query相关度会高一些。

使用Faiss做搜索,前提条件是有高质量的文本向量化工具。因此最好是能基于本地知识对文本向量化工具进行Finetune。另外也可以考虑将ES搜索结果与Faiss结果相结合。

5.2、基于query和context让LLM得到高质量的response

有了query相关的context后,如何让LLM生成高质量的response,也是一个非常重要的问题。优化的点有两个:①、尝试多个的prompt模版,选择一个合适的,但是这个可能有点玄学;②、用与本地知识问答相关的语料,对LLM进行Finetune。

编辑于 2023-04-20 19:08・IP 属地浙江

基于本地知识库的问答机器人langchain-ChatGLM相关推荐

  1. 利用langchain-ChatGLM、langchain-TigerBot实现基于本地知识库的问答应用

    目录 1 原理 2 langchain-ChatGLM的开发部署 2.1 安装环境 2.2 加载本地模型 3 langchain-TigerBot的开发部署 刷B站的时候,无意中看到吴恩达的一个lan ...

  2. 给LLM装上知识:从LangChain+LLM的本地知识库问答到LLM与知识图谱的结合

    前言 过去半年,随着ChatGPT的火爆,直接带火了整个LLM这个方向,然LLM毕竟更多是基于过去的经验数据预训练而来,没法获取最新的知识,以及各企业私有的知识 为了获取最新的知识,ChatGPT p ...

  3. 从零实现Transformer、ChatGLM-6B、本地知识库、模型(训练/推理)加速

    前言 最近一直在做类ChatGPT项目的部署 微调,关注比较多的是两个:一个LLaMA,一个ChatGLM,会发现有不少模型是基于这两个模型去做微调的,说到微调,那具体怎么微调呢,因此又详细了解了一下 ...

  4. 开发一个智能问答机器人

    近期开发了一套基于自然语言处理的问答机器人,之前没有做过python,主要做asp.net,写这篇目的是给想要开发这类智能客服系统的朋友提供一个思路,项目已经上线,但在开发和设计过程中仍然有很多问题没 ...

  5. 微信公众号对接ChatGPT-实现基于自己知识库的机器人功能-并且可以人工接入进行回复的客服系统...

    现在很多教程有介绍如何把chatGPT对接到自己的公众号上,利用公众号的自动回复接口功能,实现用户在公众号与chatGPT进行交互. 而我实现的功能比上面的要高级很多 首先,用户在公众号端发送咨询消息 ...

  6. 问答机器人2.0!文档问答产品科普

    在之前的文章里,我们测试过百度UNIT的图形化多轮对话编辑功能TaskFlow,今天我们将带大家体验UNIT和小i机器人最新的文档问答(document-based question answerin ...

  7. 问答机器人接口python_设计用于机器学习工程的Python接口

    问答机器人接口python In order to do machine learning engineering, a model must first be deployed, in most c ...

  8. 智能对话引擎:两天快速打造疫情问答机器人

    01 微软AI技术+开源知识库=疫情机器人 近一个月来,"新冠肺炎疫情"成了所有人的热点话题,抗击疫情的战役在全国紧张有序地进行着.随着全国各地的企业陆续复工,怎样防范.保护自己和 ...

  9. 原来AI也可以如此简单!教你从0到1开发开源知识问答机器人

    摘要:使用华为云EI智能机器人技术,从0到1开发一款开源知识问答机器人. 前言 最近有幸参与了开源社开源问答机器人的知识库编写,碰巧看到华为云也有类似的智能机器人,抱着试一试的心态,我开始了EI智能机 ...

最新文章

  1. Spark新愿景:让深度学习变得更加易于使用——见https://github.com/yahoo/TensorFlowOnSpark...
  2. overflow与min-width
  3. 介绍 WebLogic 的一些结构和特点
  4. Element Select多选选中项溢出选项框
  5. [vue插件]基于vue2.x的电商图片放大镜插件
  6. Linux自有服务(2)-Linux从入门到精通第六天(非原创)
  7. Java代码块的基本使用
  8. java中的foreach用法及总结
  9. __proto__ 和 prototype 到底有什么区别
  10. Mac IDEA启动SpringBoot项目过慢
  11. Git修改提交的用户名和Email
  12. Java技术专题之JVM逻辑内存回收机制研究图解版
  13. django2连接mysql_Django2.2 连接mySQL数据库
  14. SAP GUI 一些实用技巧分享
  15. json html api文档,jsonEditor api介绍
  16. Android中访问assets本地json文件
  17. Unity开发教程 打造战棋手游《天地劫》
  18. android获取指定位置经纬度,Android - 如何获取当前位置(经度和纬度)?
  19. WIN10运行软件,窗口不显示 解决办法
  20. 解决 手机使用10193 拨打国际长途时候 国际拨号助手 自动增加区号的问题

热门文章

  1. 谷歌浏览器插件ghelper的安装
  2. 安卓 (xml解析、高德地图)
  3. cad修改标注尺寸方法
  4. 南邮和重庆邮电大学计算机专业,高考:南京邮电大学和重庆邮电大学哪个好?...
  5. “预后meta分析”要提取数据,原文没有怎么办?
  6. 90后树友加入至善林钉钉合种的体验“不积小流,无以成江海”
  7. Phoebus手册3 -- 首选项设置
  8. POI Word 图表、柱状图、条形图、折线图、饼图
  9. lol服务器维修时间2018,《英雄联盟》维护到几点结束 2018维护公告介绍
  10. w10电脑c盘满了怎么清理_win10电脑C盘满了怎么清理?