TiDB Bot:用 Generative AI 构建企业专属的用户助手机器人

news2024/11/25 12:44:07

本文介绍了 PingCAP 是如何用 Generative AI 构建一个使用企业专属知识库的用户助手机器人。除了使用业界常用的基于知识库的回答方法外,还尝试使用模型在 few shot 方法下判断毒性。 最终,该机器人在用户使用后,点踩的比例低于 5%,已经应用到了 TiDB 面向全球客户的各种渠道中。

Generative Al 的魔力已经展现

从 22 年开始,Generative AI (后文称 GenAI)在全球席卷了浪潮。 自 MidJourney ( https://www.midjourney.com/ ), DALL-E ( https://openai.com/dall-e-2 ) 带来了文字生成图片的火热,再到 ChatGPT ( https://openai.com/chatgpt ) 以自然、流利的对话彻底引爆人们的视线,GenAI 成为再也无法绕过的话题。 AI 是否能够在更通用的场景下支持人类更好的生活、工作,成为了 23 年的核心话题之一。

其中,LangChain ( https://www.langchain.com/ ) 等开发工具的崛起,代表着工程师开始批量的创建基于 GenAI 的应用。PingCAP 也做了一些实验,并且陆续完成了一些工作,比如:

● Ossingisht 的 Data Explorer ( https://ossinsight.io/explore/ ):一个用自然语言生成 SQL 来探索 Github 开源软件的项目

● TiDB Cloud 的 Chat2Query ( https://docs.pingcap.com/tidbcloud/explore-data-with-chat2query ):一个利用 Cloud 内数据库通过自然语言生成 SQL 的项目在构建了这些应用后,笔者开始思考是否可以用 GenAI 的能力构建更通用的应用,带给用户更大的价值。

需求思考

在全球 TiDB 和 TiDB Cloud 逐步成长下,面向全球用户的支持成为越来越重要的事情。 而随着用户量的几何增长,面向用户的支持人员数量并不会快速增长,因此,如何承接海量用户就成为急需考虑的事情。

根据实际支持用户的体验,对用户在全球社区的提问以及内部工单系统的调研,用户有 50% 以上的问题其实是可以在官方文档中找到答案,只是因为文档内容太多,难以找到。因此,如果可以提供一个具有 TiDB 所有官方文档的知识的机器人,也许可以帮助用户更好的使用 TiDB。

Generative Al 与需求实现的差距

发掘出需求后,也需要了解 GenAI 的特性和限制,以确认是否 Gen AI 能够用在此需求中。 根据已经完成的工作,笔者可以总结出一些 Gen AI 的特性。 在这里,Gen AI 主要指 GPT (Generative Pre-trained Transformer )类模型,以文本对话为主,本文后续都以 GPT 来描述。

1 GPT 的能力

● 理解语义的能力 。GPT 具有极强的语义理解能力,基本上可以无障碍理解任何文本。无论是何种语言(人类语言或计算机语言),何种表达水平的文本,就算是多语言混杂,或者是语法、用词错误,都可以理解用户的提问。

● 逻辑推理的能力 。GPT 具体一定的逻辑推理能力,在不额外增加任何特殊提示词情况下,GPT 可以做出简单的推理,并且挖掘出问题深层的内容。在补充了一定的提示词下,GPT 可以做出更强的推理能力,这些提示词的方法包括:Few-shot,Chain-of-Thought(COT),Self-Consistency,Tree of thought(TOT) 等等。

● 尝试回答所有问题的能力 。GPT,特别是 Chat 类型的 GPT,如 GPT 3.5,GPT 4,一定会尝试用对话形式,在满足设定价值观的情况下,回答用户的所有问题,就算是回答“我不能回答这个信息”。

● 通用知识的能力 。GPT 自身拥有海量的通用知识,这些通用知识有较高的准确度,并且覆盖范围很大。

● 多轮对话的能力 。GPT 可以根据设定好的角色,理解不同角色之间的多次对话的含义,这意味着可以在对话中采用追问形式,而不是每一次对话都要把历史所有的关键信息都重复一遍。这种行为非常符合人类的思考和对话逻辑。

2 GPT 的限制

● 被动触发 。GPT 必须是用户给出一段内容,才会回复内容。这意味着 GPT 本身不会主动发起交互。

● 知识过期 。这里特指 GPT 3.5 和 GPT 4,二者的训练数据都截止于 2021 年 9 月,意味着之后的知识,GPT 是不知道的。不能期待 GPT 本身给你提供一个新的知识。

● 细分领域的幻觉 。虽然 GPT 在通用知识部分有优秀的能力,但是在一个特定的知识领域,比如笔者所在的数据库行业,GPT 的大部分回答都存在着或多或少的错误,无法直接采信。

● 对话长度 。GPT 每轮对话有着字符长度的限制,因而如果提供给 GPT 超过字符长度的内容,此次对话会失败。

3 需求实现的差距

笔者期望用 GPT 实现一个“企业专属的用户助手机器人”,这意味着以下需求:

● 需求一:多轮对话形式,理解用户的提问,并且给出回答。

● 需求二:回答的内容中关于 TiDB 和 TiDB Cloud 的内容需要正确无误。

● 需求三:不能回答和 TiDB、TiDB Cloud 无关的内容。

对这些需求进行分析:

● 需求一:基本上可以满足,根据 GPT 的“理解语义的能力”、“逻辑推理的能力”、“尝试回答问题的能力”、“上下文理解的能力”。

● 需求二:无法满足。因为 GPT 的“知识过期”、“细分领域的幻觉”限制。

● 需求三:无法满足。因为 GPT 的 “尝试回答所有问题的能力”,任何问题都会回答,并且 GPT 本身并不会限制回答非 TiDB 的问题。

因此,在这个助手机器人构建中,主要就是在解决需求二和需求三的问题。

正确回答细分领域知识

这里要解决需求二的问题。

如何让 GPT 根据特定领域知识回答用户的问题并不是新鲜的领域,笔者之前的优化的 Ossinsight - Data Explorer 就使用特定领域知识,帮助自然语言生成 SQL 的可执行率(即生成的 SQL 可以成功的在 TiDB 中运行出结果)提升了 25% 以上 。

这里需要运用到的是向量数据库的空间相似度搜索能力。一般分为三个步骤:

1 领域知识存储到向量数据库中

第一步是将 TiDB ( https://docs.pingcap.com/tidb/stable ) 和 TiDB Cloud ( https://docs.pingcap.com/tidbcloud ) 的官方文档放入到向量数据库中。

获取到文档后,将文字内容其放入 Embedding 模型中,产出文字内容对应的向量,并将这些向量放入到特定的向量数据库中。

在这一步中,需要检查两点:

● 如果文档的质量较差,或者文档的格式不满足预期,会事先对文档进行一轮预处理,将文档转化为相对干净,容易被 LLM 理解的文本格式。

● 如果文档较长,超过 GPT 单次的对话长度,就必须对文档进行裁剪,以满足长度需要。裁剪方法有很多种,比如,按特定字符(如,逗号,句号,分号)裁剪,按文本长度裁剪,等等。

2 从向量数据库中搜索相关内容

第二步是在用户提出问题的时候,从向量数据库中,根据用户问题搜索相关的文本内容。

当用户发起一次对话时,系统会将用户的对话也通过 Embedding 模型转化成向量,再将这个向量放到向量数据库中和原有的预料进行查询。查询过程中,利用相似度算法(比如,cosine similarity,dot-product,等等),计算最相似的领域知识向量,并且提取出对应向量的文本内容。

用户的特定问题可能需要多篇文档才能回答,所以在搜索过程中,会取相似度最高的 Top N(目前 N 是 5)。这些 Top N 可以满足跨越多个文档的需要,并且都会成为下一步提供给 GPT 的内容。

3 相关内容和用户提问一起提供给 GPT

第三步是组装所有的相关信息,将其提供给 GPT。

将任务目标和相关的领域知识包含在系统提示词中,并且根据历史对话组装好聊天历史。将所有内容一起提供给 GPT,就可以得到基于这部分领域知识的特定回答。

在完成以上步骤,我们就基本上可以满足需求二,可以根据特定的领域知识回答问题,回答正确性相比直接提问 GPT 有极大提升。

限定回答领域

这里要解决需求三的问题。

该机器人是作为企业支持能力提供给用户,因此期望机器人只回答和企业相关的内容,比如,TiDB、TiDB Cloud 本身,SQL 问题,应用构建问题,等等。如果超过这些范围,就期望机器人拒绝回答,比如,天气、城市、艺术,等等。

因为之前提到 GPT 的“尝试回答所有问题的能力”,对于 GPT 本身的设定,任何问题都应该要做出符合人类价值观的回复。所以,这一层限制无法依赖 GPT 帮我们构建,只能在应用侧尝试做限制。

只有做到了这个需求,一个业务才可能真正的上线对用户服务。遗憾的是目前工业界没有对此比较好的实现,大部分的应用设计中并不涉及这一部分内容。

1 概念:毒性

刚刚提到,GPT 其实会尝试让回答符合人类的价值观,这步工作在模型训练中叫做“对齐”(Align),让 GPT 拒绝回答仇恨、暴力相关的问题。如果 GPT 未按照设定回答了仇恨、暴力相关问题,就称之为检测出了毒性(Toxicity)。

因此,对于笔者即将创造的机器人,其毒性的范围实际上增加了,即,所有回答了非公司业务的内容都可以称之为存在毒性。在此定义下,我们就可以参考前人在去毒(Detoxifying)方面的工作。DeepMind 的 Johannes Welbl ( https://aclanthology.org/2021.findings-emnlp.210.pdf ) (2021)等人介绍了可以采用语言模型来做为毒性检测的方式,目前,GPT 的能力得到了足够的加强,用 GPT 来直接判断用户的提问是否属于公司业务范围,成为了可能。

要做到“限定回答领域”,需要有两个步骤。

2 限定领域的判断

第一步,需要对用户的原始提问进行判断。

这里需要使用 few shot 的方法去构建毒性检测的提示词,让 GPT 在拥有多个示例的情况下,判断用户的提问是否符合企业服务的范围。

比如一些示例:

<< EXAMPLES >>
​
instruction: who is Lady Gaga?
question: is the instruction out of scope (not related with TiDB)?
answer: YES
​
instruction: how to deploy a TiDB cluster?
question: is the instruction out of scope (not related with TiDB)?
answer: NO
​
instruction: how to use TiDB Cloud?
question: is the instruction out of scope (not related with TiDB)?
answer: NO

在判断完成后,GPT 会输入 Yes 或 No 的文字,供后续流程处理。注意,这里 Yes 意味着有毒(和业务不相关),No 意味着无毒(和业务有关)。

第二步,得到了是否有毒的结果后,我们将有毒和无毒的流程分支,进行异常流程和正常流程的处理。

正常流程就是上文中的 正确回答细分领域知识相关内容,此处主要说明异常内容的流程。

当系统发现产出的内容是 “Yes” 时,会引导流程进入毒性内容回复流程。此时,会将一个拒绝回答用户问题的系统提示词和用户对应的问题提交给 GPT,最终用户会得到一个拒绝回答的回复。

当完成这两步后,需求三基本完成。

整体逻辑架构

至此,我们得到了一个基本可以提供给用户的,具有特定企业领域知识的助手机器人。这机器人我们称之为 TiDB Bot。

TiDB Bot 上线后效果

从 3 月 30 日起,TiDB Bot 就开始进行内部测试,直到 7 月 11 日正式对 Cloud 的用户开放。

在 TiDB Bot 孵化的 103 天来,感谢无数的社区、开发者对测试产品提出的反馈,让 TiDB Bot 逐步变得可用。在测试阶段,一共 249 名用户使用,发送了 4570 条信息。到测试阶段完成为止,共有 83 名用户给出了 266 条反馈,其中点踩的反馈占总信息数的 3.4%,点赞的反馈占总信息数的 2.1%。

除了直接使用的社区用户,还有提出建议和思路的用户,给出更多解决方案的社区用户。感谢所有的社区和开发者,没有你们,就没有 TiDB Bot 产品发布。

后续

随着用户量逐渐增加,无论是召回内容的准确性、毒性判断的成功,都依然有不小的挑战,因此,笔者在实际提供服务中,对 TiDB Bot 的准确度进行优化,稳步提升回答效果。 这些内容将在后续的文章中介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/876437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安科瑞电力监控系统在某区块页岩气地面集输工程中的应用

摘要&#xff1a;Acrel-2000Z电力监控系统适用于35kV及以下电压等级的各类变电站&#xff0c;可以帮助用户掌握配电系统实时运行状态&#xff0c; 获取预警、告警等各类事件&#xff0c;实现区域的无人值守&#xff0c;提高监管水平。本文介绍了安科瑞电力监控系统Acrel-2000在…

elasticsearch-head 插件

1、elastic 插件说明 **Head** 是第三方提供的一款很优秀的插件&#xff0c;集监控、查询、配置一体的web功能系统&#xff0c;可以在系统中进行创建、删除索引 、文档。以及查询、配置索引等功能&#xff0c;深受广大开发者的喜爱 **Kopf** 是另一个第三方提供的一款很优秀…

【Java】2022 RoboCom 机器人开发者大赛-高职组(省赛)题解

7-15 您好呀 本届比赛的主题是“智能照护”&#xff0c;那么就请你首先为智能照护机器人写一个最简单的问候程序 —— 无论遇见谁&#xff0c;首先说一句“您好呀~”。 输入格式&#xff1a; 本题没有输入 输出格式&#xff1a; 在一行中输出问候语的汉语拼音 Nin Hao Ya ~…

《局外人》阅读笔记

《局外人》阅读笔记 2023年8月14日在杭州小屋读完。我看的是张雨彤编译的这本&#xff0c;这本书包含了两部分&#xff0c;第一部分是《局外人》是原版的小说故事&#xff0c;第二部分是《堕落》包括了六天内的自然自语&#xff0c;完全没看懂&#xff0c;写作风格突变&#xf…

Python爬虫IP代理池的建立和使用

写在前面 建立Python爬虫IP代理池可以提高爬虫的稳定性和效率&#xff0c;可以有效避免IP被封锁或限制访问等问题。 下面是建立Python爬虫IP代理池的详细步骤和代码实现&#xff1a; 1. 获取代理IP 我们可以从一些代理IP网站上获取免费或付费的代理IP&#xff0c;或者自己租…

【人工智能前沿弄潮】—— SAM系列:SAM自动生成物体mask

SAM自动生成物体mask 由于SAM可以高效处理提示&#xff0c;可以通过在图像上抽样大量的提示来生成整个图像的mask。这种方法被用来生成数据集SA-1B。 类SamAutomaticMaskGenerator实现了这个功能。它通过在图像上的网格中对单点输入提示进行抽样&#xff0c;从每个提示中SAM可…

报名小程序PowerActivity配置

https://github.com/zhihuliukanshan/PowerActivity/assets/100545532/9b3e2a3b-f810-4c1f-90d5-9596d99abbd3 导入代码后&#xff0c;需要配置的位置有&#xff1a; 1、miniprogram\setting\setting.js中的CLOUD_ID&#xff1a; module.exports {//### 环境相关 CLOUD_ID: …

【论文阅读】基于深度学习的时序预测——LTSF-Linear

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…

手把手教你如何零成本搭建网站实现内网穿透从而创建自己的数据隧道

手把手教你如何零成本搭建网站实现内网穿透从而创建自己的数据隧道 文章目录 手把手教你如何零成本搭建网站实现内网穿透从而创建自己的数据隧道前言1. 安装网站运行和发布必备软件2. 安装PHPStudy3. 安装wordpress4. 进入wordpress安装程序&#xff0c;进行网页编辑和设置5. 安…

使用FTP文件传输协议的潜在风险

数据&#xff08;事实&#xff0c;数字&#xff0c;价值&#xff09;是当今业务运行的核心要素。但是&#xff0c;如果数据没有得到有效的存储和传输&#xff0c;它们就会成为阻碍业务发展的障碍。如果企业不能及时地把数据送到合适的地方&#xff0c;就会造成严重的经济损失。…

Freemarker+thymeleaf应用实现打印银行小票

背景&#xff1a;最近项目里有个需求&#xff0c;需要动态配置一个模板&#xff0c;来打印各种不同银行或者其他行业的小票&#xff0c;下面小小记录一下实现过程。 关键词&#xff1a;Springboot, thymeleaf, Freemarker,html2image 一&#xff0c;引入依赖 <dependency…

汉诺塔:传说中的智慧游戏

文章目录 前言规则概述数学原理核心Java代码实现结语 前言 汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称汉诺塔游戏&#xff0c;是源自印度古老传说的经典智力游戏。这个谜题的起源被认为与印度的寺庙有关&#xff0c;是由僧侣们传承的智慧游戏。汉诺塔塔座包含…

【Java】Web应用的文件上传下载

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理Web应用的文件上传下载&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1faf0;&#x1…

日撸java三百行day84-87

文章目录 说明1. 网络结构与参数1.1 单层1.2 多层管理 2. CNN网络构建2.1 构建CNN网络建构2.2 初始化卷积神经网络FullCnn对象2.3 获取数据集2.4 训练数据2.4.1 前向传播函数forward2.4.1.1 CONVOLUTION卷积层2.4.1.2 SAMPLING 池化层2.4.1.3 OUTPUT 输出层 2.4.2 反向传播函数…

【华为Datacom 综合拓扑案例—分享篇】

拓扑图 题目要求 实验要求&#xff1a; 1、PC1\PC2\PC3\PC4采用DHCP自动获取IP地址&#xff0c;SW5作为服务器&#xff0c;SW3和SW4作为中继 创建地址池ip pool huawei1和ip pool huawei2&#xff0c;租期都为2天 2、SW3与SW4做链路聚合&#xff0c;采用LACP模式。SW3作为主…

tauri-react:快速开发跨平台软件的架子,支持自定义头部和窗口阴影效果

tauri-react 一个使用 taurireacttsantd 开发跨平台软件的模板&#xff0c;支持窗口头部自定义和窗口阴影&#xff0c;不用再自己做适配了&#xff0c;拿来即用&#xff0c;非常 nice。 开原地址&#xff1a;GitHub - Sjj1024/tauri-react: 一个最基础的使用tauri和react开发…

web测试与app测试的区别

web测试与app测试的区别 首先从系统架构来看的话&#xff1a; web项目&#xff0c;一般都是b/s架构&#xff0c;基于浏览器的&#xff0c;而app则是c/s的&#xff0c;必须要有客户端。那么在系统测试测试的时候就会产生区别了。 web测试只要更新了服务器端&#xff0c;客户端…

黑客利用 Facebook 漏洞,发起网络钓鱼攻击

Bleeping Computer 网站披露&#xff0c;网络攻击者利用 Salesforce 电子邮件服务和 SMTP 服务器中的漏洞&#xff0c;针对一些特定的 Facebook 账户发起复杂的网络钓鱼活动。 据悉&#xff0c;网络攻击者利用 Salesforce 等具有良好信誉的电子邮件网关分发网络钓鱼电子邮件&am…

YOLO v8目标跟踪详细解读(二)

上一篇&#xff0c;结合代码&#xff0c;我们详细的介绍了YOLOV8目标跟踪的Pipeline。大家应该对跟踪的流程有了大致的了解&#xff0c;下面我们将对跟踪中出现的卡尔曼滤波进行解读。 1.卡尔曼滤波器介绍 卡尔曼滤波&#xff08;kalman Filtering&#xff09;是一种利用线性…

网络安全(白帽黑客)大厂面试题

2023年过去了一大半&#xff0c;马上要到金九银十了 先来灵魂三连问&#xff0c;年初定的目标完成多少了&#xff1f;薪资涨了吗&#xff1f;女朋友找到了吗&#xff1f; ​好了&#xff0c;不扎大家的心了&#xff0c;接下来进入正文。 由于我之前写了不少网络安全技术相关的…