ChatUI 快速构建聊天 机器人为例:

这篇具有很好参考价值的文章主要介绍了ChatUI 快速构建聊天 机器人为例:。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ChatUI 主要分为 ChatUI 和 ChatPro 两部分(两套ui框架) 。

ChatUI 更适合手机应用

ChatPro 更适合浏览器页面对话(客服 虽然ChatUI对项目框架做了自适应尺寸 多端应用考虑较多 现实操作起来麻烦)

ChatUI 只支持React

不支持vue和小程序 (我在uni-app里尝试过使用 但不建议)因为ChatUI 框架本身使用的React 框架所以这就解释了为啥只按照要求使用React来引入ChatUI。

引入项目

import React, { useEffect, useRef } from 'react';

export default () => {
  const wrapper = useRef();

  useEffect(() => {
    const bot = new window.ChatSDK({
      root: wrapper.current,
      // 注册组件 仅在组件内使用
      components: {},
      config: { 
        // 机器人头像
        robot: {
          avatar: '//gw.alicdn.com/tfs/TB1U7FBiAT2gK0jSZPcXXcKkpXa-108-108.jpg',
        },
        // 用户头像
        user: {
          avatar: '//gw.alicdn.com/tfs/TB1DYHLwMHqK1RjSZFEXXcGMXXa-56-62.svg',
        },
        //(可选)配置按钮文案
        loadMoreText: '查看历史对话',
        // 反馈点赞
        feedback: {
          // 点赞后出的文本
          textOfGood: '谢谢您给我的赞,我会继续努力。',
          // 点踩后出的文本
          textOfBad: '',
          // 点踩后是否显示反馈表单
          needFeedback: true,
          // 不满意原因列表
          options: [
            {
              // 选项值
              value: '1',
            },
            {
              value: '2',
            },
            {
              value: '3',
            },
          ],
        },
       //快捷短语
       quickReplies: [
          { name: '张三', type: 'text', },
          { name: '李四' },
          { name: '王五',isNew: true, }
       ],
      }
      //输入框占位符
      placeholder: '请输入你的问题....',
      },
      //通讯请求(问答 反馈 历史 上传文件等)
      requests: {
        //问答
        send: function (msg) {},
        //历史配置接口 
        history: function () {},
        //点赞 踩赞
        evaluate(data) {},
        //反馈
        feedback(data) {},
      }
      //上传图片 文件等
      handlers: {}
    });

    bot.run();
  }, []);

  // 注意 wrapper 的高度
  return <div style={{ height: '100%' }} ref={wrapper} />;
}

requests 通讯请求(问答 反馈 历史 上传文件)

对话

项目中给我们封装的请求我不太喜欢 我使用的是Axios中文文档 | Axios中文网(axios)

requests: {
        /*
         *
         * 问答接口
         * @param {object} msg - 消息
         * @param {string} msg.type - 消息类型
         * @param {string} msg.content - 消息内容
         * @return {object}
         */
        send: function (msg) {
          // 发送文本消息时
          if (msg.type === 'text') {
            const payload = {
              query: XXXX,
            }
            //post请求
            return axios.post('/XXX', payload, {
              headers: {
                'Content-Type': 'application/json',
              },
            })
              .then(response => {
                  return (
                    {
                      //消息类型:text普通消息 默认文本
                      type: 'text',
                      //消息内容
                      content: {
                        text: response.data.output
                      }
                    }
                  );
              })
              .catch(error => {
                // 请求出错,处理错误
                console.error(error);
                // 返回错误信息或执行其他操作
                throw error;
              });
          }
          // ... 其它消息类型的处理
        },
      },

反馈(点赞功能)

不管点赞还是踩赞都是这一个接口 可以根据变量来区别传递内容(好/坏)

 evaluate(data) {
       return axios.post('/xxx',{messageId:xxx,}).then(res => {
       // 反馈文本(可以不管或antd轻提示) 
    })
 },

历史

历史的注意点在于 返回的结果 分清楚左右 时间处理问题等

//请求
      requests: {
        /**
         *
         * 问答接口
         * @param {object} msg - 消息
         * @param {string} msg.type - 消息类型
         * @param {string} msg.content - 消息内容
         * @return {object}
         */
        // 历史配置接口 
        history: function () {
          return axios.post('/XXX').then(res => {
            const historylist = res.data.historylist
            // *map需要返回值 记得暴露
            let list = historylist.map(item => {
              if (item.position == "left") {
                return {
                  //回复类型(文本样式)自己制作的组件
                  "type": 'TestQuestion',
                  //卡片
                  "code": 'knowledge',
                  "_id": "msg_1",
                  "position": item.position,
                  //文本内容
                  "content": {
                  //文本
                    "text": item.text
                  },
                  //时间处理
                  "createdAt": item.datetime
                }
              } else {
                return {
                  "_id": "msg_1",
                  "type": "text",
                  "position": item.position,
                  "content": {
                    "text": item.text
                  },
                  //时间处理 拿到的是时间戳(具体的数值)
                  "createdAt": item.datetime
                }
              }
            })
            return {
              list: list,
              "noMore": true
            }
          }
          ).catch(
            // message.success("正在加载....")
          )
        },
      },

上传(图片 文件)

//上传图片 文件等
      handlers: {
        onToolbarClick(item, ctx) {
          //如果点的是"相册"
          if (item.type === 'image') {
            ctx.util.chooseImage({
              multiple: true, // 是否可多选
              success(e) {
                if (e.files) { // 如果有 h5 上传的图
                  const file = e.files[0];
                  //文件流上传
                  const formData = new FormData();
                  formData.append("file", file)
                  //先展示图片
                  ctx.appendMessage({
                    type: 'image',
                    content: {
                      picUrl: URL.createObjectURL(file)
                    },
                    position: 'right'
                  });
                  return axios.post('/XXX', formData, {
                    headers: {
                      'Content-Type': 'multipart/form-data'
                    }
                  }).then(res => {
                    ctx.postMessage({
                      type: 'text',
                      content: {
                        text: res.data
                      },
                      quiet: true // 不展示
                    });
                  })
                } else if (e.files) { // 如果有 app 上传的图
                  // ..与上面类似
                }
              },
            });
          } 
        }
      }

图标

框架中有些ui图标缺失仔细查看使用的是 iconfont-阿里巴巴矢量图标库  其中的一种引用方式(ChatUI框架是阿里达摩院创作)可根据F12找到相关图标代码路径 然后在indext文件引入

<!-- chatui pro 组件icon资源丢失,底层代码是引入内部阿里的阿里适量需使用Symbol引入链接 -->
例如:
<script src="https://at.alicdn.com/t/c/font_4148071_nlz31z9a4y.js"></script>

封装组件(根据自己需求制作卡片)

参考Markdown 对话展示方式 那个就是自己写的组件(卡片)因为此组件只是将传递数据比较简单没做别的操作(使用的是函数组件)

注册卡片(组件)

使用以前要注册(引入组件)

一定要注意 ChatUI是用React开发的就意味着 只要将此UI框架引入我们的React项目就会有两个React版本(我们项目一个,ChatUI框架内核一个)ChatUI框架是用17^版本 我们要么保持一至 要么使用 class组件 否则项目会出现报错。

class组件官方正在弃用 只是在大力推广函数式组件

components: {
    "TestQuestion": Testquestion,
},

使用卡片

return {
   //使用卡片(组件)
   type: 'Testquestion',
   content: {
      //给卡片传递的数据(文本)
      text: res.data,
   }
}

Markdown 对话展示方式

使用React自带markdown组件需要自己安装(下面代码没有使用css说明使用了安装库只需要把文本传入组件即可)由于react自带的markdown功能没有那么全 需要自己去找合适库不一定要用React自带的。

文章属于回忆录 

ChatUI用户群”群的钉钉群号: 32174470文章来源地址https://www.toymoban.com/news/detail-846560.html

到了这里,关于ChatUI 快速构建聊天 机器人为例:的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Azure Machine Learning - 聊天机器人构建

    本文介绍如何部署和运行适用于 Python 的企业聊天应用示例。 此示例使用 Python、Azure OpenAI 服务和 Azure AI 搜索中的检索扩充生成(RAG)实现聊天应用,以获取虚构公司员工福利的解答。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理

    2024年01月19日
    浏览(52)
  • 使用LangChain构建问答聊天机器人案例实战(三)

    使用LangChain构建问答聊天机器人案例实战 LangChain开发全流程剖析 接下来,我们再回到“get_prompt()”方法。在这个方法中,有系统提示词(system prompts)和用户提示词(user prompts),这是从相应的文件中读取的,从“system.prompt”文件中读取系统提示词(system_template),从“u

    2024年02月14日
    浏览(48)
  • 使用LangChain构建问答聊天机器人案例实战(一)

    使用LangChain构建问答聊天机器人案例实战 现场演示GPT-4代码生成 本节我们会通过一个综合案例,跟大家讲解LangChain,这个案例产生的代码会直接在浏览器中运行,并且会输出结果,如图14-1所示,用户问:“What was the highest close price of IBM?”(“IBM的最高收盘价是多少?”)

    2024年02月15日
    浏览(70)
  • ChatGPT实践-构建简单的AI聊天机器人(python)

    本文指导如何通过调用OpenAI的API完成一个简单的聊天机器人。 我们可以通过任何语言的 HTTP 请求、官方 Python 、 Node.js 库或社区维护的库与 ChatGPT的API 进行交互,官方API文档: API Reference - OpenAI API (可自行去查看) 所以python是有现成包用的,会比调用原始的HTTP请求容易一些

    2024年02月09日
    浏览(50)
  • 使用ChatGPT构建一个AIML聊天机器人是什么体验

    ​ 使用ChatGPT构建一个AIML聊天机器人是什么体验,使用ChatGPT将C#代码转换为Swift代码以实现Swift版的Aiml聊天机器人,AIML(全名为Artificial Intelligence Markup Language)是一种基于XML模式匹配的人工智能标记语言,最早是一个名为\\\"A.L.I.C.E.\\\" (“Artificial Linguistic Internet Computer Entity”)的高

    2024年02月11日
    浏览(46)
  • OpenAI Embedding:快速实现聊天机器人(一)

    本文正在参加「金石计划」 上文 OpenAI Embedding:基于人工智能的搜索新篇章 有讲到Embedding的基础概念以及OpenAI Embedding 的能力和应用场景,这篇文章讲讲如何手把手构建聊天机器人。 聊天机器人作为一项重要的企业级服务,可以帮助企业构建关乎自己特定业务的聊天机器人。

    2024年02月08日
    浏览(31)
  • 前端react如何引入ChatUI实现类似chatgpt智能客服

    可以看官网:ChatUI 第一步: \\\"@chatui/core\\\": \\\"^2.4.2\\\", 第二步: 可以参考这几种方法: 前端react如何引入chatgpt实现智能客服_react chatgpt-CSDN博客 React AntDesign 聊天机器人 阿里ChatUI使用-CSDN博客 封装一个丝滑的聊天框组件_react.js_jacoby_fire-华为云开发者联盟 搭建一个AI对话机器人——

    2024年04月26日
    浏览(38)
  • 如何使用OpenAI API和Python SDK构建自己的聊天机器人

    近日,OpenAI公司的ChatGPT模型走红网络。同时,OpenAI也推出了Chat API和gpt-3.5-turbo模型,让开发者能够更轻松地使用与ChatGPT类似的自然语言处理模型。 通过OpenAI API,我们可以使用gpt-3.5-turbo模型,实现多种任务,包括:撰写电子邮件或其他文本内容,编写Python代码,创建对话代

    2024年02月01日
    浏览(44)
  • 十分钟快速部署一个自己的AI聊天机器人

    个人名片: 🐼 作者简介:一名大二在校生,喜欢编程🎋 🐻‍❄️ 个人主页🥇: 落798. 🐼 个人WeChat:见文末 🕊️ 系列专栏:🖼️ 零基础学Java——小白入门必备 重识C语言——复习回顾 计算机网络体系———深度详讲 微信小程序开发——实战开发 🐓 每日一句:🍭

    2024年02月14日
    浏览(60)
  • 浅谈DH参数(以华数机器人为例)

    1.DH参数说明 欧几里得空间中的直角坐标系由三个两两相交且相互垂直的轴构成:X 轴,Y轴和 Z轴。因此,一个三维直角坐标系有六个变换自由度:沿 X,Y,Z 轴的平移自由度;绕 X,Y,Z 轴的旋转自由。通过这六个自由度,欧几里得空间中的直角坐标系可以完成任意线性变换

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包