Odoo RAG: un asistente de documentación que puedo medir
Un asistente que responde solo desde la documentación de Odoo 19 y mis notas de migración, cita sus fuentes y lo dice cuando no sabe. Lo que más me importa es la evaluación: cada cambio en la búsqueda se mide en vez de suponerse.
Cómo funciona
- Pregunta
- →
- Traducción si está en español
- →
- Búsqueda vectorial + palabras clave
- →
- Fusión de rankings
- →
- llama3.2
- →
- Respuesta citada o NOT_IN_DOCS
Corre sobre PostgreSQL con pgvector y modelos locales de Ollama, con 341 fragmentos de 14 documentos. No usa claves de API ni tiene costo por consulta. A cambio es más lento: una mediana de unos 20 segundos por respuesta en un notebook.
$ uv run python -m odoo_rag.ask "¿Cómo ejecuto solo algunos tests desde la línea de comandos?"Para ejecutar solo algunos tests desde la línea de comandos, puedes utilizarel comando `odoo-bin --test-tags` con los tags correspondientes.$ odoo-bin --test-tags '/sale,-slow'[2] developer_reference_backend_testing.rst | Testing Python code > Test selection > Invocation[3] developer_reference_backend_testing.rst | Testing Python code > Test selection > Examples$ uv run python -m odoo_rag.ask "What is the capital of France?"NOT_IN_DOCSRepetición de una ejecución real, acortada. La primera pregunta está en español y la documentación en inglés. La segunda está fuera de alcance, así que el asistente se niega a responder.
Las cifras
Comparé cuatro modos de búsqueda con 45 preguntas escritas a mano, 35 en inglés y 10 en español. Recall@5 indica con qué frecuencia el pasaje correcto aparece entre los cinco primeros resultados.
Lo sorprendente fue de dónde salió la mejora. La búsqueda híbrida por sí sola no le ganó a la de palabras clave en Recall@5. Traducir la pregunta sí: el español subió de 50 % a 90 %, y el inglés se mantuvo en 80 %.
Con 20 preguntas dentro de alcance y 8 fuera, el 90 % de las respuestas incluyó los términos esperados, el 80 % trajo citas válidas, ninguna se rechazó por error y se rechazaron 7 de las 8 fuera de alcance.
En qué sigue fallando
- Una respuesta incorrecta en una pregunta clave. Si se le pregunta cómo evitar que un archivo de datos sobrescriba registros editados por usuarios, responde
forcecreate. Lo correcto esnoupdate. - Un rechazo que debió hacer. Respondió una pregunta sobre el Mundial de 2022.
- La evaluación también tiene límites. Escribí las preguntas sobre este mismo corpus, así que las cifras comparan modos y no predicen el resultado en otros casos. La métrica de citas revisa que el fragmento citado exista, no que respalde lo que se afirma.
Ambas fallas quedan registradas en el archivo de resultados, así que cualquier cambio futuro tiene que demostrar que las corrige.