Wiki de LLM según Karpathy

Hola, todos.
¿Conocéis ese momento… leéis una hoja seca… una sola página y luego en vuestra mente se desarrolla algo así como si estuvierais mirando a Andrómeda a través de un telescopio y se desplegara la vastedad del universo.
Así me pasó con una información sobre LLM Wiki según Karpathy.

¿Quién diablos es este Karpathy?

Vaya, parece un chico brillante. De hecho, describió más o menos en un boceto cómo podemos dividir y organizar la información para que en el futuro se conserve, evalúe y utilice:

Mejor conocido como LLM Wiki.

Los principios básicos, desde mi punto de vista:

  1. Los datos /raw se conservan, intactos, solo de lectura, quién sabe qué pasará en 20 años.

  2. Luego, en una segunda capa, la representación actual, aquí también texto puro como archivo md

  3. En la tercera capa, la edición, el procesamiento y la evaluación de la IA

De alguna manera, esto me ha encendido. En mi familia aún hay una bisabuela, aún lo suficientemente ágil para usar un grabador de voz.

Pero el bisnieto de cinco años también está aquí, las historias antiguas, las experiencias y las recetas y los documentos desaparecerán, con casi total seguridad, en los próximos 10 años.

Luego añadimos un poco de interés por mi parte y ya empieza: necesitamos un wiki propio para nuestra familia, exactamente según estos principios. La voz de la bisabuela debe conservarse, una IA debe evaluar los datos, generar un wiki y responder preguntas, si es posible, con la voz de la bisabuela.

Precisamente esto es lo que quiero presentaros aquí en un orden suelto:

Un modelo de trabajo, hardware más simple y económico, tardará más y a veces la IA alucina o inventa cosas, pero vamos allá:

Condición:
Todo local, sin internet, sin registro, sin token de API, a nadie le debe importar lo que uno de los narradores tenga que decir.
Hardware: Como modelo de trabajo, el hardware existente debe poder usarse a cambio de tiempo, por lo que el miniordenador puede trabajar toda la noche. Yo me iré a dormir.
Al final no solo debe crearse un wiki, sino que las preguntas planteadas, por ejemplo: « Cuéntame una historia de mi abuela con la voz de la abuela » deben / deben ser posibles.

Paso 1:

Mini PC, sistema Fedora, 8 GB de memoria.
Sin CPU, sin GPU RAM… Cosas innecesarias para los profesionales :wink: :wink: :joy:

Paso 2:

Necesitamos un Ollama, aquí en el ejemplo para Fedora, pero al mismo tiempo con la dificultad del conmutador virtual de QNAP (todo en la misma red):

============================================================

2/3: Ollama (servidor de IA)

Ejecuta los modelos de lenguaje y el modelo de incrustación.

Se inicia en segundo lugar.

============================================================

services:
test-ollama:
image: docker.io/ollama/ollama:latest

# Este nombre se utilizará más tarde en AnythingLLM como dirección:
# http://test-ollama:11434
container_name: test-ollama

restart: unless-stopped
user: "root"

ports:
  # Accesible desde el exterior, por ejemplo, para otros dispositivos en la red doméstica.
  # En Fedora, también liberar en el firewall:
  #   sudo firewall-cmd --permanent --add-port=11434/tcp
  #   sudo firewall-cmd --reload
  - "11434:11434"

volumes:
  # Los modelos descargados están aquí y se conservan en
  # reinicios. ":Z" debido a SELinux.
  - /srv/ki/ollama:/root/.ollama:Z

environment:
  # Tamaño de la ventana de texto por solicitud. Ollama usa de lo contrario un
  # valor estándar pequeño. 8192 es un compromiso para 8 GB de RAM,
  # un valor más grande necesita significativamente más memoria.
  # Controlar después del inicio: podman exec -it test-ollama ollama ps
  - OLLAMA_CONTEXT_LENGTH=8192

networks:
  - my-ki-netz

networks:
my-ki-netz:
external: true

En Ollama, descargáis vuestro modelo adecuado para la memoria. Con 8 GB de RAM podéis esperar: tiempo de respuesta largo y muchas alucinaciones :joy:

Paso 3: Luego, por supuesto, necesitaréis un Podman/Docker para mostrar el wiki:

============================================================

Wiki-Viewer (SilverBullet)

Muestra las páginas de Markdown del wiki en el navegador, para que

la familia no tenga que instalar nada. Solo lectura.

Llamada en la red local:  http://:3000

Abrir firewall en Fedora:

firewall-cmd --permanent --add-port=3000/tcp

firewall-cmd --reload

Nota: SilverBullet está diseñado para HTTPS. A través de HTTP

puede que la visualización funcione solo de manera limitada. Esto se

muestra primero en una prueba en el navegador.

============================================================

services:
wiki-viewer-thomas:
# Nombre completo de la imagen con el registro, de lo contrario, Podman pregunta.
image: 

container_name: wiki-viewer-thomas
restart: unless-stopped

ports:
  # Izquierda: puerto en el servidor, derecha: puerto en el contenedor.
  # Para un segundo wiki (por ejemplo, marlis) una copia de este
  # archivo con otro container_name y puerto, por ejemplo "3001:3000".
  - "3000:3000"

volumes:
  # Solo la carpeta wiki/ se muestra, NO raw/ (allí están
  # los textos originales sin revisar).
  # ":z" (pequeña) en lugar de ":Z": La carpeta también es utilizada por wiki.py y
  # más tarde posiblemente por un contenedor de mantenimiento. Con ":Z"
  # (mayúscula) SELinux se lo daría exclusivamente a este único contenedor.
  - /srv/ki/llm-wiki/rueger/wiki:/space:z

environment:
  # Acceso para la familia como nombre de usuario:contraseña.
  # POR FAVOR CAMBIAR. No elija la contraseña con dos puntos ni
  # espacios.
  - SB_USER=familia:mannheim-2007

  # Protección de escritura: las páginas solo se pueden ver en el navegador,
  # no cambiar. Solo son mantenidas por wiki.py.
  - SB_READ_ONLY=true

  - SB_INDEX_PAGE=web/index

… y qué obtienen a cambio:

Una puerta de nevera, llena de imanes y notas adhesivas:

En la parte superior, los botones redondos son « imanes » con enlaces a las personas.
Debajo, una serie de « notas adhesivas » con enlaces a
Audio: lista de todas las grabaciones de audio incluidas.
Personas: lista de todas las personas generadas por la IA
Lugares: lo mismo, de la IA, todos los lugares
Eventos: lo mismo, IA, todos los eventos encontrados
Historias: todas las historias
Recetas: recetas de cocina de la abuela
Fuentes: Será reemplazado con documentos (acta de matrimonio, etc. etc.)
Debajo:
Enlace a un formulario de entrada, a través del cual se pueden hacer preguntas de texto a la IA, responde en función de su modelo, RAM y tiempo, generalmente de manera adecuada :wink:

En la parte inferior de nuestra puerta de nevera, un poco de ayuda y apoyo:

Próximamente: Todavía debe ingresarse manualmente cuando se encuentre una etiqueta en el wiki, luego aparece aquí en el mes de la llamada, es decir: Si en noviembre alguien abre el wiki, recibe todos los eventos mencionados para el mes de noviembre, desde el día de la muerte hasta el día de la boda.
Debajo, enlaces para
Ayuda
Datos
Administración.

El camino es básicamente siempre el mismo, los datos van a /raw. Allí, la IA recoge los nuevos archivos, los procesa y genera el wiki.

Todo con un solo script… pero eso viene después.

Como siempre: sugerencias, indicaciones, complementos bienvenidos.
Saludos
Tom

Oops, falta la sección de imagen en el YAML para el Visor de Wiki:

services:
wiki-viewer-thomas:
# Nombre completo de la imagen con el registro, de lo contrario Podman pregunta.
image: Package silverbullet · GitHub
container_name: wiki-viewer-thomas
restart: unless-stopped