Zum Hauptinhalt springen
Exa ist eine Websuchmaschine, die für KI-Agenten entwickelt wurde. Der Websuch-Endpunkt von Venice kann Ihre Anfragen über Exa ausführen: Setzen Sie search_provider auf "exa", und Venice führt die Suche mit Exa unter Zero Data Retention aus. Sie authentifizieren sich mit Ihrem Venice-API-Schlüssel, Venice rechnet die Suche ab, und Sie benötigen kein Exa-Konto. Die Ergebnisse haben bei jedem Anbieter dasselbe Format, sodass sich Exa in alles einfügt, was Sie auf Basis der standardmäßigen Brave-Suche von Venice gebaut haben. Ein Anbieterwechsel erfordert nur die Änderung eines Feldes. Dieser Leitfaden behandelt den Aufruf des Endpunkts, die Bereitstellung der Exa-Suche als Tool für ein Venice-Modell, das eigene Fundieren eines Prompts in Exa-Ergebnissen und die Frage, wann Sie stattdessen die eigene API von Exa aufrufen sollten.

Voraussetzungen

  • Ein Venice-API-Schlüssel
  • Python 3.10 oder neuer bzw. Node.js 22 oder neuer
  • Für das Agenten-Beispiel ein Venice-Modell, das Function Calling unterstützt. Die Beispiele verwenden z-ai-glm-5-3-flash.

Einrichtung

Installieren Sie das OpenAI SDK sowie requests für Python. Node.js enthält fetch bereits:
Fügen Sie Ihren Venice-API-Schlüssel zur Umgebung hinzu:

Mit Exa suchen

Senden Sie eine Anfrage an /augment/search, wobei search_provider auf "exa" gesetzt ist:
Die Antwort enthält die Anfrage und eine Liste von Ergebnissen mit jeweils vier Feldern:
limit ist standardmäßig 10 und akzeptiert Werte von 1 bis 20, query akzeptiert 1 bis 400 Zeichen. Werte außerhalb dieser Bereiche liefern 400, statt begrenzt zu werden. Behandeln Sie date als optional, da viele Seiten kein Datum veröffentlichen.

Einem Venice-Modell die Exa-Suche bereitstellen

Damit ein Modell entscheiden kann, wann und wonach es sucht, beschreiben Sie eine web_search-Funktion im tools-Array einer Chat-Anfrage und führen die Suche selbst aus, wann immer das Modell sie aufruft. Dieses Programm verpackt die obige Anfrage in eine Such-Hilfsfunktion, gibt die Ergebnisse als tool-Nachricht an das Modell zurück und wiederholt den Vorgang, bis das Modell mit Text antwortet:
Das Modell schreibt nur die Anfrage. Alles andere entscheidet Ihr Code: den Anbieter, die Anzahl der Ergebnisse und was passiert, wenn eine Suche fehlschlägt. Drei Details sollten Sie beibehalten, wenn Sie die Schleife anpassen:
  • Vom Modell geschriebene Anfragen kürzen. Der Endpunkt lehnt Anfragen mit mehr als 400 Zeichen ab, statt sie zu kürzen, und Modelle schreiben manchmal lange Anfragen.
  • Fehler als Tool-Ergebnisse zurückgeben. Eine fehlgeschlagene Suche wird zu einer Tool-Nachricht, die mit Error: beginnt. So kann das Modell eine andere Anfrage versuchen oder den Fehler erklären, statt dass die Schleife abstürzt.
  • Die Assistant-Nachricht vor ihren Tool-Ergebnissen anhängen. Jede tool-Nachricht muss auf den Assistant-Turn folgen, der sie angefordert hat. Wenn Sie das Nachrichtenobjekt selbst anhängen, bleibt außerdem reasoning_content erhalten, das Reasoning-Modelle wie GLM 5.3 Flash zurückgeben. So behält das Modell sein Reasoning über mehrere Runden hinweg.
Das Feld content jedes Ergebnisses enthält Seitentext mit bis zu etwa 10.000 Zeichen, sodass das Modell meist allein anhand der Suchergebnisse antworten kann. Wenn es eine ganze Seite benötigt, fügen Sie ein zweites Tool hinzu, das /augment/scrape aufruft und die Seite als Markdown zurückgibt.

Erst suchen, dann generieren

Mit Function Calling entscheidet das Modell, wann und wonach es sucht. Wenn Ihr Code bereits weiß, wonach gesucht werden soll, können Sie die Tool-Schleife überspringen: Führen Sie eine Exa-Suche aus, nummerieren Sie die Ergebnisse und lassen Sie Venice auf dieser Grundlage antworten. Das funktioniert mit jedem Venice-Textmodell, und da Sie die Liste der Quellen behalten, die in den Prompt eingeflossen sind, lässt sich jedes Zitat in der Antwort einer URL zuordnen. Mit der Such-Hilfsfunktion, dem Client und dem Modell aus dem vorherigen Beispiel:
Zitierte Antworten mit Websuche erweitert dieses Muster um Quellenauswahl, Seiten-Scraping und den Umgang mit Seiten, die nicht geladen werden können. Die dortige Such-Hilfsfunktion nimmt ein Anbieter-Argument entgegen. Übergeben Sie "exa", um sie mit Exa auszuführen.

Die Exa-API direkt verwenden

Der Suchendpunkt von Venice nimmt eine Anfrage und eine Ergebnisanzahl entgegen. Die eigene API von Exa bietet mehr Steuerungsmöglichkeiten: Kategorien für Nachrichten, wissenschaftliche Arbeiten, Unternehmen, Personen und Finanzberichte, Domain- und Datumsfilter, anfragebezogene Highlights und vollständigen Seitentext sowie eine tiefe, mehrstufige Suche. Um diese zu nutzen, rufen Sie Exa direkt mit einem API-Schlüssel aus dem Exa-Dashboard auf. Diese Anfragen gehen von Ihrer Anwendung direkt an Exa, unterliegen den Bedingungen von Exa statt denen von Venice und werden Ihrem Exa-Konto in Rechnung gestellt. Exa bietet Zero Data Retention in Enterprise-Tarifen an. Die Exa-SDKs exa-py und exa-js (ab Version 2.24.0) enthalten Tools im Chat-Completions-Format, die sich direkt in die obige Schleife einfügen lassen. Ersetzen Sie die Tool-Liste durch die Tools von Exa:
Übergeben Sie dann jede Nachricht mit Tool-Aufrufen an das SDK statt an Ihre eigene Tool-Ausführung: messages += exa.openai.handle_tool_calls(message) in Python oder messages.push(...(await exa.openai.handleToolCalls(message))) in Node.js. Das SDK führt jeden Exa-Aufruf aus und gibt die passenden tool-Nachrichten zurück, wobei Fehler als Error:-Ergebnisse gemeldet werden. Behalten Sie die Begrenzung des Seitentexts bei, da exa-js ohne sie ganze Seiten zurückgibt. Schlüsselwortargumente wie category, include_domains und start_published_date werden an die Exa-Suche durchgereicht. Alle Optionen finden Sie im Tool-Calling-Leitfaden von Exa.

Empfohlene Modelle

Modell-IDs ändern sich. Ermitteln Sie den aktuellen Function-Calling-Standard zur Laufzeit mit GET /models/traits, oder durchsuchen Sie die Textmodelle nach weiteren Modellen mit Function-Calling-Unterstützung.

Datenschutz

Mit search_provider: "exa" kommuniziert Ihre Anwendung nur mit Venice, und Venice führt jede Suche mit Exa unter Zero Data Retention aus. Venice speichert keine Prompt- oder Antwortinhalte, und die Datenschutzstufe des Modells bestimmt, was auf der Inferenzebene geschieht. Private Modelle laufen auf einer Infrastruktur mit Zero Data Retention. Leicht übersehen wird, dass das Modell Suchanfragen aus dem Gesprächsverlauf formuliert, sodass Details aus einem Prompt in einer an Exa gesendeten Anfrage landen können. Wenn Prompts personenbezogene oder vertrauliche Informationen enthalten können, weisen Sie das Modell in Ihrem System-Prompt an, diese Details aus Suchanfragen herauszuhalten, oder verwenden Sie das Muster „Erst suchen“, sodass Ihr eigener Code jede Anfrage schreibt. Wenn Sie die Exa-API direkt aufrufen, gehen diese Anfragen stattdessen gemäß den Bedingungen von Exa an Exa.

Kosten

Jede Suche kostet 0,01 bzw.10bzw. 10 pro 1.000 Suchen, genauso viel wie eine Brave- oder Google-Suche. Venice rechnet sie zusammen mit den Tokens Ihrer Chat-Anfragen über Ihr Venice-Konto ab, sodass keine separate Exa-Rechnung anfällt. Suchen, die mit einem Fehler fehlschlagen, werden nicht berechnet, eine Suche ohne Ergebnisse dagegen schon. Suchergebnisse gehen in der nächsten Runde als Eingabe an das Modell zurück, und da sie Seitentext enthalten, fügt eine Suche mit fünf Ergebnissen oft 5.000 bis 10.000 Eingabe-Tokens hinzu. Einige Gewohnheiten halten beides niedrig:
  • Senken Sie limit, wenn wenige Quellen ausreichen. Eine Suche kostet bei jedem limit gleich viel, aber weniger Ergebnisse bedeuten weniger Eingabe-Tokens in der nächsten Runde.
  • Halten Sie max_rounds niedrig. Jede zusätzliche Runde kann sowohl Suchen als auch Tokens hinzufügen.
  • Verwenden Sie das Muster „Erst suchen“, wenn Ihr Code weiß, wonach gesucht werden soll. Es führt genau eine Suche und eine Chat-Anfrage aus.
Agenten mit einer Krypto-Wallet können auf den API-Schlüssel verzichten. /augment/search und /chat/completions akzeptieren beide die x402-Wallet-Authentifizierung, sodass ein Agent Exa-Suchen und Inferenz aus einem einzigen vorausbezahlten USDC-Guthaben bezahlen kann.

Fehlerbehebung

Stellen Sie sicher, dass VENICE_API_KEY in dem Prozess gesetzt ist, der Ihren Code ausführt. Ohne diese Variable löst Python KeyError: 'VENICE_API_KEY' aus, und das Node.js OpenAI SDK greift auf OPENAI_API_KEY zurück. Ist auch diese nicht gesetzt, erhalten Sie einen Missing credentials-Fehler. Ist sie gesetzt, sendet das SDK Ihren OpenAI-Schlüssel an Venice, das ihn mit 401 ablehnt. Ein 401 bei gesetztem VENICE_API_KEY bedeutet, dass Venice den Schlüssel selbst abgelehnt hat. Prüfen Sie ihn daher auf Tippfehler oder erstellen Sie einen neuen.
query muss 1 bis 400 Zeichen lang sein, limit muss zwischen 1 und 20 liegen, und search_provider muss brave, google oder exa sein. Werte außerhalb dieser Bereiche werden abgelehnt, statt begrenzt zu werden. In der Tool-Schleife erreicht eine abgelehnte Suche das Modell als Error:-Tool-Ergebnis, statt eine Ausnahme auszulösen.
Ihr Venice-Guthaben reicht für die Anfrage nicht aus. Anfragen mit einem API-Schlüssel liefern INSUFFICIENT_BALANCE. Laden Sie in diesem Fall Ihr Venice-Guthaben auf. Anfragen mit x402-Wallet-Authentifizierung enthalten in der Antwort Anweisungen zum Aufladen.
Einige Modelle, darunter Claude- und GPT-Modelle, liefern 400, wenn auf einen Tool-Aufruf keine tool-Nachricht mit dessen tool_call_id folgt. GLM-Modelle akzeptieren den Gesprächsverlauf trotzdem, daher kann dieser Fehler erstmals auftreten, wenn Sie das Modell wechseln. Die Schleife beantwortet jeden Aufruf direkt nach der Assistant-Nachricht, die ihn ausgelöst hat. Behalten Sie diese Struktur bei, wenn Sie Tools hinzufügen.
Prüfen Sie, ob das Modell Function Calling unterstützt, und geben Sie im System-Prompt an, wann gesucht werden soll. Modelle überspringen das Tool oft, wenn sie glauben, aus dem Gedächtnis antworten zu können, sofern Sie sie nicht anweisen, nach aktuellen oder spezifischen Fakten zu suchen.

Ressourcen

Web Search API

Parameter, Suchanbieter und das Antwortschema

Zitierte Antworten

Eine vollständige Pipeline zum Suchen, Scrapen und Zitieren auf Venice

Function Calling

So funktionieren Tool-Aufrufe auf Venice

Exa-Dokumentation

Die eigene API, SDKs und Suchoptionen von Exa