AnythingLLM Max Tokens: cómo corregir respuestas truncadas

Una respuesta que se corta a mitad de frase no implica necesariamente un fallo de red. Comprueba la configuración efectiva de Generic OpenAI, la razón de finalización del servidor y una prueba controlada.

Índice
AnythingLLM Max Tokens: cómo corregir respuestas truncadas

Si una respuesta larga de AnythingLLM se corta a mitad de frase, comprueba primero si Max Tokens limitó esa generación. Ampliar la ventana de contexto o el tiempo de espera del proxy no son soluciones equivalentes. Necesitas el presupuesto de salida que realmente se envió, el finish_reason del servidor y una repetición que cambie una sola variable, conservando la configuración anterior.

Elige la corrección según cómo terminó la respuesta

Que deje de aparecer texto es un síntoma, no un diagnóstico. En OpenAI Chat Completions, length indica que se alcanzó el límite de tokens especificado en la petición; stop puede señalar un final natural o una secuencia de parada configurada. tool_calls indica una llamada a una herramienta, no una respuesta final terminada. En servicios compatibles también debes contrastar el comportamiento del servidor concreto.

Evidencia disponibleQué comprobar primeroSiguiente paso
El servidor devuelve finish_reason=length y puedes verificar el presupuesto efectivoLímite de salidaMantén la entrada y modifica solo un presupuesto de salida admitido
El servidor informa explícitamente de un contexto excesivo; la misma tarea funciona con menos historial o documentos recuperadosPresión sobre el contextoReduce la entrada y comprueba la ventana real del modelo, no solo la cantidad de salida
Hay un tiempo de espera agotado, reinicio de conexión, cancelación o un flujo sin razón de finalización visibleConexión, cancelación o compatibilidad del flujoCompara las marcas de tiempo y localiza dónde terminó; un campo ausente no demuestra por sí solo un fallo de red
Llega stop, pero falta una sección o un elemento numeradoInstrucciones, secuencias de parada y contenidoExamina las omisiones: terminar normalmente no equivale a completar la tarea

El presupuesto de salida limita cuánto puede generar una petición. La ventana de contexto se refiere al contexto que el modelo puede manejar. El historial, las instrucciones del sistema y los pasajes recuperados pueden formar parte de la entrada: el adaptador Generic OpenAI de AnythingLLM reúne esos componentes. Por eso una pregunta corta puede producir una petición grande, y escribir una ventana mayor en la interfaz no amplía la capacidad del modelo del servidor.

Un usuario del issue #6703 contó que investigó los tiempos de espera del proxy inverso y de WebSocket antes de encontrar un límite de salida. Es un testimonio individual que respalda el orden de comprobación, no una prueba de que tu instalación tenga la misma causa.

Guarda la configuración e identifica el modelo efectivo

Anota el estado inicial antes de cambiarlo. Registra la versión de AnythingLLM, si usas Desktop o una instalación propia, el proveedor global, el proveedor y modelo seleccionados en el espacio de trabajo y el chat, si interviene un agente y los ajustes de contexto y salida. Oculta las claves en las capturas. No borres el espacio de trabajo original, la conversación ni los documentos indexados para hacer esta prueba.

Abre la configuración del proveedor LLM en Settings y confirma que la prueba utiliza realmente Generic OpenAI. Su documentación oficial exige compatibilidad tanto en las funciones de la API como en las respuestas de inferencia. Si la petición pasa por otro proveedor, cambiar Generic OpenAI no configura esa otra ruta.

El código oficial de la interfaz consultado el 2026-10-16 muestra estos campos:

CampoQué verificar
Base URL, API Key, Selected ModelLa dirección que ya funcionaba, su clave y el identificador exacto del modelo; no lo deduzcas del nombre mostrado
Model context windowLa capacidad de contexto configurada, no el presupuesto de la respuesta
Max TokensEl presupuesto de generación, que debes revisar por separado

Guarda los cambios y vuelve a abrir los ajustes para comprobar que persisten. Cuando tengas acceso autorizado al registro de peticiones, verifica también el model real y el campo del límite de salida. Una captura demuestra qué mostraba la interfaz, no qué recibió el servidor. Comprueba por separado el chat normal y los agentes: las notas de Desktop v1.16.2 incluyen una corrección de Generic OpenAI que ignoraba max tokens en flujos de agentes.

Si ya utilizas BetterToken, contrasta en este paso la dirección, clave y modelo con sus instrucciones de Chat Completions; es una referencia de configuración, no una garantía de compatibilidad con todas las funciones de AnythingLLM ni de eliminación de límites.

Distingue el valor 0, el nombre del parámetro y la versión

0 no significa salida ilimitada. Las notas de Desktop v1.17.0 indican que Generic OpenAI permite usar 0 para omitir max_tokens en la petición. Entonces se aplican los valores predeterminados y los límites del servidor. Para diagnosticar, suele ser más claro usar un presupuesto positivo explícito que el modelo admita.

En el adaptador consultado el 2026-10-16, la salida toma su valor de GENERIC_OPEN_AI_MAX_TOKENS, y la ventana de GENERIC_OPEN_AI_MODEL_TOKEN_LIMIT. El campo de salida predeterminado es max_tokens; GENERIC_OPEN_AI_MODEL_MAX_TOKEN_KEY permite elegir otro nombre. Esto describe el código consultado, no garantiza que todas las versiones instaladas ofrezcan los mismos controles.

No cambies indiscriminadamente los nombres de los parámetros de servicios compatibles. La referencia actual de OpenAI define max_completion_tokens, cuyo presupuesto incluye tokens de salida visible y de razonamiento. Por tanto, poco texto visible no demuestra que quede presupuesto. Comprueba qué campo aceptan tu servidor y modelo y modifica la opción solo si tu versión la admite.

En Desktop utiliza la interfaz, no edites .env a partir de un ejemplo aislado: la guía de configuración reserva esas instrucciones a instalaciones propias o Docker. v1.17.0 también cambió el guardado de los ajustes del espacio de trabajo. Verifica la persistencia volviendo a abrirlos, en vez de buscar el mismo botón en todas las versiones.

Obtén finish_reason y el consumo del servidor

Prioriza la respuesta de la API del modelo a AnythingLLM. En Chat Completions sin flujo, inspecciona choices[0].finish_reason y el usage devuelto. En streaming, busca el fragmento que contiene la razón de finalización y comprueba si llegó la secuencia de terminación completa del servidor. Un valor vacío en el primer fragmento no es el estado final. Consulta las definiciones oficiales.

En la interfaz web, abre Network en las herramientas del navegador, conserva el registro y reproduce el problema una vez. Anota la hora, el estado y la respuesta de la petición del chat. Eso captura el tramo navegador–AnythingLLM, no necesariamente la respuesta original del servicio del modelo.

El manejador de Generic OpenAI consultado el 2026-10-16 transforma una razón de finalización no vacía en un mensaje propio de AnythingLLM con close: true, sin trasladar la razón intacta a la interfaz. Si el proveedor no informa del consumo, el código también dispone de una estimación mediante el recuento de fragmentos de texto. Ver el chat terminado y un número de tokens no demuestra ni integridad del contenido ni un límite alcanzado con exactitud.

Obtén la razón original y el consumo en los registros o detalles de petición del servicio a los que tengas permiso de acceso. Si no puedes, proporciona la hora y el identificador al responsable de la instalación. Las notas de Desktop v1.16.2 describen el acceso a registros y almacenamiento desde la etiqueta de versión situada arriba; encontrar esa carpeta no garantiza que la versión registre el campo original de finalización.

El consumo final puede faltar en streaming: OpenAI advierte que una interrupción o cancelación puede impedir recibir el último fragmento de usage. Anótalo como no disponible, no como cero, y no uses una estimación de la aplicación como dato de facturación.

Compara respuestas cortas y largas conservando los ajustes

Fija primero la ruta de la petición y varía después la longitud solicitada. Usa un espacio de prueba sin documentos de la base de conocimiento. Selecciona el mismo proveedor y modelo y mantén las instrucciones del sistema, temperatura, presupuesto y demás ajustes. Abre un chat vacío para cada prueba, evitando que la segunda herede la primera. Empieza con chat normal, sin agentes ni herramientas.

Prueba corta A:

Enumera 3 recomendaciones para gestionar la documentación de un proyecto. Escribe 2–3 frases por recomendación. Al terminar, escribe [END] en una línea aparte.

Prueba larga B:

Enumera 20 recomendaciones para gestionar la documentación de un proyecto. Escribe 2–3 frases por recomendación. Al terminar, escribe [END] en una línea aparte.

Envía el mensaje y deja que termine la generación sin pulsar detener ni recargar. Si se agota el tiempo o se corta la conexión, anota cuándo ocurre en lugar de repetir sin pausa. Copia las respuestas mostradas completas en A.txt y B.txt. Registra además hora, modelo, presupuesto efectivo, razón de finalización, si usage procede del proveedor y si aparecen el último número y [END]. Estas cifras son requisitos de la prueba, no límites del modelo ni longitudes garantizadas.

Que A esté completa y B no solo muestra un problema en el caso de salida larga; todavía no demuestra que Max Tokens sea la causa. Si B devuelve length, conserva exactamente su instrucción y todos los demás ajustes. Aumenta solo el presupuesto a un valor explícito permitido por el servidor y ejecuta C en un chat vacío. Guarda C.txt. Los 20 elementos completos, la marca final y una terminación distinta de length respaldan que el cambio ayudó en este caso.

Si B ya termina, no eleves el presupuesto sin necesidad. Compara la misma tarea real en la conversación original y en una vacía, manteniendo la salida fija. Investiga el contexto cuando el fallo aparezca con el historial o los documentos recuperados. Restaura los ajustes temporales innecesarios y conserva los registros iniciales. Las pruebas con una API de pago pueden generar los cargos habituales por petición.

Aplica solo la corrección respaldada por la evidencia

Límite de salida confirmado: cambia el presupuesto y verifica la petición

Aumenta únicamente el presupuesto de la ruta realmente utilizada, dentro de lo que admite el modelo. Si cambia la interfaz pero no la petición, revisa proveedor, guardado, versión y diferencias entre chat y agente. Ampliar el contexto no arregla un ajuste de salida que no llegó al servidor.

Contexto excesivo: reduce la entrada manteniendo tarea y presupuesto

Repite primero la misma tarea larga en un chat vacío. Después reduce por separado los fragmentos recuperados o el historial innecesario. Si el servidor informa explícitamente de un límite de contexto, configura la capacidad real del modelo: escribir un número mayor no la amplía. Sin un error explícito, la mejora en un chat vacío mantiene el contexto como hipótesis pendiente de confirmar.

Conexión o streaming: localiza el tramo afectado antes de tocar tiempos

Compara los registros del navegador, AnythingLLM y la API para el mismo intervalo. Busca cancelaciones, tiempos de espera y cierres. Si la API terminó y al navegador solo llegó una parte, revisa transporte intermedio y representación del texto. Si falló la API, atiende primero su error. Cambia el tiempo de espera de un tramo únicamente cuando el registro lo señale.

En instalaciones propias o Docker puedes probar el flujo por separado. La configuración oficial ofrece GENERIC_OPENAI_STREAMING_DISABLED="true", que afecta solo a Generic OpenAI; después del cambio reinicia el servicio o contenedor correspondiente. Mantén lo demás igual y repite la instrucción larga. Luego restaura el valor anterior y reinicia. Que funcione sin streaming limita la investigación a sus rutas relacionadas, pero no demuestra que el proxy sea culpable. No sigas esta edición de .env en Desktop.

Confirma la corrección y prepara un informe útil si sigue fallando

Una respuesta más larga no basta. Verifica todas las secciones o números, la última frase completa y la marca final. Contrasta la razón original de finalización y los registros de conexión para comprobar que no se repite el corte. Ni stop ni [END] sustituyen revisar el contenido. Después de la prueba simplificada, repite también la tarea real que fallaba.

Si continúa, entrega al responsable la versión y despliegue, chat normal o agente, identificadores del proveedor y modelo, ajustes sin secretos, una instrucción mínima, diferencias A/B/C, horas y la razón original que hayas obtenido. Elimina claves, cabeceras de autorización y documentos privados; marca los campos ausentes como no disponibles. Así se investiga una petición concreta, en lugar de volver a modificar el proxy por conjeturas.

¿Quieres optimizar tu flujo de trabajo con LLM?

Conecta modelos mediante una API, gestiona claves y controla el gasto en IA.

Empezar gratis