Chat de IA utilizando Ollama localmente com Python para responder perguntas de uma rede social, além de moderar conteúdo
- FastAPI: Framework para a criação da API de validação
- Ollama: IA utilizada para analisar o conteúdo dos posts
- gemma: Modelo de IA performatico
- Python: Linguagem de programação principal do projeto
- Sempre que um novo post é publicado na sua plataforma, uma requisição é enviada para esta API.
- A IA analisa o conteúdo do post e determina se ele é permitido ou deve ser removido.
- Caso o post seja inadequado, a API realiza uma requisição ao backend da plataforma para excluí-lo automaticamente.
- Clone este repositório:
git clone https://github.com/JoaoEnrique/chat-inteligencia-artificial cd seu-repositorio - Crie um ambiente virtual (opcional, mas recomendado):
python -m venv env source env/bin/activate # Linux/macOS env\Scripts\activate # Windows
- Instale as dependências:
pip install -r requirements.txt
- Certifique-se de que o modelo está instalado no Ollama:
ollama pull mistral
- Execute a API:
uvicorn main:app --reload --port 8082
- Endpoint:
POST /analyze - Request:
{ "content": "Texto do post aqui" } - Response:
ou
{ "status": "permitido", "analysis": "Post Permitido" }{ "status": "removido", "analysis": "Motivo pelo qual o post foi removido" }
@app.post("/chat")
async def chat_stream(request: Request, body: ChatRequest = Body(...)):
global last_chat_request
try:
last_chat_request = datetime.utcnow()
if await verify_origin(request=request) == False:
return JSONResponse(status_code=403, content={"detail": "Origem desconhecida."})
messages = [
{
"role": "system",
"content": DEFAULT_TEXT + f"\n Responda com educação e se for o caso com humor. A mensagem do {body.user.name} é: {body.content}"
},
{"role": "user", "content": body.content},
]
def stream_response():
try:
for chunk in ollama.chat(model="gemma", messages=messages, stream=True):
content = chunk["message"]["content"]
yield content
except Exception as e:
logger.error(f"Erro no stream_response: {str(e)}")
yield f"[ERRO]: {str(e)}"
yield "" # Forçar fim do stream
return StreamingResponse(stream_response(), media_type="text/event-stream")
except ValidationError as ve:
return JSONResponse(status_code=200, content={"detail": "Erro de validação nos dados enviados.", "errors": ve.errors()})
except Exception as e:
return JSONResponse(status_code=200, content={"detail": "Erro interno no servidor.", "error": str(e)})
- Implementação de um sistema de feedback para aprimorar a precisão da IA.
- Integração com outras IAs para diferentes tipos de moderação (imagem, áudio, vídeo).
- Logs e dashboard para monitoramento das remoções.
Este projeto está licenciado sob a Creative Commons BY-NC 4.0.
Você pode copiar, modificar e redistribuir para fins não comerciais, desde que atribua os créditos ao autor original.
