简易AI聊天机器人

最近我自己搞了个简单的聊天机器人(类似淘宝机器客服一般的),他可以帮你查询疫情的最新消息、汇报天气情况、给你讲笑话、陪你聊天等一些基本的功能。下面就来介绍一下它。

一、制作流程

  1. 制作思路
    要做一个聊天机器人那么首先你要有一个聊天的界面,设计这个聊天界面,让它尽量好看,符合你的想法就好。然后就要想一下这个聊天界面需要什么内容:a.图标,我们打开这个页面左上方应该要有一个小图标。b.要有显示聊天记录的地方。c.要有一个输入框。d.要有一个发送的按钮。再其次是设计这个聊天机器人及其功能。

  2. 再次完善
    a.聊天页面:这里就看自己的设计了,我自己设计的比较一般般,效果就会在最后给大家展示。
    b.界面的内容:在聊天记录的那一栏,我们要知道是谁发的消息,所以我选择了使用头像这样子来表现。然后就是在发送按钮上面,我设计了一个功能,当你鼠标放在上面的时候可以显示出 “点击发送” 的字样
    c.聊天机器人:我是打算接入一个百度unit平台的API,借助百度来使我的机器人更加智能化。当然也有一些部分的应答打算我自己来写函数。

  3. 程序框架

Created with Raphaël 2.3.0 开始 窗口绘制 机器人启动 等待输入信息 机器人作出应答 是否点击退出按钮? 结束 yes no yes no

二、代码分析

要使用的库:

import json
import sys
import requests
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtCore import QSize
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import *

以下是主函数的部分

# 实例化一个应用对象
    app = QtWidgets.QApplication(sys.argv)

先建立一个应用对象app

 # 实例化聊天窗
    win = ChatBox()
    win.show()
    sys.exit(app.exec_())

然后我们创建了一个窗口类ChatBox(具体这个类如何写的后面会有介绍,这边先这样子说),建立了一个对象win。利用show函数把这个窗口显示出来。然后因为要实现这个窗口的关闭所以要用sys库中的exit函数。

以下是函数封装部分讲解
ChatBox(建立的python类)

class ChatBox(QWidget):

这是一个子类,父类是QWidget。

    def __init__(self):
        # 初始化父类构造函数
        # super会找到ChatBox继承的父类QWindegt, 去实例化父类的构造函数
        super(ChatBox, self).__init__()
        # 绘制界面方法
        # 初始化界面
        self.AI_robot = Chat_robot()
        self.initUI()

super(ChatBox, self).init()这句的意思是:super会找到ChatBox继承的父类QWindegt, 去实例化父类的构造函数。self.AI_robot = Chat_robot()这里我实例化了一个AI机器人,Chat_robot也是一个类。self.initUI()这是初始化窗口的函数。
下面是initUI()函数的内部组成

self.setWindowTitle("快来聊天啊!")
self.setGeometry(500, 100, 800, 700)
# 美化窗口+添加控件
# 窗口图标
self.icon = QtGui.QIcon()
self.icon.addPixmap(QtGui.QPixmap("picture.png"),    # 图标路径
                    QtGui.QIcon.Normal,
                    QtGui.QIcon.Off)
self.setWindowIcon(self.icon)

我们先设置窗口的标题,然后就是设置窗口的位置和大小,然后我们用picture这张图做了一个图标(这里要注意这个图片要放在这个工程下)。

self.left_box = QWidget(self)
self.left_box.setGeometry(10, 10, 200, 680)
self.left_box.setStyleSheet("background-color: rgb(200, 200, 169)")   
# 设置背景色
self.AI = QLabel("专属机器人在线中", self)
self.AI.setGeometry(11, 11, 200, 120)
self.AI.setStyleSheet("background-color: rgb(0, 245, 255); color: black; font-size:22px")

我设计了一个边框,位置大概是在左边区域(setGeometry这个函数是确定位置的,后面的也是如此。),里面我就做了简单的一个背景色设置和一个标签“专属机器人在线中”以及标签的背景颜色和字的颜色、大小。

self.chatBox = QListWidget(self)
# 设置位置
self.chatBox.setGeometry(210, 10, 590, 600)
# 设置样式
self.chatBox.setStyleSheet("background-image: url(background.png);border:2px solid #c4c4c4; font-size:30px")
# 设置图标大小
self.chatBox.setIconSize(QSize(40, 40))

我这里绘制了一个聊天窗口,显示聊天内容的地方,setIconSize这个函数是设置说话的人的头像大小,我这里还用background这张图片做了个背景图。

self.char_input = QLineEdit(self)
self.char_input.setGeometry(210, 615, 480, 80)
self.char_input.setStyleSheet("color:black; font-size:30px; border: 10px solid #f4f4f4;"
							   "background-color: rgb(255, 255, 255);")

这个是发送消息的部分,设置了位置,字的颜色大小,待发消息框的背景色。

self.submit = QPushButton('发送', self)  # 按钮显示的文字
self.submit.setToolTip('点击发送')  # 当鼠标放上去后显示的内容
self.submit.setGeometry(695, 615, 100, 80)   # 位置
self.submit.setStyleSheet("color:black; font-size:20px; font-weight:bold; border-radius:2;"
                          "background-color: rgb(131, 175, 155);")

这是发送按钮的设计,包括了按钮上面的文字,位置,字体的颜色,大小,背景色。

item = QListWidgetItem(QIcon("AI_robot.png"), "你好!有什么可以为你服务的?", self.chatBox)
self.submit.clicked.connect(self.send_message)    # 信号与槽的连接

第一句代码是,当你启动程序的时候这个机器人会自动的说一句“你好!有什么可以为你服务的?”。QIcon(“AI_robot.png”)这个是设置机器人的头像。self.chatBox这个是说,显示在chatBox这一部分(即聊天记录框)。后面一句代码是说当你点击这个按钮是程序的反应,反应函数是send_message。

对send_message这个函数的讲解:

def send_message(self):
    # 用户输出什么信息
    content = self.char_input.text()
    if len(content) == 0:
        return     # 函数终结
    # 把输入的信息显示在聊天区
    item = QListWidgetItem(QIcon("USER.png"), content, self.chatBox)
    # 清空输入框
    self.char_input.clear()

我们先从待发消息去获取你要发的消息给content。当然如果是空消息就发不出去了,所以会有个判断。然后就是把这个消息放在聊天区中,同时显示头像,并清除待发消息区的消息。

robot_reply = self.AI_robot.get_reply(content)

我同过AI_robot这个对象里面的get_reply函数来得到机器人的回答。robot_reply 就是机器人要回答的内容部分。

# 当询问天气等缺少地点元素的时候
global connect_flag, word_flag
if connect_flag:
   content = content + connect_word    # 连接两个字符串
   robot_reply = self.AI_robot.get_reply(content)
   connect_flag = False

这里做的处理是说,当我们问“天气如何”时机器人会回答一个“你要问的是哪里的天气呢”,那么我就要将这两次的消息进行拼接,在发给机器人,不然机器人没办法做到将这两次的消息连接起来,他只会当成一个问题来回答。connect_flag这是一个标志位,当有连接的时候是True,不需要时是False。
在这里插入图片描述

self.deal_message(robot_reply, content)
#  下面的函数是另外定义的,放在这里只是为了一次解释清楚罢了
    def deal_message(self, robot_reply, content):
        # 处理句子的连接
        for index, item in enumerate(key_word):
            if item in robot_reply:
                global connect_flag
                connect_flag = True
        # 处理重复输入
        global word_flag, connect_word
        if word_flag == 0:
            connect_word = content
        if connect_word == content:
            word_flag = word_flag + 1    # word_flag 记录出现的次数
        else:
            word_flag = 0
        # 处理背景的改变
        global bg_flag
        for index, item in enumerate(weather):
            if item in robot_reply:
                bg_flag = index+1     # bg_flag 这是背景的选择,0~4,分别对应着不同的天气背景
                break
            else:
                bg_flag = 0

这个函数是用来处理句子连接、重复输入以及背景的改变这三个功能的标志位,具体函数的处理在后面。哦对了,这里使用的标志位都是全局变量。

robot_reply = self.deal_reprtion(robot_reply) # 处理重复输入多次函数
#  下面的函数是另外定义的,放在这里只是为了一次解释清楚罢了
    def deal_reprtion(self, robot_reply):
        global word_flag
        if word_flag == 2:
            robot_reply = '这个问题我已经回答过了'
        elif word_flag == 3:
            robot_reply = '你是憨憨嘛?都说了回答了你还问,再问就不理你了。'
        elif word_flag == 4:
            robot_reply = '不理你了'
        elif word_flag >= 5:
            robot_reply = None
        return robot_reply

当你重复输入同一个问题时,机器人就不会再回答你一边,而是会说你了
在这里插入图片描述

# 改变背景
self.change_background()
#  下面的函数是另外定义的,放在这里只是为了一次解释清楚罢了
    def change_background(self):
        global bg_flag
        if bg_flag == 1:
            self.chatBox.setStyleSheet("background-image: url(sunny.png);border:2px solid #c4c4c4; font-size:30px")
        elif bg_flag == 2:
            self.chatBox.setStyleSheet("background-image: url(foggy.png);border:2px solid #c4c4c4; font-size:30px")
        elif bg_flag == 3:
            self.chatBox.setStyleSheet("background-image: url(rainy.png);border:2px solid #c4c4c4; font-size:30px")
        elif bg_flag == 4:
            self.chatBox.setStyleSheet("background-image: url(cloudy.png);border:2px solid #c4c4c4; font-size:30px")
        else:
            self.chatBox.setStyleSheet("background-image: url(background.png);border:2px solid #c4c4c4; font-size:30px")

每一个标志位对应着一种天气背景,在信息处理函数时,会去遍历机器人回答的字符串,当有涉及到天气的因素时就会记录下来,同时会改变标志的值。效果展示,就像是那个询问天气的图片。

self.reply(robot_reply)  # 消息的回复
#  下面的函数是另外定义的,放在这里只是为了一次解释清楚罢了
    def reply(self, robot_reply):
        if robot_reply is None:
            return
        if len(robot_reply) >= 16:
            count = int(len(robot_reply)/16)
            for i in range(0, count):
                if i ==0:
                    res = robot_reply[16*i:(16*(i+1)-1)]
                    item = QListWidgetItem(QIcon("AI_robot.png"), res, self.chatBox)
                else:
                    res = robot_reply[16*i-1:(16 * (i+1)-1)]
                    item = QListWidgetItem(res, self.chatBox)
            if len(robot_reply)/16 > count:
                res = robot_reply[16*count-1:]
                item = QListWidgetItem(res, self.chatBox)
            return
        item = QListWidgetItem(QIcon("AI_robot.png"), robot_reply, self.chatBox)

消息的回复这个函数,我计算了一下它的长度,如果长度超过窗口长度则它会分行、多次输出,同时只有第一次输出的才会带头像。最后一句话是保证不超行的时候可以正常输出。开头的if robot_reply is None:判断是为了配合之前那个输入多次后不理你这个功能的。中间的就是用来处理字符长度的。

下面讲解机器人这个对象:

class Chat_robot:
    def __init__(self):
        self.AK = AK
        self.SK = SK
        self.access_token = self.get_access_token()

先建立一个机器人类。__init__这是一个构造函数,里面放的是这个机器人的属性。因为我们的机器人是用百度unit平台的机器人,所以这里要调用人家的API,AK,SK对应这API Key 和 Secret Key 。access_token 对应这token,具体怎么获取百度unit平台的token,参考百度的文档获取access_token。当然这里我也会介绍python获取token的方法。

def get_access_token(self):
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' +\
    self.AK + '&client_secret=' + self.SK
    response = requests.get(host).json()
    return response['access_token']

上面的函数就是python获取token带的方式。要详细了解里面的参数的意义,要通读上面的文档。

    def get_reply(self, user_input):
        post_data = json.dumps({
            "log_id": "UNITTEST_10000",
            "version": "2.0",
            "service_id": "S29968",
            "session_id": "",
            "request": {
                "query": user_input,
                "user_id": "8888",
            },
            "dialog_state": {
                "contexts": {
                    "SYS_REMEMBERED_SKILLS": ["1028652"]
                }
            }
        })
        # json.dumps() 用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数
        url = 'https://aip.baidubce.com/rpc/2.0/unit/service/chat?access_token=' + self.access_token
        headers = {'content-type': 'application/x-www-form-urlencoded'}
        response = requests.post(url, data=post_data, headers=headers).json()
        if response:
            return response['result']['response_list'][0]['action_list'][0]['say']

上面这个函数是,用来得到机器人的回答内容的。这里要注意的是,我们在API文档中他的post_data 这个数据是采用字符串的形式写的,我们在python中没办法识别它,所以我们要用上面的这个dumps函数写入json文件之中。

三、整体代码展示

import json
import sys

import requests
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtCore import QSize
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import *
# 表示从PyQt5的QtWidgets中引用全部函数(*表示全部)
# 1.应答核心--in判断成员是否在list中
# 2. 百度unitAPI接进来

# 常量
AK = 'LNsYReyUKb9idkO9OHHnanm0'
SK = '28iTb65vBPmSR05vyNU6pnYjIa739KP7'

key_word = ('你要找', '你要查')
weather = ('晴', '雾', '雨', '阴')
connect_flag = False
connect_word = '初始化'
word_flag = 0
bg_flag = 0


# 继承
class ChatBox(QWidget):
    def __init__(self):
        # 初始化父类构造函数
        # super会找到ChatBox继承的父类QWindegt, 去实例化父类的构造函数
        super(ChatBox, self).__init__()
        # 绘制界面方法
        # 初始化界面
        self.AI_robot = Chat_robot()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("快来聊天啊!")
        self.setGeometry(500, 100, 800, 700)
        # 美化窗口+添加控件
        # 窗口图标
        self.icon = QtGui.QIcon()
        self.icon.addPixmap(QtGui.QPixmap("picture.png"),    # 图标路径
                            QtGui.QIcon.Normal,
                            QtGui.QIcon.Off)
        self.setWindowIcon(self.icon)
        # 左侧栏
        self.left_box = QWidget(self)
        self.left_box.setGeometry(10, 10, 200, 680)
        self.left_box.setStyleSheet("background-color: rgb(200, 200, 169)")   # 设置背景色
        self.AI = QLabel("专属机器人在线中", self)
        self.AI.setGeometry(11, 11, 200, 120)
        self.AI.setStyleSheet("background-color: rgb(0, 245, 255); color: black; font-size:22px")
        # 右上方聊天区
        self.chatBox = QListWidget(self)
        # 设置位置
        self.chatBox.setGeometry(210, 10, 590, 600)
        # 设置样式
        self.chatBox.setStyleSheet("background-image: url(background.png);border:2px solid #c4c4c4; font-size:30px")
        # 设置图标大小
        self.chatBox.setIconSize(QSize(40, 40))

        # 右下方内容准备
        self.char_input = QLineEdit(self)
        self.char_input.setGeometry(210, 615, 480, 80)
        self.char_input.setStyleSheet("color:black; font-size:30px; border: 10px solid #f4f4f4; "
                                      "background-color: rgb(255, 255, 255);")
        # 发送按钮
        self.submit = QPushButton('发送', self)
        self.submit.setToolTip('点击发送')  # 当鼠标放上去后显示的内容
        self.submit.setGeometry(695, 615, 100, 80)
        self.submit.setStyleSheet("color:black; font-size:20px; font-weight:bold; border-radius:2;"
                                  "background-color: rgb(131, 175, 155);")
        # 点击发送按钮,发送消息
        item = QListWidgetItem(QIcon("AI_robot.png"), "你好!有什么可以为你服务的?", self.chatBox)
        self.submit.clicked.connect(self.send_message)    # 信号与槽的连接

    def send_message(self):
        # 用户输出什么信息
        content = self.char_input.text()
        if len(content) == 0:
            return     # 函数终结
        # 把输入的信息显示在聊天区
        item = QListWidgetItem(QIcon("USER.png"), content, self.chatBox)
        # 清空输入框
        self.char_input.clear()
        robot_reply = self.AI_robot.get_reply(content)
        # 当询问天气等缺少地点元素的时候
        global connect_flag, word_flag
        if connect_flag:
            content = content + connect_word
            robot_reply = self.AI_robot.get_reply(content)
            connect_flag = False
        self.deal_message(robot_reply, content)
        #
        # 下面这个是处理重复输入多次函数
        robot_reply = self.deal_reprtion(robot_reply)
        # 改变背景
        self.change_background()
        self.reply(robot_reply)

    # 消息回复
    def reply(self, robot_reply):
        if robot_reply is None:
            return
        if len(robot_reply) >= 16:
            count = int(len(robot_reply)/16)
            for i in range(0, count):
                if i ==0:
                    res = robot_reply[16*i:(16*(i+1)-1)]
                    item = QListWidgetItem(QIcon("AI_robot.png"), res, self.chatBox)
                else:
                    res = robot_reply[16*i-1:(16 * (i+1)-1)]
                    item = QListWidgetItem(res, self.chatBox)
            if len(robot_reply)/16 > count:
                res = robot_reply[16*count-1:]
                item = QListWidgetItem(res, self.chatBox)
            return
        item = QListWidgetItem(QIcon("AI_robot.png"), robot_reply, self.chatBox)

    def deal_message(self, robot_reply, content):
        # 处理句子的连接
        for index, item in enumerate(key_word):
            if item in robot_reply:
                global connect_flag
                connect_flag = True
        # 处理重复输入
        global word_flag, connect_word
        if word_flag == 0:
            connect_word = content
        if connect_word == content:
            word_flag = word_flag + 1
        else:
            word_flag = 0
        # 处理背景的改变
        global bg_flag
        for index, item in enumerate(weather):
            if item in robot_reply:
                bg_flag = index+1
                break
            else:
                bg_flag = 0

    def deal_reprtion(self, robot_reply):
        global word_flag
        if word_flag == 2:
            robot_reply = '这个问题我已经回答过了'
        elif word_flag == 3:
            robot_reply = '你是憨憨嘛?都说了回答了你还问,再问就不理你了。'
        elif word_flag == 4:
            robot_reply = '不理你了'
        elif word_flag >= 5:
            robot_reply = None
        return robot_reply

    def change_background(self):
        global bg_flag
        if bg_flag == 1:
            self.chatBox.setStyleSheet("background-image: url(sunny.png);border:2px solid #c4c4c4; font-size:30px")
        elif bg_flag == 2:
            self.chatBox.setStyleSheet("background-image: url(foggy.png);border:2px solid #c4c4c4; font-size:30px")
        elif bg_flag == 3:
            self.chatBox.setStyleSheet("background-image: url(rainy.png);border:2px solid #c4c4c4; font-size:30px")
        elif bg_flag == 4:
            self.chatBox.setStyleSheet("background-image: url(cloudy.png);border:2px solid #c4c4c4; font-size:30px")
        else:
            self.chatBox.setStyleSheet("background-image: url(background.png);border:2px solid #c4c4c4; font-size:30px")


class Chat_robot:
    def __init__(self):
        self.AK = AK
        self.SK = SK
        self.access_token = self.get_access_token()

    def get_access_token(self):
        host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' +\
               self.AK + '&client_secret=' + self.SK
        response = requests.get(host).json()
        return response['access_token']

    def get_reply(self, user_input):
        post_data = json.dumps({
            "log_id": "UNITTEST_10000",
            "version": "2.0",
            "service_id": "S29968",
            "session_id": "",
            "request": {
                "query": user_input,
                "user_id": "8888",
            },
            "dialog_state": {
                "contexts": {
                    "SYS_REMEMBERED_SKILLS": ["1028652"]
                }
            }
        })
        # json.dumps() 用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数

        
        url = 'https://aip.baidubce.com/rpc/2.0/unit/service/chat?access_token=' + self.access_token
        headers = {'content-type': 'application/x-www-form-urlencoded'}
        response = requests.post(url, data=post_data, headers=headers).json()
        if response:
            return response['result']['response_list'][0]['action_list'][0]['say']


# 控件  位置  样式
# 程序的主入口会有main函数
# python把每一个py脚本看成模块,可以单独运行
if __name__ == "__main__":
    # 实例化一个应用对象
    app = QtWidgets.QApplication(sys.argv)
    # 实例化聊天窗
    win = ChatBox()
    win.show()
    sys.exit(app.exec_())

四、不足之处

这个项目还有很多待改进之处,下面就来说说:

  1. 在拼接字符串的那个功能的时候,你会发现它单纯的拼接,不能做到比较智能化,就是把你输入的这两句话组合成一句比较通顺的话。
  2. 在处理消息很长分段时,你会发现每一行并不是满的,有时候会出现上面一行很短,下面一行是长的。
  3. 背景的变化,这里识别多个的天气关键词的时候(例如阴雨天气)他会默认跑出天气标志位比较大的那个对应的图片,可以考虑完善一下天气的关键词和图片。
  4. 界面可以在变的美观一些。
  5. 可以利用PyQt5这个库设计更多的功能

五、收获

通过这次的小项目,让我更加熟练的掌握了python的用法和基础语法以及利用类去封装函数,还学会了如何去读API文档,以及对API的调用。更加的我还认识到了PyQt5这个库。

  • 16
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: csdn人工智能聊天机器人一个基于人工智能技术而开发的交互式聊天系统。它具有多种功能和特点,可以与用户进行自然语言的对话,并根据用户的需求提供相应的答案和解决方案。 首先,csdn人工智能聊天机器人通过自然语言处理和机器学习技术,能够理解和识别用户的意图和问题。它能够主动提问用户,并根据用户的回答进行进一步的追问和分析,以便给出更准确的答案。同时,它还能理解多种中文口语和表达方式,使得与用户的交流更加自然和流畅。 其次,csdn人工智能聊天机器人具有广泛的知识和信息库。它可以从csdn社区中提取和整理大量的编程和技术相关的知识,并将其应用于对用户问题的解答。无论是关于编程语言、算法、框架还是其他技术领域的问题,它都能够给出专业的回答和建议。 此外,csdn人工智能聊天机器人还可以根据用户的兴趣和需求进行个性化的推荐。它能够分析用户过去的提问和浏览记录,了解用户的偏好和需求,从而为用户提供更加精准和有效的建议和指导。 最后,csdn人工智能聊天机器人具有不断学习和优化的能力。它能够根据用户的反馈和评价不断改进自身的回答准确度和响应速度,以提供更好的用户体验。 总之,csdn人工智能聊天机器人通过深度学习和自然语言处理等技术,能够与用户进行自然、智能的对话,提供编程和技术方面的解答和建议。它将极大地方便程序员和技术爱好者们,提高他们的学习和工作效率。 ### 回答2: CSDN人工智能聊天机器人是一种基于人工智能技术开发的聊天机器人,旨在为用户提供智能化、个性化的对话服务。它利用自然语言处理、机器学习和数据挖掘等技术,能够理解用户的语义和意图,并做出相应的回答和建议。 首先,CSDN人工智能聊天机器人可以为用户提供技术支持和问题解答。无论是在开发过程中遇到的困难,还是对编程语言、框架、算法等技术问题的咨询,用户都可以直接向机器人提问,得到相应的答案和指导,提高开发效率和解决问题的能力。 其次,CSDN人工智能聊天机器人还能够为用户提供个性化的学习资料和推荐。根据用户的兴趣和需求,机器人可以推荐相关的技术文章、学习教程、视频等资源,帮助用户进行知识学习和技能提升。 同时,CSDN人工智能聊天机器人还具备友好互动的特点。它能够根据用户的喜好和个性,进行情感分析和智能回复,与用户进行自然、流畅的对话。用户可以与机器人闲聊,分享工作和生活中的点滴,获得情感支持和鼓励。 最后,CSDN人工智能聊天机器人还在不断学习和进化中。通过与大量用户的互动和反馈,机器人能够不断提高自身的回答准确性和智能水平,为用户提供更优质的服务体验。 总的来说,CSDN人工智能聊天机器人不仅是一个技术助手,更是一个知识导师和情感伙伴,为用户提供技术支持、学习资料、友好互动等多方面的服务,助力用户在技术领域的成长和发展。 ### 回答3: CSDN人工智能聊天机器人一个基于人工智能和自然语言处理技术开发的聊天机器人。它通过对海量的文本数据进行深度学习和模型训练,能够理解和分析用户提问的意图,以自然流畅的语言与用户进行对话交流。 该聊天机器人具有很强的智能问答能力,能够回答各种领域的问题,例如编程、算法、人工智能、大数据等。它可以为用户提供准确、全面的解答,并能根据用户的需求进行进一步的深入探讨。 CSDN人工智能聊天机器人还具有个性化的服务功能。它可以根据用户的喜好和兴趣进行个性化推荐,提供相关的技术文章、教程和学习资源。用户还可以通过与机器人的对话交流,获取更多的学习资料和指导,提高自己的编程和技术水平。 此外,CSDN人工智能聊天机器人还具备辨识用户情绪的能力。它可以通过分析用户的语言和表达方式,判断用户的情绪状态,并做出相应的回应。这种情感分析功能能够更好地理解用户的需求并提供有针对性的建议和支持。 CSDN人工智能聊天机器人一个智能、高效、便捷的交流工具。它不仅能够解答用户的问题,还能够引导用户进行深入的学习和研究。在技术社区中,它为用户提供了一个互动交流的平台,促进了技术的传播和共享。通过与CSDN人工智能聊天机器人的对话,用户能够更加便捷地获取所需的信息和资源,提高自己的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值