Este projeto exibe vários personagens, cada um dos quais pode interagir por meio de um sistema de chat desenvolvido pela API OpenAI.
npm install my-project
cd my-project
npm run start
npm run test
This project forked from laboratoria/sap012-dataverse-chat
💬 Dataverse Chat
Home Page: https://dataverse-chat.netlify.app/
npm install my-project
cd my-project
npm run start
npm run test
Navegue até a pasta views
em seu projeto e dentro dela,
crie um componente para a visualização do chat grupal,
por exemplo, ChatGroup.js
ou Panel.js
,
que mostrará um chat grupal com todos os personagens.
Este componente deve permitir aos usuários enviar
mensagens para todos os personagens ou elementos do conjunto de dados
e receber respostas.
A visualização deve ser capaz de obter os dados necessários (id) para
mostrar os elementos do conjunto de dados.
Isso pode ser feito passando os dados como parâmetros ou utilizando
funções que obtêm os dados.
Obtenha as respostas de todos os elementos nos dados utilizando
a função designada para consumir a API da OpenAI,
neste exemplo, communicateWithOpenAI
.
Isso permitirá que os usuários interajam com todos os
personagens através
de um chat grupal.
[!DICA]
Revise o tópico de
Promessas
e o método
Promise.all()
Para alcançar este objetivo, siga estes passos:
Obtenha a lista de elementos nos dados.
Para cada elemento na lista:
views
.Home.js
e About.js
, cada um desses arquivos representará uma visualização.Se em algum momento você tiver dúvidas ou perguntas durante o desenvolvimento deste projeto, não hesite em procurar ajuda! Lembre-se de que você pode contar com:
Documentação do Projeto: Certifique-se de revisar cuidadosamente a documentação fornecida no README; especialmente as dicas, sugestões e leituras complementares.
Coaches: Os coaches estão aqui para ajudar você. Se você enfrentar obstáculos que a documentação não resolve ou se precisar de uma explicação mais detalhada, não hesite em solicitar uma OH ou nos enviar uma mensagem pelo Slack.
Crie uma pasta chamada data
dentro de src
.
Dentro dessa pasta, crie um arquivo dataset.js
e
copie seu conjunto de dados para esse arquivo.
// src/data/dataset.js
export default [
{
"id": "marie-curie",
"name": "Marie Curie",
"shortDescription": "Física e química, ganhadora de dois Prêmios Nobel.",
"description": "física e química ...",
"imageUrl": "https://laboratoria-dataverse-talks.netlify.app/public/marie-curie.jpg",
"facts": {
"yearOfBirth": "1867",
"yearOfDeath": "1934",
"birthPlace": "Varsóvia, Polônia",
"mainField": "Física e Química"
},
"extraInfo": {
"imageSource": "https://www.historyextra.com/period/first-world-war/life-of-the-week-marie-curie/"
}
},
]
Projete as visualizações da página inicial, onde serão apresentados os elementos do seu conjunto de dados, bem como as visualizações de Chat Individual e Chat em Grupo. A premissa é otimizar e reutilizar o design do protótipo do projeto anterior, incorporando exclusivamente a visualização de chat individual e/ou chat em grupo, evitando a necessidade de reinventá-lo.
É fundamental que a sua proposta visual não apenas reflita a essência da sua solução ideal, mas também siga estritamente os princípios fundamentais do design visual.
[!DICA]
Use a identidade visual ou o protótipo do seu projeto anterior.
Uma vez identificadas as partes que podem ser divididas,
você deve implementar a divisão em componentes menores.
Isso pode ser feito de várias maneiras, como:
O manejo das API KEYs é crucial para manter a segurança.
A fim de não incluir a chave diretamente no código do aplicativo,
crie um campo de entrada que permita inserir ou colar a API KEY.
Este campo de entrada pode estar localizado em uma visualização,
diálogo ou modal.
Para obter respostas de cada elemento ou personagem e poder interagir com ele ou ela, é essencial fazer uma solicitação HTTP para a OpenAI. Neste processo, é recomendável se familiarizar com os conceitos de promessas e considerar o uso de
fetch ou axios para realizar a solicitação.
Sugerimos que você organize o código associado a esta tarefa dentro da pasta lib
.
Nesta pasta, você pode criar um arquivo chamado openAIApi.js
, que conterá uma função específica. Esta função deve receber um parâmetro que armazena as mensagens; tenha em mente que essas mensagens devem seguir uma estrutura específica, que você pode entender melhor consultando a documentação fornecida pela OpenAI.
// src/lib/openAIApi.js
// Importa la función para obtener la API KEY desde apiKey.js
import { getApiKey } from './apiKey.js';
export const communicateWithOpenAI = (messages) => {
//Aquí es donde debes implementar la petición con fetch o axios
};
[!NOTA]
communicateWithOpenAI
é uma sugestão para o nome
da sua função. Você pode escolher o nome que preferir.
Para verificar o funcionamento das funções criadas, crie um arquivo
openAIApi.spec.js
na pasta test
.
[!DICA]
Você pode revisar esta documentação sobre Testes de código assíncrono.
// test/openAIApi.spec.js
import { communicateWithOpenAI } from '../src/utils/openAIApi.js';
describe('communicateWithOpenAI', () => {
test('communicateWithOpenAI', () => {
return communicateWithOpenAI().then(data => {
expect(data).toBe('example');
});
});
});
[!NOTA]
communicateWithOpenAI
é uma sugestão para o nome
da sua função. Você pode escolher o nome que preferir.
Dentro da pasta test
, crie um arquivo chamado
apiKey.spec.js
. Neste arquivo, desenvolva os
testes correspondentes. Você pode utilizar o seguinte
esquema como ponto de partida:
// test/apiKey.spec.js
import { getApiKey, setApiKey } from '../src/lib/apiKey.js';
describe('getApiKey', () => {
it('debería devolver el valor de la API Key', () => {
// Desarrolla el test correspondiente aquí
});
});
describe('setApiKey', () => {
it('debería establecer correctamente la API Key', () => {
// Desarrolla el test correspondiente aquí
});
});
Para garantir a segurança e persistência da
API KEY, sugere-se utilizar Local Storage.
Recomendamos seguir estes passos:
Na pasta lib
, crie um novo arquivo chamado apiKey.js
.
Dentro de apiKey.js
, implemente duas funções essenciais:
// src/lib/apiKey.js
export const getApiKey = () => {
// Implementa el código para obtener la API KEY desde Local Storage
};
export const setApiKey = (key) => {
// Implementa el código para guardar la API KEY en Local Storage
};
Para continuar com as migrações, é necessário criar uma
pasta test
na
raiz do projeto. Dentro da pasta test
, crie um arquivo
dataFunctions.spec.js
. Neste arquivo, copie seus testes do Dataverse
e ajuste as importações para que funcionem corretamente.
// test/dataFunctions.spec.js
import { data } from '../src/data/dataset.js';
import { filterData } from '../src/lib/dataFunctions.js';
console.log(data);
describe('filterData', () => {
it('returns `filterData`', () => {
expect(filterData()).toBe('example');
});
});
[!DICA]
Na pasta de testes, considere ter um arquivo de teste
(suite) para cada arquivo JavaScript que deseja testar.
Uma vez que as funções estejam em dataFunctions.js
junto com seus respectivos testes,
podemos avançar com a visualização do conjunto de dados.
O objetivo é conseguir visualizar
o conjunto de dados de forma semelhante ao Dataverse, mas dentro da SPA.
Para alcançar isso, recomendamos que você faça modificações
no arquivo Home.js
localizado na pasta views
.
Este arquivo deve conter o código necessário para
visualizar o conjunto de dados. Tenha em mente que,
neste caso, cada visualização deve retornar
um elemento para que possa ser renderizado pelo router.
É provável que você precise adaptar o
código da sua visualização anterior para modificar um novo elemento
dentro desta visualização Home.js
.
Se tiver dúvidas, você pode revisar novamente o
guia do router
e consultar os coaches para obter
mais clareza neste processo.
// src/views/Home.js
import { data } from '../data/dataset.js';
import { filterData } from '../lib/dataFunctions.js';
export function Home(props) {
const viewEl = document.createElement('div');
//Modificariamos el contenido del nuevo elemento con lo realizado en Dataverse
viewEl.innerHTML = `
<h1>DataVerse</h1>
...
`;
return viewEl;
}
É importante testar o aplicativo após a refatoração para garantir
que ele funcione corretamente. Isso pode ser feito testando
o aplicativo manualmente ou utilizando um framework de testes automatizados.
Vamos supor que temos um aplicativo que mostra uma lista de personagens.
O aplicativo possui uma visualização que exibe a lista de personagens,
e uma função que obtém os dados dos personagens.
Para melhorar a estrutura e organização do aplicativo,
podemos dividir a função getCharacters()
em dois componentes
menores:
Um componente CharacterRepository
que é responsável por obter
os dados dos personagens.
Um componente CharacterList
que é responsável por exibir a lista de personagens.
Essa divisão nos permite separar a lógica de obtenção de dados
da lógica de visualização. Isso torna o aplicativo mais fácil de entender e manter.
Para esta tarefa, você deve examinar o aplicativo e buscar áreas
que possam ser divididas em componentes menores.
Algumas coisas a serem consideradas são:
Para facilitar a interação com um elemento específico do nosso
conjunto de dados, criaremos uma nova visualização. Siga estes passos:
Acesse a pasta views
do seu projeto.
Se encontrar um arquivo chamado About.js
,
renomeie-o conforme o conjunto de dados
com o qual está lidando, como por exemplo Planet.js
se estiver trabalhando com dados de planetas.
Se o arquivo About.js
não existir,
você pode criar um novo com um nome relevante.
Dentro deste arquivo, desenvolva a visualização que permitirá interagir
com os elementos do conjunto de dados. Você pode incluir componentes como botões,
formulários ou qualquer outro elemento necessário para alcançar o objetivo específico
da sua aplicação.
Certifique-se de que esta visualização seja capaz de receber um identificador (id)
ou outros dados necessários para mostrar o elemento específico do conjunto
de dados. Você pode conseguir isso usando parâmetros, como por
exemplo através dos
search params
da URL que o router pode comunicar.
[!IMPORTANTE]
Lembre-se de utilizar as funções que criamos anteriormente emapiKey.js
para gerenciar de forma segura a API KEY.
Vamos reutilizar as funções de filtragem, ordenação e
cálculo do seu projeto anterior neste novo projeto.
Para isso, crie um novo arquivo no seguinte caminho:
src/lib/dataFunctions.js
e copie as funções mencionadas
para esse arquivo. Se ainda não existir, você precisará criar uma pasta
chamada lib
dentro da pasta src
(src/lib).
[!DICA]
Volte ao README principal tantas vezes quanto necessário.
5. Considerações técnicas
Exemplo:
// src/lib/dataFunctions.js
export const filterData = (data, filterBy, value) => {
return 'example';
};
export const sortData = (data, sortBy, sortOrder) => {
return [];
};
export const computeStats = (data) => {
return [];
};
[!DICA]
Consulte estes links para obter mais informações sobre como importar
módulos
e funções
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.