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?
| Feature | Tavily | Brave |
|---|---|---|
| Kosten | â Kostenlos | â 5âŹ/Monat |
| KI-Zusammenfassung | â Ja | â Nein |
| Relevanz-Score | â Ja | â Nein |
| Strukturierte JSON-Ausgabe | â Ja | â Nein |
| API-Limit | GroĂ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
| Parameter | Beschreibung | Standard |
|---|---|---|
query | Suchbegriff (erforderlich) | â |
--depth | Suchtiefe: basic/advanced | basic |
--max-results | Anzahl Ergebnisse (1-20) | 5 |
--raw | JSON statt formatiertem Text | false |
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/.enveintragen: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. đđ