Pressemitteilungen
Modelle
Produkte
keyboard_arrow_down
Leser
Lesen Sie URLs und suchen Sie im Internet nach fundierteren LLMs.
Einbettungen
Multimodale und mehrsprachige Einbettungen von Weltklasse.
Reranker
Neural Retriever der Weltklasse zur Maximierung der Suchrelevanz.
DeepSearch
Suchen, lesen und überlegen, bis die beste Antwort gefunden ist.
Mehr
keyboard_arrow_down
Klassifikator
Zero-Shot- und Few-Shot-Klassifizierung für Bild und Text.
Segmentierer
Schneiden Sie langen Text in Abschnitte und führen Sie eine Tokenisierung durch.

API-Dokumente
Automatische Codegenerierung für Ihre Copilot-IDE oder LLM
open_in_new


Unternehmen
keyboard_arrow_down
Über uns
Kontaktieren Sie unseren Vertrieb
Praktikantenprogramm
Begleiten Sie uns
open_in_new
Logo herunterladen
open_in_new
Terms & amp; Bedingungen


Einloggen
login
Implementierung
Tools
Status
Prompt
Auswertung
Fazit
Tech-Blog
April 01, 2025

Verwendung des DeepSeek R1 Reasoning Model in DeepSearch

Standardmäßiges LLM oder Reasoning-Modell - was ist besser für DeepSearch? In diesem Beitrag haben wir die Verwendung von DeepSeek-R1 in der DeepSearch-Implementierung zur Auswahl der nächsten Aktion untersucht.
Andrei Ungureanu
Alex C-G
Andrei Ungureanu, Alex C-G • 17 Minuten gelesen

Nach unserer Ansicht ist DeepSearch im Wesentlichen eine große While-Schleife. Unter Berücksichtigung maximaler Token-Budgets wechselt es zwischen Suchen, Lesen und Denken, bis es die beste Antwort findet. Eine der Hauptaufgaben des LLM besteht darin, basierend auf dem aktuellen Speicherzustand die nächste Aktion zu bestimmen. Soll es weiter suchen? Die Webseite lesen? Oder die Frage direkt beantworten?

In unserer node-deepresearch Implementierung verwenden wir ein Standard LLM (gemini-2.0-flash) für die Aktionsauswahl. Wir nennen es "Standard", da der Reasoning-Prozess explizit durch Prompt Engineering beschrieben wird und dann als Sequence-in, Sequence-out funktioniert, wobei die gewählte Aktion in einem JSON-Objekt zurückgegeben wird. Es stellt sich also die natürliche Frage: Würde das Ersetzen dieses Entscheidungsschritts durch ein dediziertes Reasoning-Modell die DeepSearch-Leistung verbessern?

Der Aktionsentscheidungsschritt der großen While-Schleife in unserer DeepSearch-Implementierung bestimmt basierend auf dem aktuellen Kontext und Speicher, was die nächste Aktion sein soll.

In diesem Beitrag untersuchen wir die Verwendung von DeepSeek R1 671b, einem Reasoning LLM, um gemini-2.0-flash für diesen Entscheidungsschritt zu ersetzen. Wir glauben, dass R1's Reasoning-Fähigkeiten dabei helfen werden, die komplexen Probleme bei der Websuche und Analyse der Ergebnisse zu lösen.

Um dieses Konzept zu testen, lassen wir es an einem praktischen Beispiel los: der Planung einer umfassenden dreitägigen Urlaubsroute, und bewerten dann die Leistung. Agenten, die Deep Search-Aufgaben ausführen, werden wahrscheinlich auf die gleichen Probleme stoßen wie Menschen, daher könnte unser Urlaubsplaner auf folgende Probleme treffen:

  • Wissenslücken (von anderen Informationen abhängige Information): Sie möchten zum Beispiel den Eiffelturm besuchen, wissen aber nicht, ob er an Feiertagen geöffnet ist. Sie müssen sowohl den Feiertagsplan des Turms als auch die französischen Feiertage herausfinden.
  • Falsche oder veraltete Informationen: Ein Reiseblog von 2020 schlägt ein bestimmtes Restaurant in Rom für sonntags vor, aber vor Ort stellen Sie fest, dass es seine Öffnungszeiten geändert hat und sonntags jetzt geschlossen ist.
  • Widersprüchliche Informationen: Eine Reisewebsite behauptet, dass ein bestimmtes Hotel in New York kostenloses Frühstück anbietet, während eine andere Website angibt, dass Frühstück nicht im Zimmerpreis inbegriffen ist.
  • Mehrdeutige Informationen: Ein Reiseforum-Beitrag erwähnt "einen tollen Strand in der Nähe von Barcelona", ohne den genauen Strand zu nennen oder klare Wegbeschreibungen zu geben, was es schwierig macht, den genauen Ort zu bestimmen.

R1 kann komplexe Aufgaben in ausführbare Schritte aufteilen, Lücken und Widersprüche identifizieren und Hindernisse wie blockierte Websites und Abonnement-Walls umgehen. Es verfügt über die Reasoning-Fähigkeiten, um das erforderliche Wissen zu sammeln und eine Antwort zu synthetisieren. Allerdings kann es nicht allein einen Urlaub für uns planen – dafür muss es im Web suchen und die gefundenen Ergebnisse verstehen können. Wir müssen es aufmotzen, mit einem Framework ausstatten und seine Fähigkeiten erweitern, bevor es der Aufgabe gewachsen ist.

tagImplementierung

Google Colab

Um das Notebook auszuführen, benötigen Sie kostenlose Jina AI und OpenRouter API-Schlüssel.

Während R1 die Engine unseres Agenten ist, fügen wir auch einige Tools, ein State-Objekt und natürlich einen (ziemlich großen) Prompt hinzu. Hier ist eine vereinfachte Darstellung:

  • Die Tools können vom Modell aufgerufen werden, um im Web zu suchen und zu scrapen, und die Ergebnisse werden im State gespeichert.
  • Der State verfolgt Tool-Ergebnisse, Aufgabenstatus und Wissen. Er wird im Prompt selbst gespeichert.
  • Ein einzelner Prompt liefert Anweisungen, spezifiziert die Aufgabe und wie sie anzugehen ist, sowie die Speicherung des States.

Wir werden später im Beitrag jeden dieser Aspekte detaillierter betrachten, besonders den Prompt. Aber kurz gesagt funktioniert das System wie folgt:

Wir beginnen mit dem Prompt mit einem nicht befüllten State-Objekt. Während die Aufgabe in Bearbeitung ist (d.h. versucht eine Antwort zu produzieren), durchläuft der Agent die folgende Schleife bis er eine Antwort liefert:

  1. Das Modell untersucht die Aufgabe und seinen State aus dem Prompt und überlegt, wie es seine Tools am besten nutzen kann, um eine Antwort zu bekommen.
  2. Das Modell gibt ein JSON-Objekt aus, das seinen Status (IN PROGRESS oder DONE), Speicheraktualisierungen, Tool-Aufrufe und die Antwort (anfänglich null) spezifiziert.
  3. Der Agent ruft Tools asynchron auf und die Ergebnisse werden sowohl in den Prompt als auch in das JSON-Objekt aus Schritt 3 eingebettet.
  4. Der Prompt (der diese neuen Informationen enthält) wird zurück in das Modell eingespeist, um eine weitere Schleife zu durchlaufen.

Sobald das Modell eine Antwort in seiner Ausgabe liefert, endet die Aufgabe und die Antwort wird zurückgegeben.

💡
Um ein besseres Verständnis dafür zu bekommen, wie der Agent in Aktion funktioniert, empfehlen wir Ihnen, das Notebook selbst auszuprobieren und die Ausgabe bei jeder Iteration zu untersuchen.

Nachdem wir nun einen Überblick auf hoher Ebene haben, schauen wir uns die Tools, den State und den Prompt der Reihe nach an:

tagTools

Da R1 nicht selbst im Web suchen oder scrapen kann, greifen wir auf Jinas Reader API zu, um seine Fähigkeiten zu erweitern. Dies umfasst zwei Modi:

  • Suchmodus: durchsucht das Web nach relevanten Begriffen und gibt Suchmaschinenergebnisse zurück (einschließlich URLs, Titeln und Beschreibungen jedes Ergebnisses).
  • Lesemodus: scrapt Seiten aus Suchergebnissen und gibt sie im Markdown-Format zurück.

Aufgrund von R1's begrenztem Kontextfenster können wir nicht einfach eine ganze Seite in den Tool Results Abschnitt des Prompts einfügen. Wir brauchen zusätzliche Tools, um nur die relevantesten Informationen auszuwählen, bevor wir sie an das Modell weitergeben:

  • LangChain recursive character text splitter: Wir teilen lange Ausgaben mit RecursiveCharacterTextSplitter in Segmente auf, indem wir rekursiv nach Absätzen und Sätzen aufteilen, bis wir die gewünschte Segmentgröße erreichen. Dies stellt sicher, dass die Ausgabe für R1's begrenztes Kontextfenster leicht verdaulich ist.
  • Jina Reranker: Wir ordnen die Segmente mit jina-reranker-v2-base-multilingual neu und kombinieren die am höchsten bewerteten Segmente zu einem Ergebnis.

Leider unterstützt DeepSeek R1 keine Tool-Nutzung in der gleichen Weise wie o3-mini. Zum Beispiel könnten wir mit o3-mini etwas wie das Folgende verwenden:

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
)

Beispiel o3-mini Code zur Unterstützung der Tool-Nutzung

Aber das ist mit R1 nicht so einfach: Es hat keinen tools Parameter, den wir an die API übergeben können, und es wird keine strukturierten tool_calls als Teil seiner Antwort zurückgeben. Einfach gesagt, wurde es nicht für die Nutzung von Tools trainiert (und wird sie auch in naher Zukunft nicht unterstützen). Zumindest unterstützt es sie nicht im traditionellen Sinne. Allerdings können wir R1 trotzdem bitten, Tool-Aufrufe im JSON-Format auszugeben und die Tool-Aufruf-Ergebnisse zurück in das Modell einzuspeisen, um sie zu analysieren:

You must respond with a valid JSON object containing:
```json
{
  "tool_calls": [
    {"tool": "search", "input": "Cheapest flights from Germany to Crete May 2025"},
    {"tool": "scrape", "input": "<https://www.skyscanner.net/routes/gr/de/germany-to-crete.html>"}
  ]
}
```

Tool-Aufrufe als Teil von R1's Prompt

Nachdem das Modell in Iteration n Tool-Aufrufe ausgibt, werden die Tools aufgerufen und die Ergebnisse werden in den Tool Results-Abschnitt des Prompts eingebettet, damit das Modell in Iteration n+1 damit arbeiten kann:

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 ...
```

Tool-Ergebnisse zeigen Suchergebnisse für Flüge von Deutschland nach Kreta

tagStatus

Der Status verfolgt den Aufgabenstatus (Status) und das Wissen (Memory), das das Modell analysieren und aktualisieren muss. Kurz gesagt ist es das Arbeitsgedächtnis und die Wissensspeicher des Systems. Dies wird in einem Abschnitt des Prompts namens {{ workspace }} gespeichert und beginnt als leere Vorlage:

Status: IN_PROGRESS
Memory: 
... no memory blocks ..

Leeres Status-Objekt

Während das Modell über die Aufgabe nachdenkt, Tools ausführt und Output sammelt, wird der Status mit Speicherblöcken (abgeleitet aus Tool-Output) gefüllt, die jeweils eine zufällig zugewiesene ID haben. Für unser Urlaubsplanungsbeispiel könnte der Status nach einer Iteration des Agenten so aussehen:

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>

Von DeepSeek R1 gefüllter Status

Die Speicherblöcke werden durch eine Liste von memory_updates in der JSON-Antwort des Modells aktualisiert:

{
	"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"},
	  ...
	]
}

Speicheraktualisierungen als Teil von R1's JSON-Output

  • Die add Operation fügt einen Speicherblock hinzu und kann verwendet werden, um wichtige Informationen wie Leads, Erkenntnisse, Informationslücken und bereits durchgeführte Aktionen zu speichern.
  • Die delete Operation löscht einen Speicherblock und ermöglicht es dem Modell, alte, unnötige oder falsche Informationen zu löschen und einen sauberen Arbeitsbereich zu erhalten.
💡
Wir haben auch eine replace Operation getestet, aber wir stellten fest, dass das Modell große Informationsblöcke generierte (sich zu sehr auf replace verließ), und beschlossen, diese Option zu entfernen.

Im Vergleich zur Ausführung von Tool-Aufrufen ist R1 weniger vertraut mit der Verwaltung seines eigenen Speichers. Während das Modell speziell für das Lösen komplexer mathematischer Probleme und Coding-Aufgaben trainiert wurde – ein Training, das es ihm ermöglicht, genaue JSON-Objekte zu erstellen und Tool-Aufrufe auszuführen – wurde es nicht für die Verwaltung speicherähnlicher Zustände trainiert (und auch kein anderes uns bekanntes Modell).

Die Speicherung von Informationen in einem kompakten, speicherähnlichen Zustand bietet mehrere Vorteile gegenüber der Speicherung der gesamten Ausgabe des Modells in jeder Runde. Dieser Ansatz verdichtet Informationen innerhalb des Prompts, verhindert Kontextüberläufe und verbessert den Fokus des Modells auf relevantes Wissen. Wir behalten JSON bei, weil es einfach zu aktualisieren ist, aber das JSON wird im Prompt selbst in einem menschenlesbaren Format dargestellt.

Dennoch fällt die Speicherverwaltung immer noch außerhalb von R1's Kerndomäne; wir mussten mehrere Anweisungen implementieren, um das Modell bei der korrekten Handhabung von Speicheroperationen zu unterstützen. Hier ist der Teil unseres Prompts, der sich damit befasst:

... other contents of the 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

... other contents of the prompt ...

Speicherhandhabungsanweisungen im Prompt

tagPrompt

Wir haben den Prompt mit dem Jinja Template-Format erstellt. Er besteht aus mehreren Abschnitten:

  • Kontext (in diesem Fall das aktuelle Datum).
  • Anweisungen, die beschreiben, wie alles funktioniert und dem Modell mitteilen, welche Tools verfügbar sind.
  • Status, wie oben diskutiert.
  • Tool-Outputs von den search und scrape Tools.
{% 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

Vollständiger Prompt, der in unserem Deep-Search-System verwendet wird

💡
Die Jinja-Makrofunktion am Anfang des Prompts rendert lediglich die Tool-Ergebnisse in einem übersichtlicheren Format.

tagAuswertung

Wir haben unser System mit unserem Urlaubsplanungsbeispiel getestet. Hier ist die in den Prompt eingebettete Aufgabe:

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.

Hier ist das endgültige Ergebnis (nach fünf Iterationen der Schleife):

**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).

Ergebnis der Urlaubssuche nach fünf Iterationen

Diese Antwort sieht legitim aus. Aber ist sie das wirklich? Schließlich ist bekannt, dass Modelle halluzinieren, und bei einem System mit mehreren beweglichen Teilen könnte leicht etwas schief gehen. Überprüfen wir einige Details aus R1's Output:

tagReiseziel und Gesamtbudget

Die Berechnungen für jeden Posten stimmen (ob jeder Posten genau stimmt, werden wir unten prüfen). Immerhin wurde R1 mit mathematischen Problemen trainiert. Das Reiseziel passt auch - Kreta ist ein beliebtes Ziel.

tagFlüge

Die Flugpreise stimmen fast, aber schauen wir uns an, wo die Fehler liegen. Hier sind zunächst die tatsächlichen Preise von Skyscanner für Hin- und Rückflug von Frankfurt nach Heraklion im Mai 2025:

Tatsächliche Skyscanner-Suchergebnisse für Frankfurt-Heraklion-Flüge im Mai 2025

Wir sehen, dass die Preise alle um die 200 EUR liegen und nicht die versprochenen 154 EUR für Hin- und Rückflug! Aber woher kommt der Fehler? Ein Blick in die Logs zeigt einen relevanten Speicherblock, der in Runde 3 hinzugefügt wurde:

{"operation": "add", "content": "Crete flight options: Eurowings €89.99* one-way ..."}

Speicherblock bezüglich Deutschland-Kreta-Flüge

Dieser Block scheint aus dem angehängten Suchergebnis abgeleitet zu sein:

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 ...
```

Suchergebnis für Deutschland-Kreta-Flüge

Das Modell hat nie versucht, diese Webseite zu scrapen, um die Ergebnisse zu bestätigen, aber es hätte wahrscheinlich keinen Unterschied gemacht. Allerdings hätte es zumindest bemerken sollen, dass die Suchergebnisse "Mai" nicht als Zeitraum enthielten.

tagHotel

Die Hotels stimmen, aber wir haben einige Verbesserungsmöglichkeiten identifiziert. Erstens hätte das Modell sich mehr Mühe geben sollen, die Preise für das Georgioupolis Beach Hotel und die FNK Apartments zu finden - während es andere Informationen liefert, fehlen leider die Preise. Um zu verstehen, was wir meinen: Hier ist die Rohausgabe der gescrapten URL, die für die Hotelempfehlungen verwendet wurde. Sie zeigt nur Preise für das erste und letzte Ergebnis und überspringt die mittleren drei:

Quelle 3️: Scraping: https://www.booking.com/region/gr/crete.html
Ergebnis:
```
Mehr anzeigen Weniger anzeigen

Moritz Deutschland

*   ### [JT Apartments](https://www.booking.com/hotel/gr/jt-apatments.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)

Kissamos

Ab 57 $ pro Nacht

9,5 Außergewöhnlich 313 Bewertungen

Ich empfehle den Aufenthalt in den JT Apartments sehr. Als wir das Apartment betraten, wurden wir von einer angenehmen Überraschung begrüßt. Alles war gut ausgestattet. Die Nachbarschaft ist ruhig, Supermarkt in der Nähe. Der Strand ist nur einen kurzen Spaziergang entfernt. Es ist ein toller Standort, wenn man die schönsten Strände Kretas besuchen möchte. Dank Ihnen war unser Aufenthalt genau so, wie wir es uns erträumt hatten :)

Mehr anzeigen Weniger anzeigen

Katarzyna Polen
Mehr anzeigen Weniger anzeigen

Aitor Deutschland

*   ### [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 Außergewöhnlich 64 Bewertungen

Wir waren eine Woche auf Kreta. In dieser Zeit wohnten wir in den FnK Apartments. Froso und Konstantinos waren super freundlich und tolle Gastgeber für uns. Sie waren immer bereit zu helfen, wenn wir Fragen oder irgendwelche Bedürfnisse hatten. Das Apartment selbst hat einen wunderschönen Blick auf Agia Pelagia und die umliegenden Buchten (und sogar den schönen Sonnenaufgang). Wir können die FnK Apartments nur empfehlen!!

Mehr anzeigen Weniger anzeigen

Moritz Deutschland
Mehr anzeigen Weniger anzeigen

mary Vereinigte Staaten

*   ### [Artemis Hotel Apartments](https://www.booking.com/hotel/gr/artemis-hersonisos.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)

Limenas Hersonissou, Hersonissos

9,0 Wunderbar 419 Bewertungen

Wenn Sie sich willkommen fühlen möchten, wie Freunde behandelt werden möchten und wissen möchten, dass Sie bei allem Hilfe bekommen, empfehlen wir Ihnen sehr, in diesem Hotel zu übernachten. Von ganzem Herzen danken wir Konstantine für die herzliche und sehr persönliche Betreuung! Bei unserem nächsten Besuch auf Kreta werden wir gerne wieder im Artemis Hotel übernachten!

Mehr anzeigen Weniger anzeigen

Irina Israel
Mehr anzeigen Weniger anzeigen

Ann Marie Irland

*   ### [Pinelopi Hotel](https://www.booking.com/hotel/gr/pinelopi.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)

Platanes

7,8 Gut 198 Bewertungen

Tolle Lage in der Nähe des Strandes, großartige Tavernen und auch eine gute Lage für Ausflüge mit dem Auto. Ruhige Gegend, perfekt für eine wunderbare Urlaubszeit. Geräumige Zimmer mit allem, was man braucht. Tolles Preis-Leistungs-Verhältnis. Der Poolbereich war ausgezeichnet und man kann sich dort jederzeit tagsüber entspannen. Der Parkplatz in der Nähe des Hotels war perfekt. Ich werde definitiv ins Pinelopi Hotel zurückkehren, wenn ich Kreta wieder besuche.

Mehr anzeigen Weniger anzeigen

Rita Rumänien
Mehr anzeigen Weniger anzeigen

Katarzyna Polen

*   ### [Elizabeth Suites](https://www.booking.com/hotel/gr/elizabeth-suites.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)

Kato Daratso

Ab 74 $ pro Nacht

9,1 Wunderbar 86 Bewertungen

Wir hatten einen großartigen Aufenthalt, der durch Epas, den Besitzer, der ständig ein Lächeln auf den Lippen hatte und sehr hilfsbereit war, und das Personal, besonders Anna, noch persönlicher wurde. Wir hatten an ein paar Tagen Frühstück, das mehr als reichlich war. Die Apartments lagen in perfekter Lage für Strände und Restaurants. Wir empfehlen die Elizabeth Suites sehr, sie haben unseren ersten Urlaub auf Kreta perfekt gemacht 😊

Mehr anzeigen Weniger anzeigen

Jean Vereinigtes Königreich
```

Rohe Scraping-Ergebnisse für Kreta-Hotelauflistungen auf booking.com

Zweitens haben wir ein zusätzliches Problem beim Einsatz von Reranker mit seinem vordefinierten top_n von 5 Ergebnissen identifiziert — es stellte sich heraus, dass die gescrapte Seite mehr als fünf relevante Ergebnisse enthielt - wir hätten dies lösen können, indem wir tatsächlich den Relevanz-Score jedes Ergebnisses überprüft hätten, anstatt nur die obersten fünf (oder wie viele auch immer) Ergebnisse zu nehmen. Die ideale Reranking-Konfiguration variiert jedoch je nach Aufgabe. Eine bessere Lösung für dieses Problem wäre es einfach gewesen, die gesamte gescrapte Seite zu verwenden - was leider aufgrund der begrenzten Kontextlänge von R1 nicht möglich ist.

tagGesamtleistung und mögliche Verbesserungen

Das Modell startete zunächst gut, aber wir bemerkten, dass es selten versuchte, Strategien zu wechseln oder komplexe Pläne zu entwickeln, wenn es nicht speziell dazu aufgefordert wurde. Während R1 diese Ansätze bei mathematischen und Coding-Problemen (Bereiche, für die es speziell trainiert wurde) natürlich einsetzt, wendet es die gleiche Argumentation nicht auf Suchaufgaben an. Während wir den Prompt weiter optimieren (oder sogar mehrere Prompts verwenden) könnten, um diese Einschränkung zu beheben, war das nicht unser primäres Ziel.

Wir stellten auch fest, dass R1 zeitkritische Informationen nicht angemessen berücksichtigte. Kurz gesagt, wenn in Suchergebnissen nicht explizit ein falsches Datum erwähnt wird, geht das Modell ohne weitere Überprüfung davon aus, dass die Information gültig ist. Zum Beispiel bei der Planung eines Fluges am 1. Mai:

  • Deutschland nach Kreta 80 $ 1. Mai: Korrekt - Das Modell kann dieser Information vertrauen.
  • Deutschland nach Kreta 80 $ 1. Januar: Falsch - Das Modell erkennt und verwirft dies richtig.
  • Deutschland nach Kreta 80 $: Falsch positiv - Wenn kein Datum angegeben ist, überprüft das Modell die Information nicht und nimmt fälschlicherweise die Gültigkeit an.

Wenn wir dieses Projekt fortsetzen würden, könnten wir mehrere potenzielle Verbesserungen in Betracht ziehen:

  • Verfolgung der Speicherblockanzahl und Aufforderung des Modells zur Zusammenfassung von Einträgen, wenn der Status zu groß wird.
  • Anweisung des Modells, alle Spuren zu erschöpfen, bevor die Exploration abgeschlossen und Anfragen beantwortet werden.
  • Betonung der Überprüfung zeitkritischer Informationen.
  • Sicherstellung, dass das Modell Ergebnisse doppelt prüft, indem URLs aus dem Suchwerkzeug gescrapt werden.
  • Testen unseres Systems mit zukünftigen Reasoning-Modellen, die größere Kontextfenster unterstützen, obwohl dies erhebliche Überarbeitungen und Tests erfordern würde, um den Prompt für ein anderes Modell anzupassen.

tagFazit

Selbst seit der recht aktuellen Veröffentlichung von R1 hat sich die Landschaft deutlich weiterentwickelt. Es sind Projekte entstanden, die Reasoning-Modelle zu bemerkenswert niedrigen Kosten trainieren – einige für nur 5 $. Diese Demokratisierung bedeutet, dass das Training spezialisierter Modelle zugänglicher ist als je zuvor. Unsere Experimente mit R1 liefern eine nützliche Grundlage für die weitere Erforschung, wie Reasoning-fokussierte LLMs mit Tools erweitert werden können, um komplexe Suchaufgaben zu bewältigen.

Während unser Urlaubsplanungsbeispiel vielversprechende Ergebnisse zeigte (besonders für ein schnelles Demo-Projekt), offenbarte es auch R1s Grenzen bei der Bewältigung von Such- und Gedächtnisaufgaben im Vergleich zu seinen Stärken in Mathematik und Programmierung. Während das System erfolgreich einen Reiseplan innerhalb der Budgetbeschränkungen erstellte, hatte es Schwächen in Bereichen wie der Überprüfung zeitkritischer Informationen und der gründlichen Erforschung aller verfügbaren Optionen, was die Lücke zwischen dem Trainingsfokus des Modells und seiner Anwendung in verschiedenen Domänen aufzeigt.

Kategorien:
Tech-Blog
rss_feed
Büros
location_on
Sunnyvale, Kalifornien
710 Lakeway Dr, Ste 200, Sunnyvale, CA 94085, USA
location_on
Berlin, Deutschland (Hauptsitz)
Prinzessinnenstraße 19-20, 10969 Berlin, Deutschland
location_on
Peking, China
Ebene 5, Gebäude 6, Nr. 48 Haidian West St. Peking, China
location_on
Shenzhen, China
402 Etage 4, Fu'an Technology Building, Shenzhen, China
Stiftung durchsuchen
Leser
Einbettungen
Reranker
DeepSearch
Klassifikator
Segmentierer
API-Dokumentation
Jina API-Schlüssel abrufen
Ratenbegrenzung
API-Status
Unternehmen
Über uns
Kontaktieren Sie unseren Vertrieb
Pressemitteilungen
Praktikantenprogramm
Begleiten Sie uns
open_in_new
Logo herunterladen
open_in_new
Bedingungen
Sicherheit
Terms & amp; Bedingungen
Privatsphäre
Cookie-Einstellungen
email
Jina AI © 2020-2025.