2
respuestas

Sin creditos de ChatGPT, usa OLLama

¡Hola!

Mucho gusto al que me lea, me llamo Brayan y soy una persona que Ama la informática y también le gusta enseñar sobre este mundo, bien dicen que mientras enseñas aprendes también, durante mi educación aquí me sucedió que cuando llegue a la parte de usar a ChatGPT para traducir la trama de la película. Me doy cuenta de que no tengo ningún crédito, pero a fuerzas quería hacerlo, así que, te contaré como fue que lo hice y qué herramientas utilice para esto.

Como me gusta decir, empecemos por el inicio.

  1. ChatGPT no es más que una IA, y afortunadamente desde que salió no han parado de nacer nuevos modelos, entre estos Ollama

¿Qué necesitamos para lograr esto?

1. Docker

  • Que es: Es una plataforma de código abierto que facilita la creación, implementación y ejecución de aplicaciones dentro de contenedores. Un contenedor es una unidad de software ligera y portátil que incluye todo lo necesario para ejecutar una aplicación, incluidas las bibliotecas, dependencias y código, encapsulados en un único paquete. Instalación

2. Ahora manos a la obra.

Primero necesitamos correr Ollama en nuestro computador, para esto una vez tengamos Docker podemos ejecutar el siguiente comando, una línea de comandos o terminal

docker run -d  -p 11434:11434 --name ollama ollama/ollama

Te explicaré que hace cada cosa en este comando, así entiendes a que vamos.

  1. docker run: Este es el comando principal de Docker que se utiliza para crear e iniciar un nuevo contenedor a partir de una imagen.

  2. -d: Esta opción indica a Docker que el contenedor debe ejecutarse en segundo plano (modo "detach"). Es decir, después de iniciar el contenedor, el control se devuelve al terminal para que puedas seguir usando la línea de comandos.

  3. -p 11434:11434: Esta opción indica a Docker que debe mapear el puerto 11434 del contenedor al puerto 11434 del host.

  4. --name ollama: Esta opción asigna un nombre al contenedor. En este caso, el contenedor se llamará "ollama".

  5. ollama/ollama: Esto especifica la imagen a partir de la cual se creará el contenedor. En este caso, se está utilizando la imagen llamada "ollama" que está disponible en el repositorio ollama en Docker Hub.

Más info por si quieres investigar Docker Hub Ollama

Una vez tenemos esto corriendo podemos ir a http://localhost:11434/

¡Y nos debería salir algo así! Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Lo siguiente es descargar nuestra IA a elección, en la página de Ollama puedes encontrar mucha variedad, variando en tamaños, funciones.

Yo personalmente usé el modelo Gemma 2B así que para descargarlo debemos conectarnos a nuestro contenedor.

docker exec -it ollama /bin/bash

Una vez tenemos algo así en la terminal, lo que curiosamente es otra terminal.

root@d34328c75ea4:/# 

Procedemos a correr el comando

ollama pull gemma:2b

Una vez descargue podemos salir del contenedor con el comando exit

Ahora lo divertido. vincular nuestro programa con la IA, para esto solo debemos enviar una peticion POST a ollama

Aqui te dejo el codigo para que lo analices y si quieres lo implementes.

@JsonIgnoreProperties(ignoreUnknown = true)
public record OllamaResponse(
    String response
) {}
public class OllamaService {
  public static String getTranlatedText(String text) {
    ObjectMapper objectMapper = new ObjectMapper();
    String url = "http://localhost:11434/api/generate";
    String jsonData = "{\"model\": \"gemma:2b\"," +
                      "\"prompt\":" + "\"" + "Translate the following text to Spanish: " + text + "\"," +
                      "\"stream\":false" +
                      "}";
    try {
      HttpClient client = HttpClient.newHttpClient();
      HttpRequest request = HttpRequest.newBuilder()
              .uri(URI.create(url))
              .POST(HttpRequest.BodyPublishers.ofString(jsonData))
              .build();
      HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
      return objectMapper.readValue(response.body(), OllamaResponse.class)
              .response();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
}

Lo invocamos y ya

this.plot = OllamaService.getTranlatedText(DatosSerie.sinopsis());

Tenemos una traducción de la trama. Siempre investiga más y no dejes de aprender. Déjame cualquier duda que tengas, no pude poner las importaciones por el limite de caracteres pero solo use Jackson.

2 respuestas

Hola, Brayan, ¡espero que estés bien!

Gracias por compartir tu experiencia con nosotros. Recuerda que estamos aquí para ayudarte. Si necesitas más ayuda, no dudes en buscarnos en el foro.

¡Gracias nuevamente!

Saludos,

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!

Gracias por la invitacion, pero ya me sacarnon del server por el hecho de referir este post que hice con tanto cariño, se que tal vez es un error, o la verdad hice algo malo sin querer igual seguire ayudando a las personas mediante el foro de Alura