建筑,上诉人与被上诉人签订GPT-3和计算机Vision-Powered和人类对话智能机器人说话的泰迪熊

我建立了一个机器人的泰迪熊,自然可以移动它的脑袋和交谈。

Dexie谈话(图片作者)上诉人与被上诉人签订

我有一个很长的为期三周的圣诞假期,尽管花大部分的时间与我的家人,我有一些时间结束前杀了大约一个星期的休息,所以我决定建立一些有趣!我一直想找到一个好的用例GPT-3人工智能模型,我还想建一些有趣,Dexie互动和教育,我们三岁的儿子,他很健谈,很好奇。所以,我想出的想法建立机器人泰迪熊可以说话和行动。

概念

这个robotic泰迪熊将能够看到和认识一个人,叫它们的名字和她们说话。她会有听力能力倾听是表示和生成一个自然声音的反应。她需要能够理解会话上下文并生成相应的她的反应。我以后再详细说明这一点。在整个谈话中,她必须能够移动头看那个人的脸。

键因素最大化的目的,我决定把Dexie最喜欢的玩具之一,艾拉,这个机器人。我给她一个新名字,艾拉的,上诉人与被上诉人签订代表电子版本。

Dexie和艾拉,他最喜欢的泰迪熊娃娃由作者(图片)

研究

为了实现上述情况,需要有上诉人与被上诉人签订以下模块:

  • 视线。必须能够上诉人与被上诉人签订跟踪一个人的位置,实时识别自己的脸,这样她可以去看他们,叫人的名字。为此,我需要一个摄像头连接到一个人工智能系统来检测一个人的存在和位置和他们的脸和识别他们。对象检测人工智能模型训练承认需要一个人类的身体和自己的脸,将运行在一个增强设备连接到一个相机。
  • 头部运动。需要能够把她的头上诉人与被上诉人签订左/右和上/下(两个自由度)。
  • 听力。将上诉人与被上诉人签订需要能够听对话,这需要语音识别技术和一个麦克风。
  • 大脑。需要能够理解上诉人与被上诉人签订的口语和生成一个自然文本响应考虑过去的对话提供了一些背景。这需要一个强大的人工智能模型生成文本。
  • 演讲。需要的人打招呼,上诉人与被上诉人签订说大脑模块生成的文本响应,需要语音合成技术。
  • 协调员。这是连接所有所需的组件。

根据我过去的经验项目一些研究之后,我列出了一个运行所需的硬件系统。

  • 英伟达杰森纳米(150澳元)。这是一个微小的增强,嵌入式设备,将所有的模块(尤其是对象检测和人脸识别的人工智能模型)。这是一个完美的设备的工作,因为它可以通过USB接口支持麦克风和音频输出,和它有一个以太网端口容易做一个API调用的互联网接入。你甚至可以插入鼠标和键盘来开发和调试的设备,因为它有一个功能齐全的Ubuntu 18.04操作系统。
英伟达杰森纳米
  • USB麦克风和扬声器(AUD 20美元)。这些听起来不复杂;然而,人被报道,一些杰森纳米扬声器和麦克风不工作,所以希望你找到这些有用的细节。我可能是幸运的作为唯一的USB音箱我买了作品后摆弄发出嘶嘶声反馈的声音。然而,只有一个(USB)的两个麦克风我买了作品。看看这张照片下面的品牌和模式。
扬声器和麦克风由作者(图片)
  • 照相机-索尼IMX219 160(AUD 35美元)。这是一个很棒的,小160度的观点8 mp覆盆子相机使看到上诉人与被上诉人签订和承认的人。从我的经验与其他机器人项目,广角观点是至关重要的,否则,就不能发现上诉人与被上诉人签订任何人,除非他们直接在她面前,不自然的感觉。
  • 伺服电机(75澳元)。两个5公斤/厘米力矩伺服电机连接到云台支架将允许两个自由度旋转。PWM驱动程序是必需的驱动电机为杰森纳米GPIO管脚,只提供1 mA电流,而伺服马达画3电流。自从汽车只需要移动的上诉人与被上诉人签订的头,很轻,一个5公斤/厘米扭矩是绰绰有余。
伺服电机、支架和PWM驱动程序由作者(图片)
  • 根木棍和内阁(AUD 10美元)。根木棍将作为骨架结构连接相机,上诉人与被上诉人签订的伺服系统。木棍将连接到硬件组件隐藏的木柜子,将上诉人与被上诉人签订的。
的骨架结构和上诉人与被上诉人签订的内阁由作者(图片)

实现

一个坚实的计划,我开始完成我的使命。

构建视觉

从摄像头的视频,我使用了一个叫做Jetcam很棒的图书馆扩展。在4行代码,你可以使整个运行:

从jetcam。csi_camera进口CSICamera
相机= CSICamera(宽度= 224,高度= 224,capture_width = 224, capture_height = 224, capture_fps = 30)
形象= camera.read ()

接下来,一个对象检测组件需要分析视频帧和探测人体和脸的位置能够跟踪和看着他们。记住,NVIDIA杰森Nano的GPU强大远远低于桌面类像RTX GPU卡,所以选择一个对象检测模型体系结构,具有良好的精度和性能之间的平衡是至关重要的。

在过去,我总是使用MobileNetSSDV2模型架构构建Tensorflow上运行我的对象检测模型,提供了一个良好的精度和性能之间的权衡(10帧/秒)。这一次,我用MobileNetSSDV2模型,它有英伟达JetPack SDK运行在PyTorch和添加一样简单的三行代码:

进口jetson.inference
净= jetson.inference.detectNet (“ssd-mobilenet-v2阈值= 0.1)检测=净。检测(图片、宽度、高度)

令我惊奇的是,该模型提供了20 fps。甜蜜的!我不需要建立自己的模型,因为它已经支持91可可类包括人类的身体,这是我所需要的。

我使用一个Dlib,现代机器学习框架,探测和识别。我可以构建自己的定制对象检测,包括面对作为一个类;因此,我不需要运行另一个人脸检测,这可能会增加一些性能。但是,我决定不做这个我一直想给Dlib图书馆,这是完美的时间。此外,我懒得去构建自己的目标检测模型而不是简单地添加上述三行代码。
检测用Dlib很简单——两行代码给你一个列表,发现脸边界框得分他们的信心。

进口face_recognition
face_recognition.face_locations(图片)

为了识别面孔,Dlib提供了两个重要的功能。第一个函数face_encoding,基本上计算指纹,称为编码,一脸的形象。这个编码唯一地标识一个脸。第二个函数是face_distance,计算之间的距离(不同)脸编码的编码。距离的结果是一个列表,一个用于每一个脸。脸上是最小的距离是最相似的。

所以,这就是我如何使用它们。使用face_encoding函数,首先我的编码生成所有家庭成员的脸开始时的应用程序,并把它们保存在一个列表。在运行时,我叫face_encoding为每个视频帧检测到脸,在结果传递给face_distance计算之间的距离传递编码和编码列表,包含我的家人”。最后,我按升序排序结果,第一个(因为它还通过最小距离阈值,以防他们都没有我的家庭成员)。这意味着将永远无法认识到上诉人与被上诉人签订其他人呢?我为她增加了一个功能能够自动注册一个新的未被发现的人的脸,我在后面的一节将介绍。

对象检测和人脸识别由作者(图片)

检测/识别精度很好。然而,face_encoding和face_locations函数执行在杰森Nano约0.5秒。因此,称他们为每个视频帧将大大降低系统FPS从20 FPS 1帧/秒。这是不能接受的,因为它将引入一个+ 1秒之间的滞后,认为上诉人与被上诉人签订的脸的实际位置,导致她的头跟着某人的脸+ 1秒延迟。

的解决方案,这是在一个线程调用人脸检测和识别低FPS,如称他们每隔10帧。考虑到相机设置捕获10 fps,这意味着我们每秒钟执行人脸检测/识别,这不是太糟糕了。我使用相同的技术来运行对象检测每两帧,从而提高最终的性能到12 fps。

降低了目标检测和人脸检测和识别fps(图片作者)

这个技巧的作品时,我注意到,它引入了一个+ 1秒延迟,上诉人与被上诉人签订即它遵循人的脸与第一百一十二延迟发现脸位置每秒钟只得到一个更新。我解决了这个不使用的检测面位置跟踪的目的。相反,我假设pseudo-generate一脸的位置,垂直,这是在5% person-bounding盒子的顶部,距离中心的水平,它是person-bounding框。这种假设的作品很好,大多数时候,检测到人的头总是在视图。

伪代一脸边界框由作者(图片)

建筑头部运动

头部运动模块控制的每个角的两个伺服系统通过adafruit_servokit框架达成目标航向和音高。Adafruit servokit是覆盆子Pi-compatible框架,该框架允许您控制伺服电机几行代码。当我们使用PWM驱动器控制伺服电机,我们需要发送控制信号从杰森Nano sci和SDA GPIO管脚连接到PWM驱动程序。因此,在初始化,我们配置伺服设备sci和SDA引出线。我们只需要开两个伺服系统;然而,这16伺服电动机PWM驱动可以开车去。将伺服电机,我们只是self.kit赋值。伺服(servo_no)通过适当的servo_no。

从adafruit_servokit进口ServoKit
进口板
进口busio
#初始化
self.kit.servo [servo_no]。角=值
i2c_bus0 = (busio.I2C(董事会。SCL_1, board.SDA_1))
自我。装备= ServoKit(渠道= 16,i2c = i2c_bus0
#移动伺服(servo_no)到一个特定的值
self.kit.servo [servo_no]。角=值

注意,伺服值不直接对应一个实际的角。因此,我们在代码需要执行一些正常化的一个角度值映射到伺服的价值。

非连续伺服电机(我们的)只允许最多180度旋转。我们不需要的头上诉人与被上诉人签订为标题或超过160度旋转。因此,我们进一步实现最小和最大范围限制在我们的控制代码限制从10到170度,从35到90度。

头部的转动轴和限制。(从上面熊形象授权)

因此,对于她的头移到上诉人与被上诉人签订面对发现的人,我们要做的是将检测到的x坐标人的脸变成一个航向角相对于当前的头向上诉人与被上诉人签订并设置相关伺服与映射的相应值。然后重复这个过程了。
虽然这看起来简单,设置伺服值到目标角直接有一些缺陷:

  • 伺服运动非常快。一旦你设置一个值,伺服将走向价值以恒定的速度过快,这感觉很机械。人类动作慢头和减缓逐渐站在最后的位置。
  • 伺服系统都以同样的速度移动。事实上,我们无法控制速度。如果标题和俯仰伺服系统需要不同数量的当前值,需要更少的最先到达目的地的。这是下图左侧图表所示,绿色的圆圈代表起始值,蓝色的圆圈代表最终的价值。纵轴代表一个音高横轴表示一个标题。蓝线代表头部运动。你可以看到标题和音高最初以同样的速度移动,直到距已经达到其最终值为10。然后,只有标题是走向最终的值为90。这不是自然的,当我们移动头部,标题和球场同时达到他们的目标。

很明显,我们需要独立能力都伺服控制的速度朝着新的目标价值观,这样我们才能让他们行动缓慢,同时达到目标值。

控制标题和间距插值由作者(图片)

同样的问题也存在于游戏行业当动画等任何一个虚拟人物的头。解决方案是使用一个插值技术的运动路径划分为几个路标点和增量迁移标题和音高一步一步最后的位置,这是正确的图表所示上图。橙色的点代表每个路标设置两个伺服值从他们开始最后的值。最初,一步是大而逐渐变小,当接近最后的位置。这将导致头部逐渐慢下来完全停止。

建立听证会

听力模块负责听演讲通过麦克风和使用语音识别技术将这转化为文本。延迟是非常重要的在这里处理时间越长,时间越长对上诉人与被上诉人签订的谈话。理想情况下,您想要运行一个语音识别边缘(设备),以避免网络延迟。然而,在边缘上运行需要一个强大的设备,据我所知,在写这篇文章的时候,没有在边缘上运行语音识别技术设备水平杰森Nano的计算力量接近谷歌语音识别,这是我可以接受的标准。这就是为什么iPhone的Siri,谷歌和亚马逊Alexa的所有我们的声音发送到云语音识别。

因此,我决定使用谷歌语音识别云服务。为了减少延迟,我使用一个流媒体技术,即不断发送块检测到声音的云,这样它可以执行识别说话人完成整个句子。使用这个技巧,我设法得到识别的文本结果不迟于1.5秒从人讲完一个句子,无论句子的长度。

谷歌语音识别(官方徽标图像)

构建大脑

的大脑负责生成上诉人与被上诉人签订的文本响应当前的谈话。因此,我们需要聊天机器人技术。就像听起来那样简单,这实际上是最复杂的部分。上诉人与被上诉人签订为什么?首先,它需要理解最后一句话说的人产生适当的反应。这本身已经是复杂的。这就解释了为什么需要一个人类小孩三年能够获得基本的会话技巧和许多年掌握它们。但这还不是全部。为了生成一个适当的回应,你也需要理解对话的背景下,来自所有过去的谈话。看看下面的对话交流。 For Ellee to correctly answer the question ‘Which city was it?’, she first needs to look at the past few exchanges to understand that we were talking about Albert Einstein and the time of his death. Without that context, this question could be interpreted to mean the city in which he was born or lived. Not only does Ellee need to master linguistics, but she also has to acquire historical knowledge to be able to answer this question.

人类:你知道爱因斯坦吗?

:上诉人与被上诉人签订是的,我知道爱因斯坦。

人类:他什么时候死的?

:上诉人与被上诉人签订他死于1955年。

人:这是哪个城市?

:上诉人与被上诉人签订这是普林斯顿大学,新泽西州

然而,人们可能会问一个问题,需要其他知识领域,比如电影、音乐、数学、化学、体育等。需要掌握所有这些上诉人与被上诉人签订域。如果它是困难的,他们如何构建谷歌,Siri, Alexa ?他们都是摘要聊天机器人,只能回答问题,准备和存储海量数据库,因此术语“检索”。试着问问上面的问题,你就会看到这些聊天机器人失败。

达到上述要求,我们需要一个generative-based chatbot产生反应词词从直觉,即通过了解什么是口语和对话的背景下。

我已经建立了几个聊天机器人在过去使用各种技术,从检索生成,没有人接近满足上述要求。

见到GPT-3 !这是一个最新的突破在通用NLP的人工智能模型,由OpenAI团队和训练45结核病从维基百科的文字和书籍。事实上,维基百科只有3%的训练集,所以你可以想象这个模型的规模。培训费用惊人的1200万美元,有1750亿个参数!

OpenAI(官方徽标图像)

GPT-3更独特的是,它是一个通用的语言模型,可以为任何文本相关任务,只需给的指令在一个普通的人类语言。这允许GPT-3执行各种任务,如完成一首诗,写商业计划书,进行情感分析和文本分类没有提供数以百万计的常见的NLP模型所需的训练集。

为了构建在GPT-3上诉人与被上诉人签订,我只需要训练它用这个指令平实的语言。

下面是一个跟一个名叫谁是由上诉人与被上诉人签订的AI格斯。澳大利亚住在Mitcham,上诉人与被上诉人签订。喜欢跟人交谈上诉人与被上诉人签订。她最喜欢的颜色是绿色的。很有帮助,上诉人与被上诉人签订有创造力,聪明,很友好。

人工智能:嗨[名字]!今天你想谈什么?

人类(human_response):

第一段给了上诉人与被上诉人签订的个性影响至关重要,她将如何交谈。我希望她能够创造性的和友好的。为她提供一些背景知识,如她出生的地方,是谁创造了她,她最喜欢的颜色是非常有用的,因为她将能够使用这些信息在她的反应。如回答这样的问题:你住哪个国家?你喜欢绿色吗?你叫什么名字?

我把人的名字被面部识别模块根据[名字]和认可的语音识别模块下的文本响应[human_response]。这是所有。GPT-3将生成下一个反应,上诉人与被上诉人签订我添加回指令一起下一个公认的人类反应。

帮助我们说明,假设她是跟Dexie回应“我好谢谢。让我们来谈谈运动”。的反应是上诉人与被上诉人签订的我真的很喜欢体育。你最喜欢的运动是什么?“当时回应通过Dexie”我爱篮球”。接下来的培训教学将成为以下:

下面是一个跟一个名叫谁是由上诉人与被上诉人签订的AI格斯。澳大利亚住在Mitcham,上诉人与被上诉人签订。喜欢跟人交谈上诉人与被上诉人签订。她最喜欢的颜色是绿色的。很有帮助,上诉人与被上诉人签订有创造力,聪明,很友好。

人工智能:嗨Dexie !今天你想谈什么?

人类:我好谢谢。让我们来谈谈运动。

艾未未:我真的很喜欢体育。你最喜欢的运动是什么?

人:我爱篮球

GPT-3将生成的下一个上诉人与被上诉人签订的回应。反复这个过程,直到结束的谈话。这样,GPT-3将过去的对话能够产生更好的响应。减少加工时间和成本,我过去谈话最多20交流限制。GPT-3需要运行一个大规模的计算能力;因此,它可以通过一个API调用OpenAI web服务。

现在,大脑是完成。事实上,前面的对话交流,阿尔伯特·爱因斯坦是真正的与,上诉人与被上诉人签订的对话,她能正确回答最后一个问题!

你可以见证自己的会话能力在上一节上诉人与被上诉人签订的视频在这个博客。

建筑名称提取

除了生成一个文本响应,大脑模块还负责识别人的名字是与上诉人与被上诉人签订的对话会议。这个范围的需求出来的蓝色。我以为它会很酷当不知道上诉人与被上诉人签订的人她也说,她可以提取他们的名字如果被提及在他们谈话并注册他们的面部图像。因此,在以后的谈话她会认识他们。

我们已经有自己的面部形象的视觉模块,我们也知道,不承认上诉人与被上诉人签订。然而,如何能够从一个例子中提取他们的名字上诉人与被上诉人签订的谈话如下面?

人工智能:嗨。我的名字是。上诉人与被上诉人签订你今天好吗?

人类:早上好。上诉人与被上诉人签订今天我很好。你好?上诉人与被上诉人签订

艾未未:我不错。你在忙什么?

人:我只是在一个下午漫步和莫妮卡我的妻子。很高兴见到你。我是约翰。

人工智能:你想和我聊天吗?

人:我愿意。你做什么工作?

共同解决这个的方法是通过构建一个命名实体提取NLP模型。人工智能模型训练与成千上万的句子与标签的名字在哪里学习模式来找出哪些词是名被提取并使用这个模型来确定哪些单词从对话中脚本的名字。

命名实体提取训练集的一个例子

这是一个艰难的过程,因为我们只是感兴趣的人的名字是跟谁说话,上诉人与被上诉人签订任何名字,不仅使它更具挑战性。我们需要某种形式的变压器模型,了解周围的环境识别名称获取我们感兴趣的人。

嘿,这不是一个任务,GPT-3应该能够解决作为通用语言模型?哦,孩子,是的它!这就是我做的。我第一次条纹所有的对话交流,上诉人与被上诉人签订只留下交流的人类。然后我构造一个训练指令与一个简单的指令执行。

下面是一个名为,上诉人与被上诉人签订的AI的对话的人。从这次谈话中提取人的名字:如果没有名字,我将与“未知”回应。

早上好。上诉人与被上诉人签订今天我很好。你好?上诉人与被上诉人签订

我只是有一个下午漫步和莫妮卡我的妻子。很高兴见到你。我是约翰。

我很乐意。你做什么工作?

名称:

这是唯一我需要告诉GPT-3。神奇的附加的名字约翰提供的旁边名称:

它知道莫妮卡,即使它被提到的,不是我们说的人的名字。

这是非常令人兴奋的和完全改变游戏规则。

建筑的演讲

我使用亚马逊波利合成的声音从上诉人与被上诉人签订的文本生成的大脑。这是另一个云服务,增加了一个小200毫秒延迟。然而,声音的质量是非常自然的。

亚马逊波利(官方徽标图像)

协调员

一起协调工作是胶水的所有模块发送数据。一个状态机,跟踪,上诉人与被上诉人签订的当前状态决定了她下一步会做什么,例如开始倾听,停止倾听,开始说话,她的头,重置她的头的位置,等。例如,当看到Dexie上诉人与被上诉人签订第一次与Dexie控制器创建一个新的会话是一个专注的人。这是至关重要的,有时可以发现不止一个人,我希望能够看看上诉人与被上诉人签订同一个人她一直说话。控制器将从视觉模块获取Dexie边界框的位置,计算并发送新的标题和头部俯仰运动模块的新目标,她的头开始跟踪他。当Dexie始终可见超过两秒钟,控制器将指导演讲模块来迎接他,开始倾听。当一个句子已经完全说,它将抓住听力承认文本模块并将其传递给大脑来生成一个响应通过一个API调用GPT-3并等待响应。在响应时,它将获取响应文本并将其传递给演讲模块说它。当Dexie不再可见超过10秒钟,控制器将重置会话过程和准备寻找下一个可见的人。

组装

所有的模块完成,现在,是时候组装硬件。在我爸爸的帮助下的木工技能,我们构建的上诉人与被上诉人签订的骨骼结构。坚持,我可以把两个伺服系统(标题和节距)和安装摄像机在球场上伺服。

我爸爸的工厂,木制的道具(图片作者)

这个棍子然后把里面的身体和上诉人与被上诉人签订安装在她坐的木盒子。两伺服系统将是正确的在她的头部颈部关节的位置,并确保与螺钉的头上诉人与被上诉人签订,确保她的头伺服一起移动。几层的木头被添加到扩展的相机,是在正确的地点从她离开眼球。

由作者(图片)

我们花费了几个迭代周期得到这个权利,这是我花了我的大部分时间在这个项目。最后,我们完成了大会!然而,有一些主要问题。的脖子看起来刚刚被上诉人与被上诉人签订缝Freedy克鲁格,尤其是当她把她的头。她的左眼,相机,高于可见正确的眼球和有一个很大的洞由于相机把原来的洞,导致撕裂和放大。这Frankenstein-looking Dexie不会做上诉人与被上诉人签订好。我需要做点什么。

由作者(图片)

幸运的是,和我的妻子的魔法缝合技能和焦点之旅,面料和工艺供应商购买几白毛巾和缝纫用品,我们固定的她。

由作者(图片)

正如您将在下面看到的,她现在看起来好多了。我们让她一条围巾的洞在她的喉咙,这也让她更时尚。:)

由作者(图片)

最后,我们坐上一个小木柜子,上诉人与被上诉人签订我爸爸建造和安装棒安全。这个内阁有足够的空间容纳杰森Nano, PWM驱动程序和所有的布线。

由作者(图片)

Showtime

最后,是时候让Dexie与首次上诉人与被上诉人签订交互。他不知道我的计划将为上诉人与被上诉人签订一个机器人,所以看到他的第一反应是无价的上诉人与被上诉人签订!他想知道在地球上试图了解她可以上诉人与被上诉人签订移动和说话。随着他慢慢地变得更舒适,我们有一个伟大的谈话在一起。上诉人与被上诉人签订任务完成。耶! ! !

整个过程包括建立过程记录在下面的视频中。还一定要观看的最后一部分我测试与上诉人与被上诉人签订一个更复杂的对话。

演示视频上诉人与被上诉人签订

我很满意的系统性能。它运行在12 fps尽管运行很多模块和几种人工智能模型。她的头运动也非常灵敏之后她说话的人。谈话延迟,延迟响应上诉人与被上诉人签订的谈话,最多只有2.5秒,这不是太糟糕了考虑语音识别,文本生成和文本-语音发生在它们之间往返到互联网。

未来的改进

建筑很有趣,上诉人与被上诉人签订教我几件事:

  • 我需要买一个3 d打印机。它容易得多,制造一些支撑组件可以精确设计和转载他们如果需要较小的调整,而不是手动砍森林。
  • 面部识别/检测1 FPS并不理想,有时当多个人们发现但面部识别并没有踢,不可能知道哪个人她一直与上诉人与被上诉人签订。为了增加面部识别/检测频率,我可能需要使用一个稍微更强大的硬件喜欢杰森Xavier NX或杰森AGX泽维尔。
  • 有时候很多人发现,只有其中一个是说话,上诉人与被上诉人签订她看着不说话的人,她为重点的人接近她,她知道的人。一个解决方案是增加一个意图检测人工智能模型来检测人正在说话。更好的是,如果可以信赖,上诉人与被上诉人签订匹配这个与她听,即使两人说话,她可以确定哪一个是和她说话,可能部分和独立的声音,如果他们说的是在同一时间。这进一步证明了使用更强大的硬件。

隐私和道德风险

我们需要负责在构建一个涉及隐私和伦理的人工智能技术。首先,与面部识别技术目前不是很受欢迎,特别是关于隐私。的面部识别只是上诉人与被上诉人签订旨在用于个性化她和你谈话,没有跟踪或间谍目的,因此我很舒服。第二从伦理学的角度看,聊天机器人你使用GPT-3很难控制关于他们的礼仪,尤其是事实。有时可以构成一个完全合理的但上诉人与被上诉人签订错误的事实,这可能得罪一些人。因此,请不要把她的回答太当回事。使用这种类型的chatbot目的与严重后果,如医疗或情感咨询应该避免。

就是这样,人!我希望你享受阅读关于我一样令人兴奋的暑假项目我都喜欢与你分享它。

完整的源代码在这里

如果你喜欢这个博客,请给我一些掌声,与我联系linkedin

Baidu
map