Estoy intentando rellenar los últimos 90 días. Rellenó con éxito aproximadamente 500 de 2000 temas, pero ahora el progreso está estancado porque sigue procesando el mismo tema cada vez que se ejecuta el trabajo (cada 5 minutos). No tengo idea de por qué: el tema ya tiene un resumen válido y no tiene nuevas publicaciones en los últimos 12 días. La tabla AI Audit Logs muestra que cada solicitud es exitosa. El estado de Sidekiq está OK. Nada relevante en /logs. ¿Cómo depuro esto?
SELECT request_tokens,
response_tokens,
raw_response_payload,
topic_id,
created_at AS summary_created_at,
language_model
FROM ai_api_audit_logs
WHERE raw_request_payload LIKE '%Franklin Lexington%'
ORDER BY created_at DESC
LIMIT 40
Todas las cargas útiles de respuesta sin procesar parecen válidas. Cada una es ligeramente diferente como se esperaba. Aquí hay un ejemplo (he redactado la mayor parte del texto del contenido):
{
"id": "msg_016C2dHZik2Miwe16pRHFe9z",
"type": "message",
"role": "assistant",
"model": "claude-3-5-sonnet-20241022",
"content": [
{
"type": "text",
"text": "El Franklin Lexington Private Markets Fund (FLEX) es un nuevo fondo secundario de capital privado... [REDACTED]"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 13848,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"output_tokens": 416
}
}
No sé si esto es una pista, pero ¿el 103 significa que cree que solo ha resumido hasta la publicación 103, y hay 108 publicaciones, por lo que necesita un nuevo resumen?
-- [params]
-- integer :summary_type = 0
-- integer :max_age_days = 30
-- integer :min_word_count = 100
WITH topic_candidates AS (
SELECT
t.id as topic_id,
t.title,
t.created_at,
t.word_count,
t.highest_post_number,
t.last_posted_at,
ais.id as summary_id,
ais.content_range,
ais.created_at as summary_created_at,
UPPER(ais.content_range) as content_range_upper
FROM topics t
LEFT OUTER JOIN ai_summaries ais ON
t.id = ais.target_id AND
ais.target_type = 'Topic' AND
ais.summary_type = :summary_type
WHERE
-- Umbral de recuento de palabras
t.word_count >= :min_word_count
-- Restricción de edad
AND t.updated_at > CURRENT_TIMESTAMP - (:max_age_days || ' DAYS')::INTERVAL
-- O no existe resumen O el resumen necesita actualizarse
AND (
ais.id IS NULL OR
(
UPPER(ais.content_range) < t.highest_post_number + 1
AND ais.created_at < (CURRENT_TIMESTAMP - INTERVAL '5 minutes')
)
)
)
SELECT
topic_id,
title,
word_count,
highest_post_number,
created_at,
last_posted_at,
summary_id,
content_range,
summary_created_at,
content_range_upper
FROM topic_candidates
ORDER BY summary_created_at DESC NULLS FIRST, last_posted_at DESC
Hay 5 publicaciones ocultas o eliminadas en este tema. 108-103=5. ¿Es posible que no esté manejando correctamente las publicaciones ocultas y eliminadas? Sí, 108 es la publicación más alta, pero solo se pasan 103, por lo que continuamente piensa que hay 5 publicaciones nuevas que resumir.
Tengo otro tema que también sigue regenerando el resumen. Ese tema no tiene publicaciones ocultas ni eliminadas, pero está fijado, lo que crea una publicación “este tema se fijó globalmente…”. Entonces, la publicación máxima es 8, pero ¿esa última publicación realmente no se pasa?
best_replies no garantiza que incluya la última publicación pública de un tema. Deberíamos agregar la última publicación incondicionalmente incluso al elegir best_replies.
Gracias por investigarlo. Y solo para aclarar el impacto, no se trata solo de la ineficiencia de regenerar el mismo resumen repetidamente, sino que detiene por completo el backfill. Digamos que tiene el backfill configurado en 24 temas por hora. Cada 5 minutos intenta 2 temas. Eventualmente, ambos temas tienen un problema (temas eliminados, un tema fijado o algo más) y sigue intentando los mismos 2 temas cada 5 minutos. Ni siquiera intenta ningún otro tema.
¿Necesita también .where("NOT deleted")? No entiendo la diferencia entre oculto y eliminado, pero tengo ambos ocultos y eliminados en mi tema problemático.
Actualmente estoy investigando esto e intentando averiguar qué está pasando. Lo que señaló @sam es cierto: que best_replies no incluya la última publicación podría hacer que el trabajo se detenga. Estoy a punto de terminar una solución para eso e introducir un mecanismo de seguridad para convertir el trabajo en una operación nula y registrar un error si hay un error en la consulta. Esto no es ideal y no debería suceder, pero es mejor que regenerar el mismo resumen una y otra vez.
Por otro lado, estoy analizando el ejemplo de Franklin Lexington... que compartiste, que sospecho que es un problema diferente porque:
Ya tiene un resumen (149).
UPPER(ais.content_range) < t.highest_post_number + 1 debería ser FALSE. UPPER debería devolver 109, que es igual a highest_post_number + 1.
El final del intervalo content_range necesitaría ser menor para que el trabajo se detenga debido a eso. En realidad, no nos importan las publicaciones ocultas o eliminadas al decidir si un resumen está desactualizado; solo queremos evitar resumir esas.
¿Tienes ai_summary_gists_enabled habilitado? Si es así, ¿puedes confirmar que tienes dos resúmenes para ese tema, uno con el tipo 0 y otro con el tipo 1? Además, en la consulta ai_api_audit_logs que compartiste, ¿cuál es el valor en la columna feature_name?
Ya no está regenerando resúmenes para temas que ya tenían uno, lo cual es bueno.
Pero no está resumiendo muchos temas, incluso cuando hay nuevas publicaciones, debido a:
Por lo tanto, backfill piensa que ha terminado, pero tal vez el 75% de los temas más recientes no tienen un resumen, a pesar de que tienen nuevas publicaciones, simplemente porque fueron creados hace más de 90 días. Estoy seguro de que esa no es la intención. Por favor, cámbialo o ayúdame a entender por qué.
He bifurcado el repositorio de IA para poder cambiar created_at por updated_at y seguir adelante. Me complace informar que resumió con éxito los más de 400 temas que esperaba que resumiera. Algunos fallaron en el primer intento de relleno, posiblemente porque estábamos por encima de la cuota por minuto, pero los resumió con éxito en el segundo intento.
En particular, el tema de Franklin Lexington ahora tiene un resumen.
Nuevamente, el relleno no funcionará bien todavía para otros, debido al problema de created_at.
Si la diferencia son ediciones, votaría por regenerar en las ediciones. Tenemos una wiki en la primera publicación de cada tema que los miembros editan con información crítica que podría afectar el resumen.
Pero si no eliges hacer eso, puedo seguir ejecutando mi fork.
El trabajo de relleno ahora usa last_posted_at en lugar de created_at. También hice cambios en la lógica para determinar si un resumen está desactualizado al verificar si el last_revised_at de alguna de las publicaciones es más nuevo que el resumen, para tener en cuenta las ediciones.