Web API para o chatbot Blabinha.
Um servidor HTTP REST, que expõe o chat-bot Blabinha através da rede, como um serviço de API, permitindo a criação de conversas utilizando diferentes modelos de LLMs e estratégias de prompt. Ligado ao projeto Blabinha 2.0: um agente conversacional baseado em inteligência artificial generativa, especialista na Amazônia Azul, do laboratório Center for Artificial Intelligence (C4AI) da Universidade de São Paulo.
- Sistema de autenticação e autorização para usuários; permitindo
- Criar chats: sessões de conversa com a Blabinha;
- Criar diálogos (dialogs): uma seção de conversa com um chat (pergunta e resposta);
- Recuperar dados sobre chats ou diálogos anteriores;
- Editar e apagar dados referentes a chats e diálogos;
- Crie um novo usuário em
/users/registere faça log in em/auth/token, você receberá um token de acesso (access_token) e um token de recuperação (refresh_token), use o token de acesso para acessar os endpoints. Eventualmente o token de acesso irá expirar, requisite um novo token de acesso através de/auth/refreshutilizando o token de recuperação. Quando o token de recuperação expirar você terá que fazer log in novamente. Para os próximos passos é preciso passar o token de acesso no headerAuthorization. - Crie um chat em
/chats, com o modelo de LLM desejado e a estratégia de prompt preferida, e - opcionalmente - a seção que se deseja começar, para iniciar do 'zero' o valor padrão é100. A resposta será em json no schemaChat, contendo o atributoid. Armazene esse id para referênciar o chat nas próximas interações; - Interaja com o chat por meio de diálogos, com requisições do tipo
POST /dialogs, enviando o id do chat e o input desejado. A resposta será em json, no esquemaDialog, que contém a resposta gerada por IA, informações sobre aquela seção, e oChatpertencente atualizado.
Para mais informações refira-se à documentação.
Ou utilize uma aplicação de software que testem requisições HTTP, como Postman ou Insomnia.
- Clone este repositório:
git clone [email protected]:caio-bernardo/Blabinha2-API.git; 1.2. Recomenda-se fortemenete o uso do package manageruv, a instalação é simples:pip install uv, se deseja mais informações clique aqui; - Crie um arquivo chamado
.envseguindo o exemplo em.env.example. Preencha as variaveis de ambiente. - Crie a base de dados com o comando
uv run task migrate. Verifique se um arquivodb.sqlite3foi criado na raíz do projeto. - Rode a API com o seguinte comando
uv run task run
Na primeira vez que você executar o uv ele irá instalar todos os pacotes necessários e criar uma pasta .venv na raíz do seu projeto. Essa pasta pode ser usada como ambiente virtual, e ativada com
source ./.venv/bin/activate(e sua versão do Windows). Se decidir iniciar o ambiente virtual, pode executar todos os comandos demonstrados sem a necessidade douv run.
Antes de tudo verifique se o comando utilitário curl está instalado:
curl --versionSe sim, tudo está certo :smile, você pode seguir os exemplos anteriores. Caso contrário, siga este link, e instale o curl na sua máquina.
- Siga as instruções do tópico anterior
- Para rodar a aplicação em modo de desenvolvimento, execute
uv run task dev
Lembre-se de criar uma nova branch, quando for fazer alterações ao código.
Sempre que adicionar modelos à base de dados, ou quiser modificar seus atributos, é preciso criar uma migração. Faremos isso utilzando o comando alembic. Veja abaixo:
alembic upgrade headEsse comando irá rodar todas as migrações, cria uma base de dados com as tabelas que precisamos para a API. Ao modificar, remover e adicionar modelos é preciso criar uma nova migração:
alembic revision --autogenerate -m "Adicionar campo X ao modelo Y"Isso criará um script na pasta migrations. O alembic cobre a maioria dos casos para migrações, porém pode ser que você precise escrever seu próprio script se estiver fazendo algo muito complicado. Após criar sua migração atualize para a head com o comando anterior. Se quiser voltar uma migração (ou mais) use esse comando:
alembic upgrade -1Onde
As vezes deletar a base de dados e rodar a migração de novo pode resolver conflitos de dados.