https://github.com/conect2ai/auto-bot-api
Repository for Automotive Chatbot API using FastAPI, Milvus, and OpenAI to respond to car-related queries and process documents efficiently.
Science Score: 13.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (4.4%) to scientific vocabulary
Repository
Repository for Automotive Chatbot API using FastAPI, Milvus, and OpenAI to respond to car-related queries and process documents efficiently.
Basic Info
- Host: GitHub
- Owner: conect2ai
- License: mit
- Language: Jupyter Notebook
- Default Branch: main
- Size: 266 KB
Statistics
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md

API - Chatbot Automotivo
Este repositório contém o código-fonte para a API de Chatbot Automotivo. A API foi construída utilizando FastAPI e Python, e usa Milvus para busca de similaridade. A API é projetada para fornecer respostas a consultas de usuários relacionadas a manuais automotivos.
Funcionalidades
- FastAPI: framework web moderno e rápido (de alta performance) para a construção de APIs com Python 3.7+;
- Milvus: banco de dados vetorial de código aberto que fornece capacidades de busca por similaridade para conjuntos de dados de grande escala;
- Docker: plataforma de código aberto que facilita a criação, implantação e execução de alicações em contêineres.
Você precisa ter o Docker instalado em sua máquina para executar este projeto. Se você não tem o Docker instalado, pode baixá-lo no site oficial.
Aplicação Flutter
O Aplicativo Flutter que interage com esta API pode ser encontrado aqui.
Instalação e Execução
- Clone o repositório:
bash git clone https://github.com/conect2ai/auto-bot-api.git - Mude para o diretório do projeto:
bash cd auto-bot-api - Execute o seguinte comando para construir e iniciar a API:
bash docker-compose up --build api - A API estará disponível em
http://localhost:8000. Você pode acessar a documentação da API emhttp://localhost:8000/docsouhttp://localhost:8000/redoc. - Além disso, a aplicação Streamlit estará disponível em
http://localhost:8501, que pode ser usada para interagir com a API.
Quando você fizer o upload de um manual automotivo no formato PDF, ele deve ser nomeado no formato Marca_Modelo_Ano.pdf. Por exemplo, Volkswagen_Polo_2020.pdf.
Dependências Externas e Configuração
- OpenAI API Key: a API usa a API OpenAI para realizar algumas de suas operações. Para usar esses recursos, você precisará:
- Criar uma conta em OpenAI.
- Seguir as instruções para solicitar acesso à API.
- Uma vez aprovado, gerar uma chave de API no painel da sua conta OpenAI.
- Armazenar essa chave de forma segura e usá-la em suas solicitações de API conforme mostrado nos endpoints que requerem autenticação.
- Observe que os serviços da OpenAI podem incorrer em custos com base no uso.
Documentação dos Endpoints da API
A API fornece os seguintes endpoints:
Endpoint: GET /getstoredcars
Este endpoint busca uma lista de carros armazenados no banco de dados vetorial Milvus, organizados por marca, modelo e ano. Ele é projetado para fornecer uma rápida consulta para os dados de carros disponíveis no banco de dados.
Fluxo de Trabalho
- Conexão: conecta-se ao Milvus.
- Verificar Coleção: verifica se a coleção existe. Retorna um erro se não existir.
- Consultar Dados: executa uma consulta para buscar entradas onde o campo
brandnão está vazio, coletando os camposbrand,modeleyear. - Organizar Dados: estrutura a resposta para agrupar anos sob modelos, que são agrupados sob marcas.
Formato da Resposta
Sucesso (Código de Status: 200) - retorna dados estruturados por marca, modelo e ano:
json { "message": { "Toyota": { "Corolla": ["2020", "2021"], "Camry": ["2019"] }, "Ford": { "Fiesta": ["2018", "2019"] } }, "status_code": 200 }Falha (Código de Status: 400) - se a coleção não existir:
json { "message": "Collection COLLECTION_NAME does not exist", "status_code": 400 }
Endpoint: POST /answerquestionaudio
Converte consultas faladas em texto e, em seguida, gera respostas com base no texto transcrito usando uma base de conhecimento. Este endpoint é adequado para sistemas ativados por voz, em que os usuários podem fazer perguntas sobre especificações de carros via áudio.
Fluxo de Trabalho
- Receber Áudio: aceita um arquivo de áudio.
- Extrair Conteúdo de Áudio: lê o conteúdo do arquivo de áudio enviado.
- Transcrição: converte o conteúdo de áudio em texto usando uma função de fala para texto que envolve:
- Escrever o áudio em um arquivo temporário.
- Transcrever o áudio usando o modelo Faster Whisper.
- Excluir arquivos temporários após a transcrição.
- Consultar Base de Conhecimento: usa o texto transcrito para consultar uma base de conhecimento com detalhes sobre o carro (marca, modelo, ano) fornecidos pelo usuário.
- Gerar Resposta: retorna a resposta da consulta, extraída da base de conhecimento usando o texto transcrito como entrada.
Parâmetros
audio_file(UploadFile): o arquivo de áudio contendo a consulta falada;brand(str, opcional): a marca do carro;model(str, opcional): o modelo do carro;year(str, opcional): o ano do carro;authorization(Header): token de autorização necessário para acessar a API OpenAI.
Formato da Resposta
- Sucesso (Código de Status: 200) - retorna o texto transcrito e o conteúdo da resposta com base na consulta:
json { "text": "Qual é a eficiência de combustível do modelo?", "response_content": "A eficiência de combustível do modelo é de 20 km por hora.", "status_code": 200 } - Falha (Código de Status: 400) - em caso de erro, retorna uma mensagem de erro:
json { "message": "No audio file provided.", "status_code": 400 }
Endpoint: POST /knowledge_base
O endpoint recupera informações sobre a base de conhecimento existente armazenada no banco de dados vetorial Milvus. Ele verifica a presença da coleção especificada.
Fluxo de Trabalho
- Verificação de Autorização: garante que um cabeçalho de autorização com uma chave de API OpenAI válida esteja incluído na solicitação;
- Verificar Coleção: verifica se a coleção especificada existe no banco de dados Milvus;
- Recuperação da Base de Conhecimento: se a coleção existir, inicializa a base de conhecimento usando os embeddings e os parâmetros de conexão especificados. Caso contrário, retorna uma indicação de que a base de conhecimento não está disponível.
Parâmetros
authorization(Header): token Bearer necessário para autenticação e autorização.
Formato da Resposta
- Sucesso (Código de Status: 200) - retorna uma mensagem confirmando o acesso à base de conhecimento:
json { "knowledge_base": "Available", "status_code": 200 } - Falha (Código de Status: 401) - se o cabeçalho de autorização não for fornecido:
json { "message": "Authorization header not provided.", "status_code": 401 }
Endpoint: GET /collection_exists
O endpoint verifica se uma coleção específica existe no banco de dados vetorial Milvus.
Fluxo de Trabalho
- Verificar Presença da Coleção: consulta o Milvus para determinar se a coleção especificada está disponível.
Parâmetros
collection_name(Parâmetro de Consulta): o nome da coleção que você deseja verificar.
Formato da Resposta
- Sucesso (Código de Status: 200) - retorna um booleano indicando se a coleção existe:
json { "exists": true, // ou false, dependendo da presença da coleção "status_code": 200 }
Endpoint: POST /clear_collection
O endpoint é responsável por excluir todos os dados dentro de uma coleção específica no banco de dados vetorial Milvus. É usado para limpar uma coleção para atualizar seu conteúdo ou para gerenciar o armazenamento de dados.
Fluxo de Trabalho
- Limpar Coleção: inicia um comando para excluir a coleção especificada do servidor Milvus usando suas funções internas de utilitário.
Formato da Resposta
- Sucesso (Código de Status: 200) - retorna uma confirmação de que a coleção foi limpa com sucesso:
json { "message": "Collection COLLECTION_NAME cleared", "status_code": 200 }
Endpoint: POST /exportchatto_pdf
Este endpoint é projetado para exportar o histórico de chat para um formato PDF. Ele recebe as mensagens do chat como entrada e gera um documento PDF, que é então codificado no formato base 64 para facilitar a transmissão via HTTP.
Fluxo de Trabalho
- Preparar Dados: extrai todas as mensagens do chat fornecidas nos dados da solicitação sob a chave 'all_messages'.
- Criar PDF: utiliza a biblioteca ReportLab para formatar o texto e criar um documento PDF:
- Configura um modelo PDF com tamanho de página padrão e margens;
- Adiciona mensagens de chat, alternando entre mensagens de usuário e assistente;
- Insere espaçadores para legibilidade.
- Codificar PDF: converte o PDF gerado em uma string codificada em base64 para facilitar a incorporação ou download.
Parâmetros
data(JSON Body): um dicionário contendo uma lista de mensagens de chat. Cada mensagem deve incluir o papel do remetente e o texto da mensagem.
Formato da Resposta
- Sucesso (Código de Status: 200) - retorna uma string codificada em base64 do PDF gerado com as mensagens de chat:
json { "pdf_bytes": "base64_encoded_string_of_the_PDF", "all_messages": [ {"role": "User", "message": "Hello, how can I help you?"}, {"role": "Assistant", "message": "I need information about my car status."} ], "status_code": 200 }
Endpoint: POST /process_pdf
Este endpoint processa arquivos PDF enviados para extrair texto e criar uma base de conhecimento. Ele usa o texto extraído dos PDFs para aprimorar uma base de conhecimento existente ou criar uma nova, integrando informações específicas do veículo, como marca, modelo e ano dos nomes dos arquivos.
Fluxo de Trabalho
- Verificação de Autenticação: verifica a presença de um cabeçalho de autorização com uma chave de API válida.
- Validação de Arquivos PDF: verifica se os arquivos PDF são fornecidos na solicitação.
- Processamento de PDF:
- Salva temporariamente cada PDF em um diretório designado;
- Extrai texto de cada arquivo PDF;
- Analisa metadados relacionados ao veículo do nome do arquivo;
- Divide o texto extraído em partes gerenciáveis;
- Aplica incorporações de texto usando a API OpenAI.
- Integração com a Base de Conhecimento:
- Se uma base de conhecimento já existir, a atualiza com o novo texto e metadados;
- Se nenhuma base de conhecimento existir, cria uma nova com os dados processados.
Parâmetros
authorization(Header): obrigatório. Token Bearer para acesso à API.pdfs(Lista[UploadFile]): obrigatório. Lista de arquivos PDF a serem processados.
Formato da Resposta
- Sucesso (Código de Status: 200) - retorna uma mensagem indicando o processamento bem-sucedido dos PDFs:
json { "message": "PDFs processed. You may now ask questions.", "status_code": 200 } - Falha:
- Se o cabeçalho de autorização estiver ausente (Código de Status: 401):
json { "message": "Authorization header not provided.", "status_code": 401 } - Se nenhum arquivo PDF for fornecido (Código de Status: 400):
json { "message": "No PDF files provided.", "status_code": 400 }
- Se o cabeçalho de autorização estiver ausente (Código de Status: 401):
Endpoint: POST /answerquestionimage
Este endpoint permite que os usuários façam uma pergunta sobre uma imagem e recebam uma resposta. Ele é projetado para lidar com consultas relacionadas a imagens e texto, fornecendo respostas com base na interpretação combinada da imagem e da pergunta.
Fluxo de Trabalho
- Verificação de Autorização: garante que um cabeçalho de autorização com uma chave de API válida esteja incluído na solicitação.
- Validar Entradas: confirma se um arquivo de imagem e uma pergunta são fornecidos.
- Processamento de Imagem:
- O arquivo de imagem é lido e codificado de forma assíncrona em uma string base64.
- Configuração da Solicitação:
- Prepara uma carga útil que inclui a pergunta e a imagem codificada, formatada para processamento de IA.
- Processamento de IA:
- Envia uma solicitação à API OpenAI com a pergunta e os dados da imagem;
- Recebe a resposta da IA à consulta com base na interpretação combinada do texto e da imagem.
- Retornar Resposta: entrega a resposta gerada pela IA como parte da resposta JSON.
Parâmetros
authorization(Header): obrigatório. Token Bearer para acesso à API.image_file(UploadFile): obrigatório. Arquivo de imagem relacionado à pergunta.question(String): obrigatório. Pergunta textual sobre a imagem.
Formato da Resposta
- Sucesso (Retorna JSONResponse) - entrega a resposta juntamente com o código de status:
json { "answer": "Aqui está a resposta com base na análise da imagem.", "status_code": 200 } - Falha:
- Se a autorização estiver ausente (Código de Status: 401):
json { "message": "Authorization header not provided.", "status_code": 401 } - Se a pergunta estiver ausente (Código de Status: 400):
json { "message": "Question not provided.", "status_code": 400 }
- Se a autorização estiver ausente (Código de Status: 401):
Response Format
- Success (Returns JSONResponse): Delivers the answer along with the status code:
json { "answer": "Here is the answer based on the image analysis.", "status_code": 200 }
Endpoint: POST /answer_question
Este endpoint permite que os usuários enviem uma pergunta com base em modelo, marca e ano de carro específicos usando um formato estruturado e recuperem uma resposta de uma base de conhecimento.
Fluxo de Trabalho
- Verificação de Autorização: garante que um cabeçalho de autorização com uma chave de API válida esteja incluído na solicitação.
- Validar Parâmetros: confirma se todos os parâmetros necessários (marca, modelo, ano, pergunta) estão incluídos.
- Gerar Resposta:
- Usa os parâmetros fornecidos para consultar a base de conhecimento;
- Alavanca dados previamente integrados para gerar uma resposta abrangente.
- Retornar Resposta: fornece a resposta gerada como parte do corpo da resposta.
Parâmetros
params(QuestionParams): uma estrutura de dados que incluibrand,model,year, equestion. Todos os campos são necessários para adaptar a consulta às necessidades específicas do usuário.authorization(Header): obrigatório. Token Bearer para acesso à API.
Formato da Resposta
- Sucesso (Retorna JSONResponse) - entrega a resposta juntamente com o código de status:
json { "response_content": "Here is the detailed answer based on the knowledge base.", "status_code": 200 } - Falha:
- Se a autorização estiver ausente (Código de Status: 401):
json { "message": "Authorization header not provided.", "status_code": 401 }
- Se a autorização estiver ausente (Código de Status: 401):
License
This project is licensed under the MIT License - see the LICENSE file for details.
Owner
- Name: conect2ai
- Login: conect2ai
- Kind: organization
- Repositories: 1
- Profile: https://github.com/conect2ai
GitHub Events
Total
- Push event: 2
Last Year
- Push event: 2
Dependencies
- milvusdb/milvus v2.2.9
- minio/minio RELEASE.2023-03-20T20-16-18Z
- quay.io/coreos/etcd v3.5.5
- PyPDF2 ==3.0.1
- langchain ==0.0.259
- openai ==0.27.2
- pillow ==9.5.0
- pymilvus ==2.2.9
- reportlab ==3.6.13
- streamlit ==1.25.0
- streamlit-chat ==0.0.2.2
- tiktoken ==0.3.3
- PyPDF2 ==3.0.1
- PyYAML ==6.0.1
- SQLAlchemy ==2.0.28
- aiohttp ==3.9.3
- aiosignal ==1.3.1
- annotated-types ==0.6.0
- anyio ==4.3.0
- argon2-cffi ==23.1.0
- argon2-cffi-bindings ==21.2.0
- async-timeout ==4.0.3
- attrs ==23.2.0
- av ==11.0.0
- azure-core ==1.30.1
- azure-storage-blob ==12.19.1
- certifi ==2024.2.2
- cffi ==1.16.0
- chardet ==5.2.0
- charset-normalizer ==3.3.2
- click ==8.1.7
- colorama ==0.4.6
- coloredlogs ==15.0.1
- cryptography ==42.0.5
- ctranslate2 ==4.1.0
- dataclasses-json ==0.6.4
- decorator ==4.4.2
- dnspython ==2.6.1
- ecdsa ==0.18.0
- email_validator ==2.1.1
- environs ==9.5.0
- exceptiongroup ==1.2.0
- fastapi ==0.110.0
- faster-whisper ==1.0.1
- filelock ==3.13.3
- flatbuffers ==24.3.25
- frozenlist ==1.4.1
- fsspec ==2024.3.1
- greenlet ==3.0.3
- grpcio ==1.60.0
- h11 ==0.14.0
- huggingface-hub ==0.22.2
- humanfriendly ==10.0
- idna ==3.6
- imageio ==2.34.0
- imageio-ffmpeg ==0.4.9
- isodate ==0.6.1
- jsonpatch ==1.33
- jsonpointer ==2.4
- langchain ==0.1.13
- langchain-community ==0.0.29
- langchain-core ==0.1.33
- langchain-text-splitters ==0.0.1
- langsmith ==0.1.31
- marshmallow ==3.21.1
- minio ==7.2.5
- moviepy ==1.0.3
- mpmath ==1.3.0
- multidict ==6.0.5
- mypy-extensions ==1.0.0
- numpy ==1.26.4
- onnxruntime ==1.17.1
- openai ==0.27.2
- orjson ==3.9.15
- packaging ==23.2
- pandas ==2.2.1
- passlib ==1.7.4
- pillow ==10.2.0
- proglog ==0.1.10
- protobuf ==5.26.0
- psycopg2-binary ==2.9.9
- pyarrow ==15.0.2
- pyasn1 ==0.5.1
- pycparser ==2.21
- pycryptodome ==3.20.0
- pydantic ==2.6.4
- pydantic-settings ==2.2.1
- pydantic_core ==2.16.3
- pymilvus ==2.4.0
- pyotp ==2.9.0
- python-dateutil ==2.9.0.post0
- python-dotenv ==1.0.1
- python-jose ==3.3.0
- python-multipart ==0.0.9
- pytz ==2024.1
- redis ==5.0.3
- reportlab ==4.1.0
- requests ==2.31.0
- rsa ==4.9
- scipy ==1.12.0
- six ==1.16.0
- sniffio ==1.3.1
- starlette ==0.36.3
- sympy ==1.12
- tenacity ==8.2.3
- tiktoken ==0.3.3
- tokenizers ==0.15.2
- tqdm ==4.66.2
- typing-inspect ==0.9.0
- typing_extensions ==4.10.0
- tzdata ==2024.1
- ujson ==5.9.0
- urllib3 ==2.2.1
- uvicorn ==0.29.0
- yarl ==1.9.4