Un chatbot genérico no conoce sus productos, precios, procedimientos ni documentos internos, y pegarlos en un servicio de IA público a menudo no es aceptable. Con la generación aumentada por recuperación (RAG), el asistente busca primero en sus propios documentos y responde a partir de lo que encuentra, citando las fuentes. Esta guía configura AnythingLLM con un modelo local servido por Ollama en su propio servidor: instalación, conexión de los modelos de lenguaje y de embeddings, carga de documentos en espacios de trabajo, configuración para que las respuestas se ciñan a sus documentos, alta de usuarios y publicación por HTTPS. Para planificar un despliegue mayor (región, base de datos vectorial, protección de datos), consulte cómo crear una base de conocimiento privada de soporte con IA en un servidor dedicado.
RAG utiliza dos modelos: un modelo de embeddings, que convierte los fragmentos de los documentos y las preguntas en vectores para la búsqueda, y un modelo de chat, que redacta la respuesta. Ambos se ejecutan en Ollama.
ollama pull nomic-embed-text # embedding model (small and fast on CPU)
ollama pull qwen2.5:7b # chat model; good with Chinese and English
ollama list
# AnythingLLM runs in a container, so Ollama must accept connections from Docker
# (OLLAMA_HOST=0.0.0.0 plus the firewall rules from the Ollama guide). Check:
curl -s http://172.17.0.1:11434/api/tags | head -c 300; echo
Un servidor con 8 o más núcleos y 16 GB de RAM ejecuta esta combinación con holgura para un equipo pequeño. Generar los embeddings de los documentos ocupa la CPU durante un rato cuando sube muchos archivos; las respuestas usan el modelo de chat.
AnythingLLM se ejecuta en Docker (consulte nuestra guía de instalación de Docker).
export STORAGE_LOCATION=/opt/anythingllm
mkdir -p $STORAGE_LOCATION && touch "$STORAGE_LOCATION/.env"
chown -R 1000:1000 $STORAGE_LOCATION # the container runs as user ID 1000
docker run -d --name anythingllm --restart always \
-p 127.0.0.1:3002:3001 \
--cap-add SYS_ADMIN \
--add-host=host.docker.internal:host-gateway \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm
docker logs -f anythingllm # wait until the server reports it is listening
La interfaz web escucha en el puerto 3001 dentro del contenedor; se asigna a 127.0.0.1:3002 en el host para que solo sea accesible a través del proxy HTTPS del paso 3.
Apunte un subdominio como kb.example.com al servidor, obtenga un certificado (consulte SSL gratuito con Certbot o acme.sh) y configure el proxy hacia el contenedor:
server {
listen 443 ssl;
http2 on;
server_name kb.example.com;
ssl_certificate /etc/letsencrypt/live/kb.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kb.example.com/privkey.pem;
client_max_body_size 100m; # document uploads
location / {
proxy_pass http://127.0.0.1:3002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 600s;
}
}
Abra https://kb.example.com y complete la configuración inicial (más adelante puede cambiarlo todo en el menú de configuración Settings):
http://host.docker.internal:11434, modelo de chat qwen2.5:7b.nomic-embed-text (o el embedder integrado de AnythingLLM).Antes de subir nada, active el modo multiusuario en la configuración de seguridad y establezca la contraseña de administrador. Después, cree una cuenta para cada compañero con el rol Default (predeterminado), de modo que pueda chatear con los espacios de trabajo que usted le asigne, pero no pueda cambiar la configuración ni ver otros espacios de trabajo.
Un espacio de trabajo (workspace) es una base de conocimiento independiente con sus propios documentos y ajustes, por ejemplo "Catálogo de productos", "Procedimientos de soporte" o "Políticas de RR. HH.".
Los documentos limpios y basados en texto dan los mejores resultados. Los PDF escaneados necesitan pasar antes por OCR; los documentos largos con encabezados claros son más fáciles de buscar que un único archivo enorme con todo.
En la configuración del espacio de trabajo:
Cada respuesta muestra citas; haga clic en ellas para comprobar qué fragmento del documento se utilizó.
Cuando cambie un documento, elimine la versión antigua del espacio de trabajo y suba la nueva, para que no se citen precios o procedimientos obsoletos. Haga copias de seguridad de /opt/anythingllm con regularidad; contiene los documentos, los vectores, los usuarios y el historial de chats. AnythingLLM también ofrece una API y un widget de chat integrable por si más adelante quiere usar un espacio de trabajo desde su propio sitio web o sus aplicaciones.
Cambie el espacio de trabajo al modo Query, haga más estricto el prompt de sistema y revise las citas. Si nunca encuentra el fragmento correcto, divida el documento en archivos más pequeños con títulos claros o pruebe un modelo de chat más grande.
La mayor parte del tiempo se va en que el modelo de chat genere texto en la CPU. Use un modelo más pequeño para consultas rápidas, reduzca el número de fragmentos por respuesta y mantenga el modelo cargado (consulte los consejos de rendimiento de la guía de Ollama).
Sí, AnythingLLM admite muchos proveedores. Tenga en cuenta que, en ese caso, sus documentos y preguntas se envían a ese proveedor, y use solo los proveedores y regiones que permitan sus condiciones. Para material confidencial, la configuración local de esta guía mantiene todo en su servidor.
¿Sigue sin resolverlo después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya la IP del servidor, la versión del sistema operativo, la CPU y la RAM, la salida de docker logs anythingllm y el mensaje de error completo para que podamos localizar el problema más rápido.