DEV Community

Nicole Maia
Nicole Maia

Posted on

🔧 Projeto de API de Tradução com FastAPI e OpenAI 🚀

Olá, comunidade! 👋

Estou animado para compartilhar um projeto recente que desenvolvi utilizando FastAPI e a API da OpenAI. O objetivo foi criar uma API de tradução eficiente e escalável, containerizada com Docker para facilitar o deployment.

🛠️ Tecnologias Utilizadas:

  • FastAPI: Framework moderno e de alto desempenho para construir APIs com Python.
  • OpenAI GPT-4: Modelo de linguagem avançado para realizar traduções precisas.
  • Pydantic: Validação de dados robusta para garantir a integridade das entradas.
  • Docker: Containerização da aplicação para garantir consistência em diferentes ambientes.

📂 Estrutura do Projeto:

  • app.py: Contém a lógica da API, definição das rotas e integração com a OpenAI.
  • Dockerfile: Configuração para containerizar a aplicação, facilitando o deployment em qualquer ambiente.

📈 Funcionalidades Implementadas:

  • Validação de Dados: Utilizando Pydantic para garantir que a entrada seja uma string válida.
  • Rota de Tradução: Endpoint /translate/ que recebe uma string e retorna a tradução utilizando o modelo GPT-4.
  • Tratamento de Erros: Implementação de exceções para garantir a robustez da API.
  • Containerização com Docker: Facilita a distribuição e execução da aplicação em qualquer infraestrutura.

💡 Desafios e Aprendizados:

  • Integração com a API da OpenAI: Aprendi a otimizar as chamadas para obter respostas mais rápidas e precisas.
  • Deploy com Docker: Ganhei experiência em criar ambientes consistentes e replicáveis, simplificando o processo de deployment.

🔗 Código Disponível:

Estou compartilhando parte do código abaixo para quem tiver interesse em entender melhor a implementação:

app.py

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from openai import OpenAI
import os

os.environ["OPENAI_API_KEY"] = "sua_senha"

openai_client = OpenAI()
app = FastAPI()

class TranslationRequest(BaseModel):
    text_to_translate: str

def get_translated_text(text_to_translate: str) -> str:
    try:
        response = openai_client.chat.completions.create(
            model="gpt-4-mini",
            messages=[
                {"role": "system", "content": "You are a translation expert."},
                {"role": "user", "content": text_to_translate},
            ],
        )
        return response.choices[0].message.content
    except Exception as error:
        # Opcional: você pode registrar o erro aqui para depuração
        raise error

@app.post("/translate/")
async def translate_text_endpoint(request: TranslationRequest):
    try:
        translated_text = get_translated_text(request.text_to_translate)
        return {"translated_text": translated_text}
    except Exception as error:
        raise HTTPException(status_code=500, detail=str(error))

Enter fullscreen mode Exit fullscreen mode

dockerfile

FROM python:3.11.5-slim

WORKDIR /app

COPY app.py /app

RUN pip install uvicorn fastapi openai pydantic

EXPOSE 8000

CMD [ "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000" ]
Enter fullscreen mode Exit fullscreen mode

🔗 Resultado Final:

Image description

Estou empolgado com as possibilidades futuras deste projeto e aberto a feedbacks e colaborações! 🤝

Obrigado por ler! Se tiverem dúvidas ou sugestões, fiquem à vontade para comentar abaixo. 👇

Top comments (0)