0%
Interface de Usuário para o ChatGPT: Criação de um Chat Interativo

Interface de Usuário

Criação de um chat interativo

10-15 min

Interface de Usuário para o ChatGPT: Criação de um Chat Interativo

Introdução

Neste módulo, vamos criar uma interface de usuário moderna e responsiva para interagir com a API do ChatGPT. Usaremos React para construir nossa interface, mas os conceitos podem ser adaptados a outros frameworks.

Configuração do Projeto

Instalação das Dependências

npm create vite@latest chatgpt-ui -- --template react
cd chatgpt-ui
npm install openai axios @chakra-ui/react @emotion/react @emotion/styled framer-motion

Estrutura do Projeto

chatgpt-ui/
├── src/
│   ├── components/
│   │   ├── ChatWindow.jsx
│   │   ├── MessageInput.jsx
│   │   └── Message.jsx
│   ├── hooks/
│   │   └── useChatGPT.js
│   ├── App.jsx
│   └── main.jsx
└── .env

Criação dos Componentes

1. O Hook useChatGPT

// src/hooks/useChatGPT.js
import { useState } from 'react';
import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: import.meta.env.VITE_OPENAI_API_KEY
});

export function useChatGPT() {
  const [messages, setMessages] = useState([]);
  const [isLoading, setIsLoading] = useState(false);

  const sendMessage = async (content) => {
    try {
      setIsLoading(true);
      
      // Adicionar a mensagem do usuário
      const userMessage = { role: 'user', content };
      setMessages(prev => [...prev, userMessage]);

      // Chamar a API do ChatGPT
      const completion = await openai.chat.completions.create({
        model: "gpt-3.5-turbo",
        messages: [
          { role: "system", content: "Vous êtes un assistant utile." },
          ...messages,
          userMessage
        ],
      });

      // Adicionar a resposta do assistente
      const assistantMessage = completion.choices[0].message;
      setMessages(prev => [...prev, assistantMessage]);

      return assistantMessage;
    } catch (error) {
      console.error('Erreur lors de l\'envoi du message:', error);
      throw error;
    } finally {
      setIsLoading(false);
    }
  };

  return {
    messages,
    isLoading,
    sendMessage
  };
}

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!