Aislamiento de archivos del intérprete#

La protección de archivos del intérprete limita el código Python a los archivos del Chat actual, los datos temporales y las bibliotecas necesarias. La configura un administrador del servidor con acceso a Docker y al directorio de instalación.

Preparación del servidor#

El intérprete protegido requiere Linux con Landlock ABI 1 o posterior habilitado. La política se aplica antes de ejecutar el código y se hereda en los procesos secundarios. Si el núcleo, la arquitectura o la política de Docker no admiten la restricción, el código Python no se ejecuta.

En los núcleos con Landlock ABI 1 o 2, también se comprueba la configuración del contenedor antes de ejecutar el código. El proceso debe ejecutarse con UID 1000 y todas las capacidades de Linux deshabilitadas. El sistema de archivos raíz del contenedor y el script de inicio /opt/main.py deben montarse en modo de solo lectura. No se permiten montajes adicionales con acceso de escritura fuera de la configuración estándar de Docker. La configuración de inicio de Docker suministrada establece estas restricciones. Si una comprobación falla, el código no se ejecuta. No existe una alternativa de ejecución sin aislamiento.

Es necesario actualizar conjuntamente las imágenes aiserver y aiserver-code-interpreter y el archivo docker-compose.yml del mismo paquete de distribución. La imagen mypy debe contener las bibliotecas necesarias. Consulte las instrucciones de preparación de la imagen.

Configuración del token de servicio#

La comunicación del backend con el intérprete requiere AI_INTERPRETER_SERVICE_TOKEN de al menos 32 caracteres. El instalador y el script de actualización generan un token aleatorio en .env, conservan un valor existente y establecen los permisos del archivo en 600. Un valor existente demasiado corto provoca un error de configuración.

En una instalación manual, es necesario generar un token:

python3 -c 'import secrets; print(secrets.token_hex(32))'

Es necesario guardar el resultado como valor de AI_INTERPRETER_SERVICE_TOKEN en .env. Los servicios aiserver y aiserver-code-interpreter deben recibir el mismo valor. No envíe el token a un Chat ni lo incluya en los registros de diagnóstico.

Tras cargar el paquete de imágenes correspondiente y configurar .env, es necesario recrear ambos servicios durante una ventana de mantenimiento acordada:

docker compose up -d --no-deps --force-recreate aiserver aiserver-code-interpreter

El backend no estará disponible temporalmente durante la recreación. Reiniciar un contenedor antiguo no aplica las nuevas imágenes ni los parámetros. El puerto 3001 no se publica en el host. Las solicitudes al intérprete pasan por el backend.

Trabajo con archivos del Chat#

En un Chat, Python accede a los archivos en /sandbox. Se conservan entre solicitudes del mismo Chat. Otro Chat recibe un directorio independiente.

En el modo de intérprete, los archivos adjuntos y el contenido de las carpetas del Asistente, incluidas las subcarpetas, se transfieren al directorio del Chat actual. De forma predeterminada se procesan hasta 40 archivos por solicitud. LLM_MAX_ATTACHMENT_FILES establece el límite. Los archivos que no existen en disco se omiten. Un archivo nuevo con el mismo nombre reemplaza al anterior. En el modo de Agente, una herramienta independiente transfiere el archivo seleccionado.

La carga y descarga admiten archivos normales de hasta 100 MiB y nombres en ruso. No se entregan enlaces simbólicos, archivos especiales ni rutas fuera del directorio del Chat. Es necesario guardar los resultados directamente en /sandbox, con un nombre sin directorios anidados.

Para comprobar el funcionamiento, es necesario cargar un CSV pequeño en el modo de intérprete y solicitar el cálculo de una suma y un resultado en XLSX. El resultado debe poder descargarse. Otra solicitud en el mismo Chat debe ver el CSV. Un Chat nuevo sin cargarlo no debe verlo.

Restricciones y recuperación#

Está prohibido listar /etc, /opt y /home, así como leer /etc/passwd o scripts de servicio. Se permiten los directorios necesarios de bibliotecas y fuentes y determinadas utilidades para las importaciones. Las bibliotecas permitidas siguen siendo accesibles para el código. Su inventario y los metadatos individuales de archivos no son secretos. No incluya tokens, contraseñas ni configuración de la aplicación en la imagen mypy.

Si aparece Sandbox requires enabled Landlock ABI 1 or newer, el administrador debe comprobar la compatibilidad del núcleo con Landlock y si Docker permite sus llamadas al sistema. Si no hay compatibilidad, es necesario actualizar el entorno. Si falla la comprobación de la configuración del contenedor con ABI 1 o 2, es necesario restablecer las restricciones de la configuración de Docker suministrada.

Ante un error de autenticación, es necesario comprobar que ambos servicios reciben el mismo token y recrearlos después de cambiar .env. Si una biblioteca requiere un recurso adicional del sistema, facilite al administrador su nombre y el mensaje de error, sin contenidos de archivos ni secretos.