前端react如何引入chatgpt实现智能客服

1.引入chatUI进行页面开发

 chatUI:https://chatui.io/sdk/message

import Chat, { Bubble, useMessages } from '@chatui/core';
import '@chatui/core/dist/index.css';
import styles from './index.less';
import './chatui-theme.css';
import axios from 'axios';
import { useState } from 'react';
 
const initialMessages = [
  {
    type: 'text',
    content: { text: '您好,我是智能助理,您的贴心小助手~' },
    user: { avatar: '/logo.svg' },
  },
  {
    type: 'image',
    content: {
      picUrl: '//img.alicdn.com/tfs/TB1p_nirYr1gK0jSZR0XXbP8XXa-300-300.png',
    },
  },
];
 
// 默认快捷短语,可选
const defaultQuickReplies = [
  {
    icon: 'message',
    name: '联系人工服务',
    isNew: true,
    isHighlight: true,
  },
  //   {
  //     name: '短语1',
  //     isNew: true,
  //   },
  //   {
  //     name: '短语2',
  //     isHighlight: true,
  //   },
  //   {
  //     name: '短语3',
  //   },
];
 
const ChatBot = () => {
  // 消息列表
  const { messages, appendMsg, setTyping } = useMessages(initialMessages);
  const [chatMessage, setChatMessage] = useState([]);
 
  // 发送回调
  function handleSend(type, val) {
    if (type === 'text' && val.trim()) {
      // TODO: 发送请求
      appendMsg({
        type: 'text',
        content: { text: val },
        position: 'right',
      });
 
     //模拟回复
      appendMsg({
            type: 'text',
            content: { text: "你好,请问我有什么可以帮你"},
            user: { avatar: '/logo.svg' },
          });
 
  // 快捷短语回调,可根据 item 数据做出不同的操作,这里以发送文本消息为例
  function handleQuickReplyClick(item) {
    handleSend('text', item.name);
  }
 
  function renderMessageContent(msg) {
    const { type, content } = msg;
    // 根据消息类型来渲染
    switch (type) {
      case 'text':
        return <Bubble content={content.text} />;
      case 'image':
        return (
          <Bubble type="image">
            <img src={content.picUrl} alt="" />
          </Bubble>
        );
      default:
        return null;
    }
  }
 
  return (
    <div id={styles.chatBotContainer}>
      <Chat
        navbar={{ title: '小知了' }}
        messages={messages}
        renderMessageContent={renderMessageContent}
        quickReplies={defaultQuickReplies}
        onQuickReplyClick={handleQuickReplyClick}
        onSend={handleSend}
      />
    </div>
  );
};
 
export default ChatBot;
2.调用openAI的api

      axios
        .post(
          'https://api.openai.com/v1/chat/completions',
          {
            messages: [...chatMessage, { content: val, role: 'user' }],
            max_tokens: 150,
            n: 1,
            temperature: 0.5,
            //   stop: ['\n'],
            model: 'gpt-3.5-turbo',//可调用不同的模型,具体见官网参数
          },
          {
            headers: {
              'Content-Type': 'application/json',
              Authorization: 'Bearer 你的api-key',
            },
          },
        )
        .then((res) => {
          const response = res.data.choices[0].message.content.trim();
          const newMessages = [
            ...chatMessage,
            { content: val, role: 'user' },
            { content: response, role: 'system' },
          ];
          setChatMessage(newMessages as any);
 
          //结合chatUi做展示
          appendMsg({
            type: 'text',
            content: { text: response },
            user: { avatar: '/logo.svg' },
          });
        })
        .catch((err) => console.log(err));

注意接口的messages字段我将上文也一起传过去了,为了它能回答问题的时候,回顾上下文

完整代码:

import Chat, { Bubble, useMessages } from '@chatui/core';
import '@chatui/core/dist/index.css';
import styles from './index.less';
import './chatui-theme.css';
import axios from 'axios';
import { useState } from 'react';
 
const initialMessages = [
  {
    type: 'text',
    content: { text: '您好,我是智能助理,您的贴心小助手~' },
    user: { avatar: '/logo.svg' },
  },
  {
    type: 'image',
    content: {
      picUrl: '//img.alicdn.com/tfs/TB1p_nirYr1gK0jSZR0XXbP8XXa-300-300.png',
    },
  },
];
 
// 默认快捷短语,可选
const defaultQuickReplies = [
  {
    icon: 'message',
    name: '联系人工服务',
    isNew: true,
    isHighlight: true,
  },
  //   {
  //     name: '短语1',
  //     isNew: true,
  //   },
  //   {
  //     name: '短语2',
  //     isHighlight: true,
  //   },
  //   {
  //     name: '短语3',
  //   },
];
 
const ChatBot = () => {
  // 消息列表
  const { messages, appendMsg, setTyping } = useMessages(initialMessages);
  const [chatMessage, setChatMessage] = useState([]);
 
  // 发送回调
  function handleSend(type, val) {
    if (type === 'text' && val.trim()) {
      // TODO: 发送请求
      appendMsg({
        type: 'text',
        content: { text: val },
        position: 'right',
      });
      axios
        .post(
          'https://api.openai.com/v1/chat/completions',
          {
            messages: [...chatMessage, { content: val, role: 'user' }],
            max_tokens: 150,
            n: 1,
            temperature: 0.5,
            //   stop: ['\n'],
            model: 'gpt-3.5-turbo',
          },
          {
            headers: {
              'Content-Type': 'application/json',
              Authorization: 'Bearer 你的api-key',
            },
          },
        )
        .then((res) => {
          const response = res.data.choices[0].message.content.trim();
          const newMessages = [
            ...chatMessage,
            { content: val, role: 'user' },
            { content: response, role: 'system' },
          ];
          setChatMessage(newMessages as any);
          appendMsg({
            type: 'text',
            content: { text: response },
            user: { avatar: '/logo.svg' },
          });
        })
        .catch((err) => console.log(err));
 
      setTyping(true);
    }
  }
 
  // 快捷短语回调,可根据 item 数据做出不同的操作,这里以发送文本消息为例
  function handleQuickReplyClick(item) {
    handleSend('text', item.name);
  }
 
  function renderMessageContent(msg) {
    const { type, content } = msg;
    // 根据消息类型来渲染
    switch (type) {
      case 'text':
        return <Bubble content={content.text} />;
      case 'image':
        return (
          <Bubble type="image">
            <img src={content.picUrl} alt="" />
          </Bubble>
        );
      default:
        return null;
    }
  }
 
  return (
    <div id={styles.chatBotContainer}>
      <Chat
        navbar={{ title: '小知了' }}
        messages={messages}
        renderMessageContent={renderMessageContent}
        quickReplies={defaultQuickReplies}
        onQuickReplyClick={handleQuickReplyClick}
        onSend={handleSend}
      />
    </div>
  );
};
 
export default ChatBot;
————————————————
版权声明:本文为CSDN博主「kabudada」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kabudada/article/details/129829465

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值