En nuestra opinión, DeepSearch es esencialmente un gran bucle while. Dado un presupuesto máximo de tokens, alterna entre buscar, leer y pensar hasta encontrar la mejor respuesta. Una de las tareas clave del LLM es determinar qué acción tomar a continuación basándose en el estado actual de la memoria. ¿Debería continuar buscando? ¿Leer la página web? ¿O responder la pregunta directamente?
En nuestra implementación de node-deepresearch, usamos un LLM estándar (gemini-2.0-flash
) para elegir la acción. Lo llamamos "estándar" ya que el proceso de razonamiento está explícitamente delineado mediante ingeniería de prompts, y luego opera como secuencia-entrada, secuencia-salida con la acción elegida devuelta en un objeto JSON. Entonces surge una pregunta natural: ¿reemplazar este paso de decisión con un modelo dedicado de razonamiento mejoraría el rendimiento de DeepSearch?

En esta publicación, exploramos el uso de DeepSeek R1 671b, un LLM de razonamiento para reemplazar a gemini-2.0-flash
en este paso de decisión. Creemos que las habilidades de razonamiento de R1 ayudarán a resolver los problemas complejos en la búsqueda web y el análisis de resultados.
Para probar este concepto, lo pusimos a prueba en un ejemplo práctico: planificar un itinerario completo de vacaciones de tres días, y luego evaluar su desempeño. Los agentes que realizan tareas de búsqueda profunda probablemente encuentren los mismos tipos de problemas que los humanos, así que en nuestra tarea de vacaciones el modelo puede encontrar algunos de los siguientes problemas:
- Vacíos de conocimiento (información dependiente de otra información): Por ejemplo, quieres visitar la Torre Eiffel, pero no sabes si está abierta en días festivos. Necesitas averiguar tanto el horario de la torre en días festivos como las fechas de los días festivos franceses.
- Información incorrecta o desactualizada: Un blog de viajes de 2020 sugiere que un restaurante específico en Roma está abierto los domingos, pero al llegar, descubres que ha cambiado sus horarios y ahora está cerrado los domingos.
- Información contradictoria: Un sitio web de viajes afirma que un hotel particular en Nueva York ofrece desayuno gratuito, mientras que otro sitio indica que el desayuno no está incluido en la tarifa de la habitación.
- Información ambigua: Una publicación en un foro de viajes menciona "una gran playa cerca de Barcelona" sin especificar qué playa o dar direcciones claras, lo que dificulta localizar la ubicación exacta.
R1 puede desglosar tareas complejas en pasos accionables, identificar vacíos e inconsistencias, y navegar obstáculos como sitios web bloqueados y muros de suscripción. Tiene las capacidades de razonamiento para recopilar el conocimiento necesario y sintetizar una respuesta. Sin embargo, no puede planear unas vacaciones por sí solo — eso requiere buscar en la web y entender los resultados que obtiene. Tenemos que potenciarlo, colocándolo en un marco y mejorando sus capacidades, antes de que esté listo para el trabajo.
tagImplementación

Para ejecutar el notebook, necesitarás claves API gratuitas de Jina AI y OpenRouter.
Si bien R1 es el motor de nuestro agente, también agregamos algunas herramientas, un objeto de estado y, por supuesto, un prompt (bastante grande). Aquí hay una representación simplificada:

- Las herramientas pueden ser llamadas por el modelo para buscar y extraer información de la web, y los resultados se almacenan en el estado.
- El estado mantiene un registro de los resultados de las herramientas, el estado de la tarea y el conocimiento. Se almacena en el propio prompt.
- Un único prompt proporciona instrucciones, especificando la tarea y cómo abordarla, además de almacenar el estado.
Veremos cada uno de estos en más detalle más adelante en la publicación, especialmente el prompt. Pero, en resumen, el sistema funciona así:
Comenzamos con el prompt con un objeto de estado sin poblar. Mientras la tarea está en progreso (es decir, intentando producir una respuesta) el agente ejecuta el siguiente bucle hasta que produce una respuesta:
- El modelo examina la tarea y su estado desde el prompt, y razona cómo usar mejor sus herramientas para obtener una respuesta.
- El modelo produce un objeto JSON especificando su estado (
IN PROGRESS
oDONE
), actualizaciones de memoria, llamadas a herramientas y la respuesta (inicialmentenull
). - El agente llama a las herramientas de forma asíncrona y los resultados se incorporan de nuevo al prompt, así como el objeto JSON del paso 3.
- El prompt (que contiene esta nueva información) se alimenta de nuevo al modelo para ejecutar otro bucle.
Tan pronto como el modelo proporciona una respuesta en su salida, la tarea termina y se entrega la respuesta.
Ahora que tenemos una visión general de alto nivel, veamos las herramientas, el estado y el prompt en orden:
tagHerramientas
Dado que R1 no puede buscar ni extraer información de la web por sí mismo, accedemos a la API Reader de Jina para expandir sus capacidades. Esto incluye dos modos:
- Modo búsqueda: busca en la web términos relevantes y devuelve resultados del motor de búsqueda (incluyendo URLs, títulos y descripciones de cada resultado).
- Modo lectura: extrae páginas de los resultados de búsqueda y las devuelve en formato Markdown.
Debido a la ventana de contexto limitada de R1, no podemos simplemente volcar una página completa en la sección Tool Results
del prompt. Necesitamos herramientas adicionales para seleccionar solo la información más relevante antes de pasarla al modelo:
- Divisor de texto recursivo por caracteres de LangChain: Dividimos las salidas largas en segmentos con
RecursiveCharacterTextSplitter
, dividiendo recursivamente en párrafos y oraciones hasta obtener el tamaño de segmento deseado. Esto asegura que la salida sea fácilmente digerible por la limitada ventana de contexto de R1. - Jina Reranker: Reordenamos los segmentos con jina-reranker-v2-base-multilingual y combinamos los segmentos mejor clasificados en un único resultado.
Desafortunadamente, DeepSeek R1 no admite el uso de herramientas de la misma manera que o3-mini
. Por ejemplo, con o3-mini
, podríamos usar algo como lo siguiente:
def scrape_page(url: str):
"""Scrape a web page with Jina Reader"""
tools = [
{
"type": "function",
"function": {
"name": "scrape_page",
"description": "Scrape the content of a webpage",
"parameters": {
"url": {"type": "string", "description": "The URL to scrape"}
}
}
}
]
client = OpenAI()
response = client.completions.create(
model="o3-mini",
prompt=f"Scrape www.skyscanner.net/routes/gr/de/germany-to-crete.html",
tools=tools
)
Ejemplo de código o3-mini para soportar el uso de herramientas
Pero esto no es tan fácil con R1: No tiene un parámetro tools
que podamos pasar a la API, y no devolverá tool_calls
estructurados como parte de su respuesta. En pocas palabras, no fue entrenado para usar herramientas (y no las soportará pronto). Al menos, no las soporta en el sentido tradicional. Sin embargo, podemos pedirle a R1 que produzca llamadas a herramientas en formato JSON, y alimentar los resultados de las llamadas a herramientas de vuelta al modelo para analizarlos:
Debes responder con un objeto JSON válido que contenga:
```json
{
"tool_calls": [
{"tool": "search", "input": "Vuelos más baratos de Alemania a Creta mayo 2025"},
{"tool": "scrape", "input": "<https://www.skyscanner.net/routes/gr/de/germany-to-crete.html>"}
]
}
```
Llamadas a herramientas como parte del prompt de R1
Después de que el modelo genera llamadas a herramientas en la iteración n, se ejecutan las herramientas y los resultados se incrustan en la sección Tool Results
del prompt para que el modelo razone con ellos en la iteración n+1:
Tool Results:
Source 1️: search: Cheapest flights from Germany to Crete May 2025
Result:
```
Title: Affordable flights: Germany - Heraklion (Crete) (HER) | Eurowings URL Source: https://www.eurowings.com/en/booking/offers/flights-from/DE/to/GR/HER.html Description: Affordable flights from Germany to Heraklion (Crete) ✈ Eurowings brings you closer to your dream destination from as little as €89.99*. Book now and enjoy.
Title: Are you a person or a robot? URL Source: https://www.skyscanner.com/routes/fran/her/frankfurt-to-crete-heraklion.html Description: Book a one-way ticket from Frankfurt to Heraklion Airport from $78 or travel return from just $154. The prices shown are based on availability and could change ...
```
Resultados de las herramientas, mostrando resultados de búsqueda para vuelos Alemania-Creta
tagEstado
El estado mantiene un registro del estado de la tarea (Status
) y el conocimiento (Memory
) que el modelo necesita analizar y actualizar. En resumen, es la memoria de trabajo y los bancos de memoria del sistema. Esto se almacena en una sección del prompt llamada {{ workspace }}
y comienza como una pizarra en blanco:
Status: IN_PROGRESS
Memory:
... no memory blocks ..
Objeto de estado vacío
A medida que el modelo razona sobre la tarea, ejecuta herramientas y recopila resultados, el estado se puebla con bloques de memoria (derivados de la salida de las herramientas), cada uno con su propio ID asignado aleatoriamente. Para nuestro ejemplo de planificación de vacaciones, el estado podría verse así después de ejecutar una iteración del agente:
Status: IN_PROGRESS
Memory:
<nuz-032>Potential warm May destinations: Malaga (Spain), Crete (Greece), Algarve (Portugal)</nuz-032>
<xwj-969>URL to scrape for Crete hotel details: <https://www.tripadvisor.com/HotelsList-Crete-Beachfront-Cheap-Hotels-zfp13280541.html></xwj-969>
<vsc-583>URL to scrape for flight details: <https://www.expedia.com/lp/flights/fra/her/frankfurt-to-heraklion></vsc-583>
Estado poblado por DeepSeek R1
Los bloques de memoria se actualizan incluyendo una lista de memory_updates
en la respuesta JSON del modelo:
{
"memory_updates": [
{"operation": "add", "content": "Round-trip flight from Berlin to Tenerife in May 2025 ranges from €59.99 to €200 round-trip as per the Skyscanner and Iberia sources."},
{"operation": "delete", "id": "nuz-032"},
...
]
}
Actualizaciones de memoria como parte de la salida JSON de R1
- La operación
add
agrega un bloque de memoria y puede usarse para almacenar información importante como pistas, hallazgos, vacíos de información y acciones ya realizadas. - La operación
delete
elimina un bloque de memoria, permitiendo que el modelo elimine información antigua, innecesaria o falsa y mantenga un espacio de trabajo limpio.
replace
, pero encontramos que el modelo generaba grandes bloques de información (dependiendo excesivamente de replace
), y decidimos eliminar esta opción.En comparación con la emisión de llamadas a herramientas, R1 está menos familiarizado con la gestión de su propia memoria. Si bien el modelo fue específicamente entrenado para razonar problemas matemáticos complejos y tareas de programación—entrenamiento que le permite producir objetos JSON precisos y ejecutar llamadas a herramientas—no fue entrenado para gestionar estados tipo memoria (ni ningún otro modelo que conozcamos).
Almacenar información usando un estado compacto tipo memoria proporciona varias ventajas sobre almacenar toda la salida del modelo en cada ronda. Este enfoque condensa la información dentro del prompt, evitando el desbordamiento del contexto mientras mejora el enfoque del modelo en el conocimiento relevante. Lo mantenemos como JSON porque es fácil de actualizar pero el JSON se renderiza en un formato legible por humanos en el prompt mismo.
Aun así, la gestión de memoria sigue estando fuera del dominio principal de R1; necesitamos implementar múltiples instrucciones para guiar al modelo en el manejo adecuado de las operaciones de memoria. Aquí está la parte de nuestro prompt que trata con eso:
... otros contenidos del prompt ...
## Memory Block Usage
- Each memory block has a unique ID in format <abc-123>content</abc-123>
- Create separate blocks for distinct pieces of information:
* Discovered URLs (both explored and pending)
* Information gaps that need investigation
* Actions already taken (to avoid repetition)
* Promising leads for future exploration
* Key facts and findings
* Contradictions or inconsistencies found
- Keep each block focused on a single idea or piece of information
- Always cite sources when recording information from tool results
- Use IDs to track and manage your knowledge (e.g., deleting outdated information)
- Make sure to store sources (URLs) for the facts and findings you store
## Lead Management
- Since you can only make 3 tool calls per round, store promising leads for later
- Create dedicated memory blocks for URLs to scrape later
- Maintain blocks for potential search queries to explore in future rounds
- Prioritize leads based on relevance to the task
... otros contenidos del prompt ...
Instrucciones de manejo de memoria en el prompt
tagPrompt
Creamos el prompt usando el formato de plantilla Jinja. Consiste en varias secciones:
- Contexto (en este caso, la fecha actual).
- Instrucciones, que cubren cómo funciona todo y le dicen al modelo qué herramientas están disponibles.
- Estado, discutido anteriormente.
- Salidas de herramientas, de las herramientas
search
yscrape
.
{% macro format_tool_results(tool_records) %}
{% for to in tool_records %}
Source {{ loop.index }}️: {{ to.tool }}: {{ to.input }}
Result:
```
{{ to.output }}
```
{% endfor %}
{% endmacro %}
The date: `{{ current_date }}`.
You are an information analysis and exploration agent that builds solutions through systematic investigation.
## Investigation Cycle
You operate in a continuous investigation cycle:
1. Review current workspace (your memory blocks)
2. Analyze new tool results (or initial task if first round)
3. Update memory with new insights and track investigation progress
4. Decide on next tools to call based on identified leads and information gaps
5. Repeat until task completion
## Memory Structure
Your memory persists between investigation cycles and consists of:
- **Status**: Always the first line, indicates if the task is IN_PROGRESS or DONE
- **Memory**: A collection of discrete information blocks, each with a unique ID
## Memory Block Usage
- Each memory block has a unique ID in format <abc-123>content</abc-123>
- Create separate blocks for distinct pieces of information:
* Discovered URLs (both explored and pending)
* Information gaps that need investigation
* Actions already taken (to avoid repetition)
* Promising leads for future exploration
* Key facts and findings
* Contradictions or inconsistencies found
- Keep each block focused on a single idea or piece of information
- Always cite sources when recording information from tool results
- Use IDs to track and manage your knowledge (e.g., deleting outdated information)
- Make sure to store sources (URLs) for the facts and findings you store
## Lead Management
- Since you can only make 3 tool calls per round, store promising leads for later
- Create dedicated memory blocks for URLs to scrape later
- Maintain blocks for potential search queries to explore in future rounds
- Prioritize leads based on relevance to the task
## Available Tools
- **search**: Use for broad information gathering on new topics or concepts
* Example: {"tool": "search", "input": "renewable energy statistics 2023"}
- **scrape**: Use for extracting specific details from discovered URLs
* Example: {"tool": "scrape", "input": "https://example.com/energy-report"}
## Tool Usage Guidelines
- **When to use search**: For new concepts, filling knowledge gaps, or exploring new directions
- **When to use scrape**: For URLs discovered that likely contain detailed information
- **Maximum 3 tool calls per round**
- **Never repeat the exact same tool call**
- **Always record valuable information from tool results in memory blocks**
## Response Format
You must respond with a valid JSON object containing:
```json
{
"status_update": "IN_PROGRESS or DONE",
"memory_updates": [
{"operation": "add", "content": "New insight or lead to investigate"},
{"operation": "delete", "id": "abc-123"}
],
"tool_calls": [
{"tool": "search", "input": "specific search query"},
{"tool": "scrape", "input": "https://discovered-url.com"}
],
"answer": "Your final, comprehensive answer when status is DONE"
}
```
## Important Rules
- The "add" operation creates a new memory block
You do not need to specify an ID, it will be added automatically by the system.
- The "delete" operation requires the specific ID of the block to remove
- Never invent or fabricate information - only use facts from your memory or tool results
- Never make up URLs - only use URLs discovered through tool results
- CRITICAL: Any information not recorded in your memory blocks will be lost in the next round
For example, if you find a potential webpage to scrap, you must store the URL and your intention
Example: `{"operation": "add", "content": "Found relevant URL: https://... to scrape ..."}`
- Set status to "DONE" only when you have fully addressed the task
- Only include the "answer" field when status is "DONE"
Task:
```
{{ task }}
```
Current workspace:
```
{{ workspace }}
```
Tool Results:
{{ format_tool_results(tool_records) if tool_records else '... no previous tool results ...'}}
IMPORTANT: Generate a valid JSON response following the format above.
Think carefully about:
- what information do you need to preserve
- which tools to call next
- how to build your answer systematically with focused memory blocks
Prompt completo usado en nuestro sistema de búsqueda profunda
tagEvaluación
Pusimos nuestro sistema a prueba con nuestro ejemplo de planificación de vacaciones. Aquí está la tarea incorporada en el prompt:
Help me plan a 3 day holiday in Europe in May for under 2000 EUR
1. I need specific flight and hotel recommendations.
2. I want the destination to be warm.
3. I want to have a beach nearby the hotel.
I live in Germany.
Aquí está el resultado final (después de cinco iteraciones del ciclo):
**3-Day Crete Holiday Plan (Total ≈ €600-800)**
✈️ *Flights (From Frankfurt):*
- Skyscanner: €154 round trip (May 2025 dates)
Source: <https://www.skyscanner.com/routes/fran/her/frankfurt-to-crete-heraklion.html>
- Backup: Eurowings €180 round trip
🏨 *Beachfront Hotels:*
1. **Georgioupolis Beach Hotel**
- Direct beach access, bike rentals €10
- Source: <https://www.tripadvisor.com/HotelsList-Crete-Beachfront-Cheap-Hotels-zfp13280541.html>
2. **JT Apartments**
- €57/night, 9.5/10 rating, 5-min walk to beach
- Source: <https://www.booking.com/region/gr/crete.html>
3. **FNK Apartments**
- Sea views, 9.6/10 rating
💰 *Budget Breakdown:*
- Flights: €154
- Hotel (3 nights): €171-250
- Remaining: €1,600+ for meals/activities
*Note:* All hotels are <5 mins from beaches. Crete averages 25°C in May (Source: TravelSupermarket).
Resultado para la búsqueda de vacaciones, después de cinco iteraciones
Esa respuesta parece legítima. Pero, ¿lo es realmente? Después de todo, se sabe que los modelos alucinan, y con un sistema de múltiples partes móviles, es probable que algo pueda salir mal. Verifiquemos algunos detalles en la salida de R1:
tagDestino y Presupuesto total
Los cálculos para cada elemento suman correctamente (veremos si cada elemento es preciso más adelante). Después de todo, R1 fue entrenado en problemas matemáticos. El destino también es correcto; Creta es un lugar popular.
tagVuelos
Los precios de los vuelos casi suman correctamente, pero veamos dónde salieron mal las cosas. En primer lugar, aquí están los precios reales de Skyscanner de Frankfurt a Heraklion, para mayo de 2025, ida y vuelta:

¡Podemos ver que los precios están todos alrededor de los 200 EUR, y no los 154 EUR prometidos para ida y vuelta! Pero, ¿de dónde viene el error? Mirando los registros, encontramos un bloque de memoria relacionado que se agregó en la ronda 3:
{"operation": "add", "content": "Crete flight options: Eurowings €89.99* one-way ..."}
Bloque de memoria relacionado con vuelos Alemania-Creta
Este bloque parece inferirse del resultado de búsqueda adjunto:
Source 1️: search: Cheapest flights from Germany to Crete May 2025
Result:
```
... other results ...
Title: Are you a person or a robot?
URL Source: https://www.skyscanner.com/routes/fran/her/frankfurt-to-crete-heraklion.html
Description: Book a one-way ticket from Frankfurt to Heraklion Airport from $78 or travel
return from just $154. The prices shown are based on availability and could change ...
```
Resultado de búsqueda para vuelos Alemania-Creta
El modelo nunca intentó extraer esta página web para confirmar los resultados, pero probablemente no habría hecho una diferencia. Sin embargo, al menos debería haber notado que los resultados de búsqueda no incluían "mayo" como período.
tagHotel
Los hoteles son correctos, pero identificamos algunas mejoras que podrían hacerse. En primer lugar, nos gustaría que el modelo se hubiera esforzado más en encontrar los precios del Georgioupolis Beach Hotel y FNK Apartments - aunque proporciona otra información, lamentablemente faltan los precios. Para ver a qué nos referimos, aquí está la salida sin procesar de la URL extraída que se usó para generar las recomendaciones de hoteles. Solo muestra precios para el primer y último resultado, omitiendo los tres del medio:
Fuente 3️: scraping: https://www.booking.com/region/gr/crete.html
Resultado:
```
Mostrar más Mostrar menos
Moritz Alemania
* ### [JT Apartments](https://www.booking.com/hotel/gr/jt-apatments.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)
Kissamos
Desde $57 por noche
9.5 Excepcional 313 reseñas
Recomiendo encarecidamente alojarse en JT Apartments. Cuando entramos al apartamento nos encontramos con una agradable sorpresa. Todo estaba bien equipado. El vecindario es tranquilo, supermercado cerca. La playa está a un corto paseo. Es una excelente ubicación si quieres visitar las playas más hermosas de Creta. Gracias a ustedes nuestra estadía fue exactamente como la habíamos soñado :)
Mostrar más Mostrar menos
Katarzyna Polonia
Mostrar más Mostrar menos
Aitor Alemania
* ### [FNK Apartments with Sea View](https://www.booking.com/hotel/gr/f-amp-k-apartments.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)
Agia Pelagia
9.6 Excepcional 64 reseñas
Estuvimos en Creta durante una semana. Durante este tiempo, nos alojamos en FnK Apartments. Froso y Konstantinos fueron anfitriones súper amables y maravillosos para nosotros. Siempre estaban listos para ayudar si teníamos preguntas o necesidades de cualquier tipo. El apartamento en sí tiene una hermosa vista de Agia Pelagia y las bahías circundantes (e incluso el hermoso amanecer). ¡Solo podemos recomendar FnK Apartments!
Mostrar más Mostrar menos
Moritz Alemania
Mostrar más Mostrar menos
mary Estados Unidos
* ### [Artemis Hotel Apartments](https://www.booking.com/hotel/gr/artemis-hersonisos.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)
Limenas Hersonissou, Hersonissos
9.0 Maravilloso 419 reseñas
Si quieres sentirte bienvenido, ser tratado como amigos, saber que recibirás ayuda en todo, te recomendamos encarecidamente alojarte en el hotel. ¡Gracias de todo corazón a Konstantine por el trato cálido y muy personal! ¡En nuestra próxima visita a Creta, estaremos encantados de alojarnos nuevamente en el Hotel Artemis!
Mostrar más Mostrar menos
Irina Israel
Mostrar más Mostrar menos
Ann Marie Irlanda
* ### [Pinelopi Hotel](https://www.booking.com/hotel/gr/pinelopi.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)
Platanes
7.8 Bueno 198 reseñas
Excelente ubicación cerca de la playa, excelentes tabernas y también en una buena ubicación para viajar en coche. Zona tranquila, perfecta para unas maravillosas vacaciones. Habitaciones espaciosas equipadas con todo lo necesario. Excelente relación calidad-precio. La zona de la piscina era excelente y puedes relajarte allí en cualquier momento del día. El estacionamiento cerca del hotel era perfecto. Seguramente volveré al Hotel Pinelopi cuando visite Creta nuevamente.
Mostrar más Mostrar menos
Rita Rumania
Mostrar más Mostrar menos
Katarzyna Polonia
* ### [Elizabeth Suites](https://www.booking.com/hotel/gr/elizabeth-suites.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)
Kato Daratso
Desde $74 por noche
9.1 Maravilloso 86 reseñas
Tuvimos una excelente estadía que fue aún más personal gracias a Epas, el propietario, que siempre tenía una sonrisa y fue muy servicial, y el personal era encantador, especialmente Anna. Desayunamos un par de días y fueron más que abundantes. Los apartamentos estaban en una posición perfecta para playas y restaurantes. Recomendamos encarecidamente The Elizabeth Suites, hicieron nuestras primeras vacaciones en Creta 😊
Mostrar más Mostrar menos
Jean Reino Unido
```
Resultados crudos extraídos de listados de hoteles en Creta en booking.com
En segundo lugar, identificamos un problema adicional al usar Reranker con su predefinido top_n
de 5 resultados — resulta que la página extraída contenía más de cinco resultados relevantes - podríamos haber abordado esto verificando realmente la puntuación de relevancia de cada resultado, en lugar de tomar solo los cinco primeros (o la cantidad que sea) resultados. Sin embargo, la configuración ideal de reordenamiento varía según las tareas. Una mejor manera de manejar este problema sería simplemente usar la página completa extraída - lo cual lamentablemente no es posible debido a la limitada longitud de contexto de R1.
tagRendimiento General y Posibles Mejoras
El modelo comenzó bien inicialmente, pero notamos que raramente intentaba cambiar de estrategias o desarrollar planes complejos a menos que se le indicara específicamente. Si bien R1 naturalmente emplea estos enfoques para problemas de matemáticas y programación (áreas en las que fue específicamente entrenado), no aplica el mismo razonamiento a tareas de búsqueda. Si bien podríamos ajustar más el prompt (o incluso usar múltiples prompts) para abordar esta limitación, ese no era nuestro objetivo principal.
También observamos que R1 no manejaba adecuadamente la información sensible al tiempo. En resumen, si los resultados de búsqueda no mencionan explícitamente una fecha incorrecta, el modelo asume que la información es válida sin mayor verificación. Por ejemplo, al planear un vuelo para el 1 de mayo:
- Alemania a Creta $80 1 de mayo: Correcto - El modelo puede confiar en esta información.
- Alemania a Creta $80 1 de enero: Incorrecto - El modelo identifica y descarta esto apropiadamente.
- Alemania a Creta $80: Falso positivo - Cuando no se especifica fecha, el modelo no verifica la información y asume incorrectamente su validez.
Si continuáramos con este proyecto, podríamos considerar implementar varias mejoras potenciales:
- Rastrear el conteo de bloques de memoria y solicitar al modelo que resuma entradas cuando el estado se vuelve demasiado grande.
- Instruir al modelo para que agote todas las pistas antes de finalizar la exploración y responder consultas.
- Enfatizar la verificación de información sensible al tiempo.
- Asegurar que el modelo verifique dos veces los resultados extrayendo datos de las URLs devueltas por la herramienta de búsqueda.
- Probar nuestro sistema con futuros modelos de razonamiento que admitan ventanas de contexto más grandes, aunque esto requeriría una refactorización y pruebas sustanciales para adaptar el prompt a un modelo diferente.
tagConclusión
Incluso desde el lanzamiento bastante reciente de R1, el panorama ha evolucionado significativamente. Han surgido proyectos que entrenan modelos de razonamiento a costos notablemente bajos—algunos por tan solo $5. Esta democratización significa que entrenar modelos especializados es más accesible que nunca. Nuestros experimentos con R1 proporcionan una línea base útil mientras continuamos explorando cómo los LLMs enfocados en el razonamiento pueden mejorarse con herramientas para abordar tareas complejas de búsqueda.
Si bien nuestro ejemplo de planificación de vacaciones demostró resultados prometedores (especialmente para un proyecto de demostración rápida), también reveló los límites de R1 en el manejo de tareas de búsqueda y memoria en comparación con sus fortalezas en matemáticas y programación. Si bien el sistema produjo exitosamente un plan de viaje dentro de las restricciones presupuestarias, quedó corto en áreas como la verificación de información sensible al tiempo y la exploración exhaustiva de todas las opciones disponibles, destacando la brecha entre el enfoque de entrenamiento del modelo y su aplicación a diferentes dominios.