Die bessere Alternative zu Brave Search. Tavily bietet KI-generierte Zusammenfassungen, Relevanz-Scores und strukturierte Ergebnisse – und ist komplett kostenlos, im Gegensatz zu Brave (5€/Monat).

Warum Tavily statt Brave?

FeatureTavilyBrave
Kosten✅ Kostenlos❌ 5€/Monat
KI-Zusammenfassung✅ Ja❌ Nein
Relevanz-Score✅ Ja❌ Nein
Strukturierte JSON-Ausgabe✅ Ja❌ Nein
API-LimitGroßzügig (Free-Tier)10k/Monat (bezahlt)

Voraussetzungen & API-SchlĂźssel

Der Tavily API-Schlßssel ist kostenlos! Registriere dich einfach auf tavily.com und du erhältst sofort einen Key.

# 1. Auf https://tavily.com/ registrieren (kostenlos!)
# 2. API-Key kopieren
# 3. In ~/.openclaw/workspace/.env eintragen:
TAVILY_API_KEY=tvly-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Installation

Schritt 1: Verzeichnis anlegen

mkdir -p ~/.openclaw/workspace/skills/tavily-search/scripts

Schritt 2: tavily_search.py erstellen

Erstelle die Datei ~/.openclaw/workspace/skills/tavily-search/scripts/tavily_search.py:

#!/usr/bin/env python3
"""
Tavily Search - Websuche mit KI-generierten Zusammenfassungen
Nutzt die Tavily API fuer strukturierte Suchergebnisse.
"""
import argparse
import json
import os
import sys
import urllib.request
# API-Key aus .env laden
TAVILY_API_KEY = os.getenv('TAVILY_API_KEY', '')
def search(query, depth="basic", max_results=5, include_answer=True):
    """
    Fuehrt Websuche via Tavily API durch.
    
    Args:
        query: Suchbegriff
        depth: "basic" oder "advanced"
        max_results: Anzahl Ergebnisse (1-20)
        include_answer: KI-Zusammenfassung einbeziehen
    
    Returns:
        JSON mit Ergebnissen und Zusammenfassung
    """
    if not TAVILY_API_KEY:
        raise ValueError("TAVILY_API_KEY nicht in .env gefunden!\n"
                        "Holen unter: https://tavily.com/")
    
    url = "https://api.tavily.com/search"
    
    payload = {
        "api_key": TAVILY_API_KEY,
        "query": query,
        "search_depth": depth,
        "max_results": max_results,
        "include_answer": include_answer,
        "include_images": False,
        "include_raw_content": False
    }
    
    headers = {
        "Content-Type": "application/json"
    }
    
    req = urllib.request.Request(
        url,
        data=json.dumps(payload).encode(),
        headers=headers,
        method='POST'
    )
    
    try:
        with urllib.request.urlopen(req, timeout=30) as response:
            return json.loads(response.read().decode())
    except urllib.error.HTTPError as e:
        error_body = e.read().decode()
        raise Exception(f"Tavily API Fehler: {e.code} - {error_body}")
def format_output(data):
    """Formatiert Suchergebnisse fuer Anzeige."""
    output = []
    
    # KI-Zusammenfassung
    answer = data.get('answer', '')
    if answer:
        output.append("=" * 60)
        output.append("ZUSAMMENFASSUNG:")
        output.append("=" * 60)
        output.append(answer)
        output.append("")
    
    # Ergebnisse
    results = data.get('results', [])
    if results:
        output.append("=" * 60)
        output.append(f"ERGEBNISSE ({len(results)}):")
        output.append("=" * 60)
        
        for i, result in enumerate(results, 1):
            title = result.get('title', 'Kein Titel')
            url = result.get('url', '')
            score = result.get('score', 0)
            content = result.get('content', '')[:150]
            
            output.append(f"\n{i}. {title}")
            output.append(f"   URL: {url}")
            output.append(f"   Relevanz: {score:.2f}")
            output.append(f"   {content}...")
    
    return "\n".join(output)
def main():
    parser = argparse.ArgumentParser(description='Tavily Websuche')
    parser.add_argument('query', help='Suchbegriff')
    parser.add_argument('--depth', '-d', choices=['basic', 'advanced'], 
                       default='basic', help='Suchtiefe')
    parser.add_argument('--max-results', '-n', type=int, default=5,
                       help='Anzahl Ergebnisse (1-20)')
    parser.add_argument('--raw', '-r', action='store_true',
                       help='JSON-Output (fuer Weiterverarbeitung)')
    
    args = parser.parse_args()
    
    print(f"Suche: {args.query}")
    print(f"Modus: {args.depth}")
    print(f"Max Ergebnisse: {args.max_results}\n")
    
    try:
        data = search(args.query, args.depth, args.max_results)
        
        if args.raw:
            print(json.dumps(data, indent=2, ensure_ascii=False))
        else:
            print(format_output(data))
            
    except Exception as e:
        print(f"Fehler: {e}", file=sys.stderr)
        sys.exit(1)
if __name__ == '__main__':
    main()

Schritt 3: SKILL.md erstellen

Erstelle unter ~/.openclaw/workspace/skills/tavily-search/SKILL.md:

---
name: tavily-search
description: Web search via Tavily API - kostenlos mit KI-Zusammenfassungen
---
# Tavily Search
KI-gestĂźtzte Websuche mit strukturierten Ergebnissen.
## Features
- ✅ Kostenlos (vs Brave 5€/Monat)
- ✅ KI-generierte Zusammenfassungen
- ✅ Relevanz-Scores
- ✅ JSON-Output
## API-Key
Kostenlos bei https://tavily.com/
## Nutzung
```bash
python3 skills/tavily-search/scripts/tavily_search.py "Suchbegriff"
python3 skills/tavily-search/scripts/tavily_search.py "KI News" --depth advanced --max-results 10
```
## Parameter
- `--depth`: basic oder advanced
- `--max-results`: 1-20
- `--raw`: JSON-Output

Verwendung & Parameter

ParameterBeschreibungStandard
querySuchbegriff (erforderlich)–
--depthSuchtiefe: basic/advancedbasic
--max-resultsAnzahl Ergebnisse (1-20)5
--rawJSON statt formatiertem Textfalse

Beispiele

# Einfache Suche
python3 skills/tavily-search/scripts/tavily_search.py "Was ist die Hauptstadt von Frankreich?"
# Erweiterte Suche mit mehr Ergebnissen
python3 skills/tavily-search/scripts/tavily_search.py "KI Entwicklungen 2026" \
  --depth advanced \
  --max-results 10
# JSON-Output fĂźr Weiterverarbeitung
python3 skills/tavily-search/scripts/tavily_search.py "Python best practices" --raw
# Produkt-Suche
python3 skills/tavily-search/scripts/tavily_search.py "Raspberry Pi 5 best price" \
  --depth advanced \
  --max-results 10

Fehlerbehandlung

„TAVILY_API_KEY nicht gefunden“

  • Auf tavily.com registrieren (kostenlos)
  • API-Key in ~/.openclaw/workspace/.env eintragen: TAVILY_API_KEY=tvly-...

„API Fehler“ / Timeout

  • Internetverbindung prĂźfen
  • Tavily-Status prĂźfen: status.tavily.com
  • API-Key korrekt kopiert? (keine Leerzeichen)

Fertig!

Jetzt hast du eine kostenlose, leistungsstarke Websuche mit KI-Zusammenfassungen. Spart 5€/Monat gegenüber Brave und liefert bessere strukturierte Ergebnisse. 🎉🔍