Skip to content

[T19] Primera tool tipada: search_papers() #7

Description

@johnma96

Objetivo

Convertir search_papers en una tool tipada que el agente pueda decidir invocar,
y agregar el nodo de tool-calling al grafo de T18.

Contexto

infrastructure/data/arxiv.py ya tiene search_papers(query, max_results)
funcionando. Hoy solo se llama desde el pipeline de ingesta offline. Como tool,
el agente puede invocarla en tiempo de consulta — primer paso hacia responder
sobre temas que no están en el corpus indexado.

Esto ataca directamente el comportamiento observado el 12/08: el bot dice "no
tengo contexto" cuando la pregunta cae fuera de los papers indexados, porque el
corpus tiene solo 5 papers de "LLM agents reasoning".

Criterios de aceptación

  • Esquema de input de la tool definido con Pydantic (query, max_results con
    default y límite superior)
  • Tool registrada con el decorador @tool de LangGraph/LangChain, con
    docstring que el LLM pueda usar para decidir cuándo invocarla
  • Nodo de tool-calling agregado al grafo, con conditional edge que decida
    entre responder directo o llamar la tool
  • El agente invoca la tool cuando la recuperación local devuelve resultados
    pobres, y no la invoca cuando el contexto local alcanza
  • Test unitario del esquema de input (validación de límites)
  • Test del grafo verificando que la conditional edge enruta correctamente en
    ambos casos, con LLM mockeado
  • Documentado en learnings.md qué criterio usa el agente para decidir

Capas afectadas

  • application/agents/research_agent/tools.py — nuevo, definición de tools
  • application/agents/research_agent/ — el grafo gana un nodo y una conditional
    edge
  • infrastructure/data/arxiv.py — sin cambios, se reusa

Decisiones a documentar

¿Qué hace el agente con un paper de arXiv que no está indexado? La tool
devuelve metadata y abstract, no texto completo chunkeado. Opciones: responder
solo con el abstract (rápido, respuesta más pobre), o disparar ingesta completa
(lento, el usuario espera). Para V2 la primera; la segunda es V6 módulo D. Dejar
registrada la limitación.

Criterio de "recuperación pobre". Hace falta un umbral. Puede ser número de
documentos recuperados, score mínimo de RRF, o una decisión del LLM. Elegir y
justificar.

Objetivo de aprendizaje

Tool calling: cómo el LLM decide invocar una tool a partir del docstring y el
esquema, y cómo el resultado vuelve al estado del grafo. Entender el ReAct loop
en la implementación de LangGraph.

Fuera de alcance

Las otras cuatro tools (T20). Ingesta reactiva completa.

Estimación

4h

Depende de

T18.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions