Secondo noi, DeepSearch è essenzialmente un grande ciclo while. Dati i budget massimi di token, alterna tra ricerca, lettura e ragionamento fino a trovare la migliore risposta. Uno dei compiti chiave del LLM è determinare quale azione intraprendere successivamente in base allo stato attuale della memoria. Dovrebbe continuare a cercare? Leggere la pagina web? O rispondere direttamente alla domanda?
Nella nostra implementazione node-deepresearch, utilizziamo un LLM standard (gemini-2.0-flash
) per scegliere l'azione. Lo definiamo "standard" poiché il processo di ragionamento è esplicitamente delineato attraverso l'ingegneria del prompt, e poi opera come sequenza-in, sequenza-out con l'azione scelta restituita in un oggetto JSON. Quindi sorge una domanda naturale: sostituire questo passaggio decisionale con un modello di ragionamento dedicato migliorerebbe le prestazioni di DeepSearch?

In questo post, esploriamo l'utilizzo di DeepSeek R1 671b, un LLM di ragionamento per sostituire gemini-2.0-flash
in questo passaggio decisionale. Crediamo che le capacità di ragionamento di R1 lo aiuteranno a risolvere i problemi complessi nella ricerca web e nell'analisi dei risultati.
Per testare questo concetto, lo abbiamo messo alla prova su un esempio pratico: pianificare un itinerario completo per una vacanza di tre giorni, e poi valutare come si è comportato. Gli agenti che eseguono attività di ricerca approfondita probabilmente incontreranno gli stessi tipi di problemi degli esseri umani, quindi nel nostro compito di vacanza il modello potrebbe incontrare alcuni dei seguenti problemi:
- Lacune di conoscenza (informazioni dipendenti da altre informazioni): Per esempio, vuoi visitare la Torre Eiffel, ma non sai se è aperta durante i giorni festivi. Devi scoprire sia l'orario festivo della torre che le date delle festività francesi.
- Informazioni errate o obsolete: Un blog di viaggi del 2020 suggerisce che un determinato ristorante a Roma è aperto la domenica, ma all'arrivo scopri che ha cambiato orari e ora è chiuso la domenica.
- Informazioni contraddittorie: Un sito di viaggi afferma che un particolare hotel a New York offre la colazione gratuita, mentre un altro sito afferma che la colazione non è inclusa nel prezzo della camera.
- Informazioni ambigue: Un post su un forum di viaggi menziona "una bella spiaggia vicino a Barcellona" senza specificare quale spiaggia o fornire indicazioni chiare, rendendo difficile individuare l'esatta posizione.
R1 può suddividere compiti complessi in passaggi attuabili, identificare lacune e incongruenze, e navigare ostacoli come siti web bloccati e paywall. Ha le capacità di ragionamento per raccogliere le conoscenze necessarie e sintetizzare una risposta. Tuttavia, non può pianificare una vacanza per noi da solo — questo richiede la ricerca sul web e la comprensione dei risultati che ottiene. Dobbiamo potenziarlo, inserendolo in un framework e migliorando le sue capacità, prima che sia all'altezza del compito.
tagImplementazione

Per eseguire il notebook, avrai bisogno di chiavi API gratuite di Jina AI e OpenRouter.
Mentre R1 è il motore del nostro agente, aggiungiamo anche alcuni strumenti, un oggetto stato e, naturalmente, un prompt (piuttosto grande). Ecco una rappresentazione semplificata:

- Gli strumenti possono essere chiamati dal modello per cercare e acquisire dati dal web, e i risultati vengono memorizzati nello stato.
- Lo stato tiene traccia dei risultati degli strumenti, dello stato del compito e delle conoscenze. È memorizzato nel prompt stesso.
- Un singolo prompt fornisce istruzioni, specificando il compito e come affrontarlo, oltre a memorizzare lo stato.
Esamineremo ciascuno di questi in maggior dettaglio più avanti nel post, specialmente il prompt. Ma, in breve, il sistema funziona come segue:
Iniziamo con il prompt con un oggetto stato non popolato. Mentre il compito è in corso (cioè sta cercando di produrre una risposta) l'agente esegue il seguente ciclo fino a quando non produce una risposta:
- Il modello esamina il compito e il suo stato dal prompt, e ragiona su come utilizzare al meglio i suoi strumenti per ottenere una risposta.
- Il modello restituisce un oggetto JSON che specifica il suo stato (
IN PROGRESS
oDONE
), gli aggiornamenti della memoria, le chiamate agli strumenti e la risposta (inizialmentenull
). - L'agente chiama gli strumenti in modo asincrono e i risultati vengono incorporati nuovamente nel prompt, così come l'oggetto JSON dal passaggio 3.
- Il prompt (contenente queste nuove informazioni) viene reinserito nel modello per eseguire un altro ciclo.
Non appena il modello fornisce una risposta nel suo output, il compito termina e la risposta viene consegnata.
Ora che abbiamo una panoramica di alto livello, esaminiamo gli strumenti, lo stato e il prompt uno alla volta:
tagStrumenti
Poiché R1 non può cercare o acquisire dati dal web da solo, accediamo all'API Reader di Jina per espandere le sue capacità. Questo include due modalità:
- Modalità ricerca: cerca sul web termini rilevanti e restituisce risultati del motore di ricerca (inclusi URL, titoli e descrizioni di ogni risultato).
- Modalità lettura: acquisisce pagine dai risultati di ricerca e le restituisce in formato Markdown.
A causa della finestra di contesto limitata di R1, non possiamo semplicemente inserire un'intera pagina nella sezione Tool Results
del prompt. Abbiamo bisogno di strumenti extra per selezionare solo le informazioni più rilevanti prima di passarle al modello:
- LangChain recursive character text splitter: Dividiamo output lunghi in segmenti con
RecursiveCharacterTextSplitter
, dividendo ricorsivamente su paragrafi e frasi fino a ottenere la dimensione del segmento desiderata. Questo assicura che l'output sia facilmente digeribile dalla finestra di contesto limitata di R1. - Jina Reranker: Riordiniamo i segmenti con jina-reranker-v2-base-multilingual e combiniamo i segmenti meglio classificati in un unico risultato.
Sfortunatamente, DeepSeek R1 non supporta l'uso degli strumenti nello stesso modo di o3-mini
. Per esempio, con o3-mini
, potremmo usare qualcosa del genere:
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
)
Esempio di codice o3-mini per supportare l'uso degli strumenti
Ma questo non è così facile con R1: Non ha un parametro tools
che possiamo passare all'API, e non restituirà tool_calls
strutturati come parte della sua risposta. In parole povere, non è stato addestrato per utilizzare gli strumenti (e non li supporterà presto). Almeno, non li supporta nel senso tradizionale. Tuttavia, possiamo ancora chiedere a R1 di restituire chiamate agli strumenti in formato JSON, e inserire i risultati delle chiamate agli strumenti nel modello per l'analisi:
Devi rispondere con un oggetto JSON valido contenente:
```json
{
"tool_calls": [
{"tool": "search", "input": "Voli più economici dalla Germania a Creta maggio 2025"},
{"tool": "scrape", "input": "<https://www.skyscanner.net/routes/gr/de/germany-to-crete.html>"}
]
}
```
Chiamate agli strumenti come parte del prompt di R1
Dopo che il modello genera chiamate agli strumenti nell'iterazione n, gli strumenti vengono chiamati e i risultati vengono incorporati nella sezione Tool Results
del prompt affinché il modello possa ragionarci nell'iterazione 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 ...
```
Risultati degli strumenti, che mostrano i risultati di ricerca per voli Germania-Creta
tagStato
Lo stato tiene traccia dello stato del compito (Status
) e della conoscenza (Memory
) che il modello deve analizzare e aggiornare. In breve, è la memoria di lavoro e i banchi di memoria del sistema. Questo viene memorizzato in una sezione del prompt chiamata {{ workspace }}
e inizia come una tabula rasa:
Status: IN_PROGRESS
Memory:
... no memory blocks ..
Oggetto stato vuoto
Mentre il modello ragiona sul compito, esegue gli strumenti e raccoglie output, lo stato viene popolato con blocchi di memoria (derivati dall'output degli strumenti), ciascuno con il proprio ID assegnato casualmente. Per il nostro esempio di pianificazione delle vacanze, lo stato potrebbe apparire così dopo aver eseguito un'iterazione dell'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>
Stato popolato da DeepSeek R1
I blocchi di memoria vengono aggiornati includendo un elenco di memory_updates
nella risposta JSON del modello:
{
"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"},
...
]
}
Aggiornamenti della memoria come parte dell'output JSON di R1
- L'operazione
add
aggiunge un blocco di memoria e può essere utilizzata per memorizzare informazioni importanti come lead, scoperte, lacune informative e azioni già intraprese. - L'operazione
delete
elimina un blocco di memoria, permettendo al modello di eliminare informazioni vecchie, non necessarie o false e mantenere uno spazio di lavoro pulito.
replace
, ma abbiamo scoperto che il modello generava grandi blocchi di informazioni (facendo troppo affidamento su replace
), e abbiamo deciso di rimuovere questa opzione.Rispetto all'emissione di chiamate agli strumenti, R1 ha meno familiarità con la gestione della propria memoria. Mentre il modello è stato specificamente addestrato per ragionare attraverso problemi matematici complessi e compiti di programmazione—un addestramento che gli permette di produrre oggetti JSON accurati ed eseguire chiamate agli strumenti—non è stato addestrato per gestire stati simili alla memoria (né lo è stato alcun altro modello a nostra conoscenza).
Memorizzare informazioni utilizzando uno stato compatto simile alla memoria offre diversi vantaggi rispetto a memorizzare l'intero output dal modello ad ogni round. Questo approccio condensa le informazioni all'interno del prompt, prevenendo l'overflow del contesto mentre migliora la focalizzazione del modello sulla conoscenza rilevante. Manteniamo il formato JSON perché è facile da aggiornare, ma il JSON viene renderizzato in un formato leggibile dall'uomo nel prompt stesso.
Tuttavia, la gestione della memoria rimane al di fuori del dominio principale di R1; abbiamo dovuto implementare molteplici istruzioni per guidare il modello nella corretta gestione delle operazioni di memoria. Ecco la parte del nostro prompt che si occupa di questo:
... altri contenuti 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
... altri contenuti del prompt ...
Istruzioni per la gestione della memoria nel prompt
tagPrompt
Abbiamo creato il prompt utilizzando il formato template Jinja. È composto da diverse sezioni:
- Contesto (in questo caso, la data corrente).
- Istruzioni, che coprono come funziona tutto e indicano al modello quali strumenti sono disponibili.
- Stato, discusso sopra.
- Output degli strumenti, dagli strumenti
search
escrape
.
{% 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
Intero prompt utilizzato nel nostro sistema di ricerca approfondita
tagValutazione
Abbiamo messo alla prova il nostro sistema con l'esempio della pianificazione delle vacanze. Ecco il compito inserito nel 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.
Ecco il risultato finale (dopo cinque iterazioni 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).
Risultato per la ricerca della vacanza, dopo cinque iterazioni
La risposta sembra legittima. Ma lo è davvero? Dopotutto, i modelli sono noti per le loro allucinazioni, e con un sistema composto da più parti in movimento, è probabile che qualcosa possa andare storto. Verifichiamo alcuni dettagli nell'output di R1:
tagDestinazione e budget totale
I calcoli per ogni voce tornano tutti (vedremo sotto se ogni voce è accurata). Dopotutto, R1 è stato addestrato su problemi matematici. Anche la destinazione è corretta; Creta è una località popolare.
tagVoli
I prezzi dei voli quasi tornano, ma vediamo dove le cose sono andate storte. Innanzitutto, ecco i prezzi reali da Skyscanner da Francoforte a Heraklion, per maggio 2025, andata e ritorno:

Possiamo vedere che i prezzi sono tutti intorno ai 200 EUR, e non i promessi 154 EUR per andata e ritorno! Ma da dove viene l'errore? Guardando i log, troviamo un blocco di memoria correlato aggiunto nel round 3:
{"operation": "add", "content": "Crete flight options: Eurowings €89.99* one-way ..."}
Blocco di memoria relativo ai voli Germania-Creta
Questo blocco sembra essere dedotto dal risultato di ricerca allegato:
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 ...
```
Risultato della ricerca per voli Germania-Creta
Il modello non ha mai provato a estrarre dati da questa pagina web per confermare i risultati, ma probabilmente non avrebbe fatto differenza. Tuttavia, avrebbe dovuto almeno notare che i risultati della ricerca non includevano "maggio" come periodo.
tagHotel
Gli hotel sono corretti, ma abbiamo identificato alcuni miglioramenti che potrebbero essere fatti. Innanzitutto, avremmo voluto che il modello si fosse impegnato di più nel trovare i prezzi per il Georgioupolis Beach Hotel e gli FNK Apartments - mentre fornisce altre informazioni, i prezzi purtroppo mancano. Per capire cosa intendiamo, ecco l'output grezzo dell'URL di Booking.com che è stato utilizzato per generare i consigli sugli hotel. Mostra solo i prezzi per il primo e l'ultimo risultato, saltando i tre centrali:
Source 3️: scrape: https://www.booking.com/region/gr/crete.html
Result:
```
Mostra di più Mostra di meno
Moritz Germania
* ### [JT Apartments](https://www.booking.com/hotel/gr/jt-apatments.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)
Kissamos
Da 57$ a notte
9.5 Eccezionale 313 recensioni
Consiglio vivamente di soggiornare presso JT Apartments. Quando siamo entrati nell'appartamento siamo stati accolti da una piacevole sorpresa. Tutto era ben attrezzato. Il quartiere è tranquillo, supermercato nelle vicinanze. La spiaggia è a pochi passi. È un'ottima posizione se si vogliono visitare le spiagge più belle di Creta. Grazie a voi il nostro soggiorno è stato esattamente come avevamo sognato :)
Mostra di più Mostra di meno
Katarzyna Polonia
Mostra di più Mostra di meno
Aitor Germania
* ### [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 Eccezionale 64 recensioni
Siamo stati a Creta per una settimana. Durante questo periodo, abbiamo soggiornato presso FnK Apartments. Froso e Konstantinos sono stati host super amichevoli e fantastici per noi. Erano sempre pronti ad aiutare per qualsiasi domanda o necessità. L'appartamento stesso ha una bellissima vista su Agia Pelagia e le baie circostanti (e persino il bellissimo alba). Possiamo solo raccomandare FnK Apartments!!
Mostra di più Mostra di meno
Moritz Germania
Mostra di più Mostra di meno
mary Stati Uniti
* ### [Artemis Hotel Apartments](https://www.booking.com/hotel/gr/artemis-hersonisos.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)
Limenas Hersonissou, Hersonissos
9.0 Ottimo 419 recensioni
Se volete sentirvi i benvenuti, essere trattati come amici, sapere che riceverete aiuto in tutto, vi consigliamo vivamente di soggiornare in questo hotel. Grazie di cuore a Konstantine per il trattamento caloroso e molto personale! Nella nostra prossima visita a Creta, saremo felici di soggiornare di nuovo all'Hotel Artemis!
Mostra di più Mostra di meno
Irina Israele
Mostra di più Mostra di meno
Ann Marie Irlanda
* ### [Pinelopi Hotel](https://www.booking.com/hotel/gr/pinelopi.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)
Platanes
7.8 Buono 198 recensioni
Ottima posizione vicino alla spiaggia, ottime taverne e anche in una buona posizione per viaggiare in auto. Zona tranquilla, perfetta per un meraviglioso periodo di vacanza. Camere spaziose dotate di tutto il necessario. Ottimo rapporto qualità-prezzo. L'area piscina era eccellente e ci si può rilassare in qualsiasi momento della giornata. Il parcheggio vicino all'hotel era perfetto. Tornerò sicuramente al Pinelopi Hotel quando visiterò di nuovo Creta.
Mostra di più Mostra di meno
Rita Romania
Mostra di più Mostra di meno
Katarzyna Polonia
* ### [Elizabeth Suites](https://www.booking.com/hotel/gr/elizabeth-suites.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)
Kato Daratso
Da 74$ a notte
9.1 Ottimo 86 recensioni
Abbiamo avuto un ottimo soggiorno reso ancora più personale da Epas, il proprietario che aveva sempre il sorriso ed era molto disponibile, e lo staff era adorabile, in particolare Anna. Abbiamo fatto colazione un paio di giorni ed era più che abbondante. Gli appartamenti erano in una posizione perfetta per spiagge e ristoranti. Consigliamo vivamente The Elizabeth Suites che ha reso la nostra prima vacanza a Creta 😊
Mostra di più Mostra di meno
Jean Regno Unito
```
Risultati grezzi della ricerca di hotel a Creta su booking.com
In secondo luogo, abbiamo identificato un problema aggiuntivo nell'utilizzo di Reranker con il suo predefinito top_n
di 5 risultati — è emerso che la pagina scraped conteneva più di cinque risultati rilevanti - avremmo potuto affrontare questo controllando effettivamente il punteggio di rilevanza di ciascun risultato, invece di prendere solo i primi cinque (o quanti fossero) risultati. Tuttavia, la configurazione ideale del reranking varia tra i compiti. Un modo migliore per gestire questo problema sarebbe semplicemente utilizzare l'intera pagina scraped - che purtroppo non è possibile a causa della lunghezza limitata del contesto di R1.
tagPrestazioni Generali e Potenziali Miglioramenti
Il modello è partito bene inizialmente, ma abbiamo notato che raramente tentava di cambiare strategia o sviluppare piani complessi a meno che non fosse specificamente sollecitato a farlo. Mentre R1 naturalmente impiega questi approcci per problemi matematici e di coding (aree su cui è stato specificamente addestrato), non applica lo stesso ragionamento ai compiti di ricerca. Anche se potremmo perfezionare ulteriormente il prompt (o persino utilizzare prompt multipli) per affrontare questa limitazione, questo non era il nostro obiettivo principale.
Abbiamo anche osservato che R1 non gestiva adeguatamente le informazioni sensibili al tempo. In breve, se i risultati della ricerca non menzionano esplicitamente una data errata, il modello assume che l'informazione sia valida senza ulteriore verifica. Per esempio, quando si pianifica un volo per il 1° maggio:
- Germania-Creta 80$ 1° maggio: Corretto - Il modello può fidarsi di questa informazione.
- Germania-Creta 80$ 1° gennaio: Errato - Il modello identifica correttamente e scarta questa informazione.
- Germania-Creta 80$: Falso positivo - Quando non viene specificata una data, il modello non verifica l'informazione e la assume erroneamente come valida.
Se dovessimo continuare con questo progetto, potremmo considerare l'implementazione di diversi potenziali miglioramenti:
- Tracciare il conteggio dei blocchi di memoria e sollecitare il modello a riassumere le voci quando lo stato diventa troppo grande.
- Istruire il modello a esaurire tutte le piste prima di finalizzare l'esplorazione e rispondere alle query.
- Enfatizzare la verifica delle informazioni sensibili al tempo.
- Assicurarsi che il modello ricontrolli i risultati facendo lo scraping degli URL restituiti dallo strumento di ricerca.
- Testare il nostro sistema con futuri modelli di ragionamento che supportano finestre di contesto più ampie, anche se questo richiederebbe una sostanziale rielaborazione e test per adattare il prompt a un modello diverso.
tagConclusione
Anche dalla release piuttosto recente di R1, il panorama si è evoluto significativamente. Sono emersi progetti che addestrano modelli di ragionamento a costi notevolmente bassi—alcuni per appena 5$. Questa democratizzazione significa che l'addestramento di modelli specializzati è più accessibile che mai. I nostri esperimenti con R1 forniscono una base utile mentre continuiamo a esplorare come i LLM focalizzati sul ragionamento possano essere potenziati con strumenti per affrontare compiti di ricerca complessi.
Mentre il nostro esempio di pianificazione delle vacanze ha dimostrato risultati promettenti (specialmente per un progetto dimostrativo rapido), ha anche rivelato i limiti di R1 nella gestione di compiti di ricerca e memoria rispetto ai suoi punti di forza in matematica e coding. Mentre il sistema è riuscito a produrre un piano di viaggio entro i vincoli di budget, è risultato carente in aree come la verifica delle informazioni sensibili al tempo e l'esplorazione approfondita di tutte le opzioni disponibili, evidenziando il divario tra il focus dell'addestramento del modello e la sua applicazione a domini diversi.