Construyendo un Agente de IA Nativo con C y Llama.cpp (II)

Nos metemos ya en harina con el código del ejemplo Base, que podemos encontrar en https://github.com/pinguytaz/IA/tree/main/Llama.cpp/src/Base

Para poder usar el programa deberemos descargarnos un modelo preentrenado en formato GGUF,

La estructura base del programa es:

                                    [Inicializar Backend]
                                            │ llama_backend_init();
                                            ▼
                                    [Cargar Modelo]
                                            Define parámetros de ejecución del modelo
                                            Lee archivo .gguf y carga su vocabulario y pesos.
                                            |   llama_model_load_from_file(pathModelo, parametrosModelo);
                                            ▼
                                    [Crear Contexto]
                                             Reserva la memoria RAM dinámica, donde guardamos historia.
                                            │   llama_init_from_model(modelo, parametrosContexto);
                                            ▼
                                    [Tokenizar Prompt]
                                            llama_model_get_vocab(model); Obtenemos el vocabulario del modelo para tokenizar.
                                            llama_tokenize() pasa el texto a numero que son los TOKENs
                                            │
                                            ▼
                                    [sampler] Filtro de seleccion de probabilidades
                                            │
                                            ▼
                                    [batch] Procesamiento por lotes
                                            │
                                            ▼
                                    [Bucle de Inferencia] Es el bucle de generación

La programación la realizaremos usando el API de llama.h, con alto nivel «llama» aunque también podriamos utilizar las librerías de bajo nivel «GGML» por describimos brevemente que es cada uno:

  • GGML: Librería de bajo nivel. Se encarga de la matemática pura (multiplicación de matrices y cuantización).
  • LLAMA: Capa de abstracción de alto nivel. Maneja el modelo, los tokens y el estado del KV Cache.

Lo primero que hacemos es cargar Backend, antes de comenzar con el programa, que nos permitirá inicializar los recursos de CPU/GPU.

Después cargaremos el modelo en memoria, mapeara el archivo .gguf en memoria, definiendo los parámetros que nos interesen.

paramModelo_t parametrosModelo = llama_model_default_params();   // Carga de los parametros por defecto
parametrosModelo.n_gpu_layers = 0;     //  Forzar ejecución en CPU
parametrosModelo.progress_callback = mi_progreso; //Ponemos función de progeso de carga.

 modelo_t *modelo = llama_model_load_from_file(pathModelo, parametrosModelo);   // Carga modelo.

Con el modelo cargado crearemos el contexto, Crear el espacio de «pensamiento» donde se guardarán los tokens, para disponer de historia y podamos procesar bien los TOKENs, este contexto se va llenando en un chat normal y existen varias formas de borrarlo, esto lo hablaremos más adelante cuando veamos el ejemplo Agente.

    paramContext_t parametrosContexto = llama_context_default_params();
    parametrosContexto.n_ctx = 2048;  // Tamaño contexto

    context_t *contexto = llama_init_from_model(modelo, parametrosContexto);      // Crear el contexto ligado al modelo

Con la base creada en el próximo POST hablaremos de la tokenización de de la inferencia que es la llamada al LLM para que nos de respuestas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Javier.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Hostinger.es que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver
Privacidad