mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-24 08:21:39 +00:00
docs(tools): add Exa Search page, align all search provider docs
New page: tools/exa-search.md - Neural/keyword/hybrid search modes with content extraction - Tool parameters including contents (highlights, text, summary) - Search mode reference table Rewritten: tools/duckduckgo-search.md - Aligned to consistent template (Setup, Config, Tool parameters, Notes, Related) - Simplified from previous version Aligned across all providers: - Every search page now ends with a consistent ## Related section - Replaced 'See [Web tools]' with proper Related links - Added Exa + DuckDuckGo to web.md overview CardGroup and comparison table - Added Exa to docs.json nav and redirects
This commit is contained in:
@@ -92,6 +92,10 @@
|
||||
"source": "/duckduckgo-search",
|
||||
"destination": "/tools/duckduckgo-search"
|
||||
},
|
||||
{
|
||||
"source": "/exa-search",
|
||||
"destination": "/tools/exa-search"
|
||||
},
|
||||
{
|
||||
"source": "/gemini-search",
|
||||
"destination": "/tools/gemini-search"
|
||||
@@ -1127,6 +1131,7 @@
|
||||
"tools/web",
|
||||
"tools/brave-search",
|
||||
"tools/duckduckgo-search",
|
||||
"tools/exa-search",
|
||||
"tools/firecrawl",
|
||||
"tools/gemini-search",
|
||||
"tools/grok-search",
|
||||
|
||||
@@ -90,4 +90,8 @@ await web_search({
|
||||
- The Search plan includes the LLM Context endpoint and AI inference rights. Storing results to train or tune models requires a plan with explicit storage rights. See the Brave [Terms of Service](https://api-dashboard.search.brave.com/terms-of-service).
|
||||
- Results are cached for 15 minutes by default (configurable via `cacheTtlMinutes`).
|
||||
|
||||
See [Web tools](/tools/web) for the full web_search configuration.
|
||||
## Related
|
||||
|
||||
- [Web Search overview](/tools/web) -- all providers and auto-detection
|
||||
- [Perplexity Search](/tools/perplexity-search) -- structured results with domain filtering
|
||||
- [Exa Search](/tools/exa-search) -- neural search with content extraction
|
||||
|
||||
@@ -13,52 +13,23 @@ OpenClaw supports DuckDuckGo as a **key-free** `web_search` provider. No API
|
||||
key or account is required.
|
||||
|
||||
<Warning>
|
||||
DuckDuckGo is an **unofficial, HTML-based** integration. It scrapes
|
||||
DuckDuckGo's non-JavaScript search pages, not an official API or SDK.
|
||||
Expect occasional breakage from bot-challenge pages or HTML changes.
|
||||
Use it as a convenient fallback, not a production-grade provider.
|
||||
DuckDuckGo is an **unofficial, HTML-based** integration, not an official API.
|
||||
Expect occasional breakage from bot-challenge pages or HTML changes. Use it
|
||||
as a convenient fallback, not a production-grade provider.
|
||||
</Warning>
|
||||
|
||||
## Quick start
|
||||
## Setup
|
||||
|
||||
DuckDuckGo requires no API key. Just set it as your provider:
|
||||
No API key needed. Set DuckDuckGo as your provider:
|
||||
|
||||
```bash
|
||||
openclaw configure --section web
|
||||
# Select "duckduckgo" as the provider
|
||||
```
|
||||
|
||||
Or set the provider directly in config:
|
||||
|
||||
```json5
|
||||
{
|
||||
tools: {
|
||||
web: {
|
||||
search: {
|
||||
provider: "duckduckgo",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
That's it — no keys, no plugin config, no environment variables.
|
||||
|
||||
## How it works
|
||||
|
||||
Unlike API-backed providers (Brave, Perplexity, Tavily), DuckDuckGo search
|
||||
works by:
|
||||
|
||||
1. Sending an HTTP request to DuckDuckGo's non-JavaScript search endpoint
|
||||
2. Parsing the HTML response to extract search results
|
||||
3. Returning structured results with titles, URLs, and snippets
|
||||
|
||||
This approach means:
|
||||
|
||||
- **No API key needed** — works out of the box
|
||||
- **No rate limits from an API plan** — but DuckDuckGo may serve bot-challenge
|
||||
pages under heavy use
|
||||
- **Results may differ** from what you see in DuckDuckGo's full web interface
|
||||
<Steps>
|
||||
<Step title="Configure">
|
||||
```bash
|
||||
openclaw configure --section web
|
||||
# Select "duckduckgo" as the provider
|
||||
```
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Config
|
||||
|
||||
@@ -67,7 +38,6 @@ This approach means:
|
||||
tools: {
|
||||
web: {
|
||||
search: {
|
||||
enabled: true,
|
||||
provider: "duckduckgo",
|
||||
},
|
||||
},
|
||||
@@ -75,43 +45,38 @@ This approach means:
|
||||
}
|
||||
```
|
||||
|
||||
No `plugins.entries` config is needed — DuckDuckGo has no API key or plugin-specific settings.
|
||||
No `plugins.entries` config is needed — DuckDuckGo has no API key or
|
||||
plugin-specific settings.
|
||||
|
||||
## Supported parameters
|
||||
## Tool parameters
|
||||
|
||||
DuckDuckGo search supports the standard `query` and `count` parameters.
|
||||
Provider-specific filters like `country`, `language`, `freshness`, and
|
||||
`domain_filter` are not supported.
|
||||
| Parameter | Description |
|
||||
| --------- | ------------------------------ |
|
||||
| `query` | Search query (required) |
|
||||
| `count` | Results to return (default: 5) |
|
||||
|
||||
## Limitations
|
||||
DuckDuckGo does not support provider-specific filters like `country`,
|
||||
`language`, `freshness`, or `domain_filter`.
|
||||
|
||||
- **Unofficial integration** — not backed by a DuckDuckGo API or SDK
|
||||
## Notes
|
||||
|
||||
- **No API key** — works out of the box, zero configuration
|
||||
- **Unofficial** — scrapes DuckDuckGo's non-JavaScript search pages, not an
|
||||
official API or SDK
|
||||
- **Bot-challenge risk** — DuckDuckGo may serve CAPTCHAs or block requests
|
||||
under heavy or automated use
|
||||
- **HTML parsing** — results depend on DuckDuckGo's page structure, which can
|
||||
change without notice
|
||||
- **No advanced filters** — only `query` and `count` are supported
|
||||
- **Best-effort reliability** — treat this as a fallback, not a primary
|
||||
provider for production use
|
||||
- **HTML parsing** — results depend on page structure, which can change without
|
||||
notice
|
||||
- **Best-effort reliability** — treat as a fallback for development, demos, or
|
||||
environments where no API key is available
|
||||
|
||||
## When to use DuckDuckGo
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Good for" icon="check">
|
||||
Quick local development, demos, testing, or environments where no API key
|
||||
is available
|
||||
</Card>
|
||||
<Card title="Not recommended for" icon="x">
|
||||
Production gateways, high-volume search, or workflows requiring reliable
|
||||
uptime
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
For production use, consider [Brave Search](/tools/brave-search) (free tier
|
||||
available) or another API-backed provider.
|
||||
<Tip>
|
||||
For production use, consider [Brave Search](/tools/brave-search) (free tier
|
||||
available) or another API-backed provider.
|
||||
</Tip>
|
||||
|
||||
## Related
|
||||
|
||||
- [Web Search overview](/tools/web) -- all providers and auto-detection
|
||||
- [Brave Search](/tools/brave-search) -- structured results with free tier
|
||||
- [Gemini Search](/tools/gemini-search) -- AI-synthesized answers (also no search-specific key if you have a Gemini key)
|
||||
- [Exa Search](/tools/exa-search) -- neural search with content extraction
|
||||
|
||||
119
docs/tools/exa-search.md
Normal file
119
docs/tools/exa-search.md
Normal file
@@ -0,0 +1,119 @@
|
||||
---
|
||||
summary: "Exa AI search -- neural and keyword search with content extraction"
|
||||
read_when:
|
||||
- You want to use Exa for web_search
|
||||
- You need an EXA_API_KEY
|
||||
- You want neural search or content extraction
|
||||
title: "Exa Search"
|
||||
---
|
||||
|
||||
# Exa Search
|
||||
|
||||
OpenClaw supports [Exa AI](https://exa.ai/) as a `web_search` provider. Exa
|
||||
offers neural, keyword, and hybrid search modes with built-in content
|
||||
extraction (highlights, text, summaries).
|
||||
|
||||
## Get an API key
|
||||
|
||||
<Steps>
|
||||
<Step title="Create an account">
|
||||
Sign up at [exa.ai](https://exa.ai/) and generate an API key from your
|
||||
dashboard.
|
||||
</Step>
|
||||
<Step title="Store the key">
|
||||
Set `EXA_API_KEY` in the Gateway environment, or configure via:
|
||||
|
||||
```bash
|
||||
openclaw configure --section web
|
||||
```
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Config
|
||||
|
||||
```json5
|
||||
{
|
||||
plugins: {
|
||||
entries: {
|
||||
exa: {
|
||||
config: {
|
||||
webSearch: {
|
||||
apiKey: "exa-...", // optional if EXA_API_KEY is set
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
tools: {
|
||||
web: {
|
||||
search: {
|
||||
provider: "exa",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
**Environment alternative:** set `EXA_API_KEY` in the Gateway environment.
|
||||
For a gateway install, put it in `~/.openclaw/.env`.
|
||||
|
||||
## Tool parameters
|
||||
|
||||
| Parameter | Description |
|
||||
| ------------- | ----------------------------------------------------------------------------- |
|
||||
| `query` | Search query (required) |
|
||||
| `count` | Results to return (1-100) |
|
||||
| `type` | Search mode: `auto`, `neural`, `fast`, `deep`, `deep-reasoning`, or `instant` |
|
||||
| `freshness` | Time filter: `day`, `week`, `month`, or `year` |
|
||||
| `date_after` | Results after this date (YYYY-MM-DD) |
|
||||
| `date_before` | Results before this date (YYYY-MM-DD) |
|
||||
| `contents` | Content extraction options (see below) |
|
||||
|
||||
### Content extraction
|
||||
|
||||
Exa can return extracted content alongside search results. Pass a `contents`
|
||||
object to enable:
|
||||
|
||||
```javascript
|
||||
await web_search({
|
||||
query: "transformer architecture explained",
|
||||
type: "neural",
|
||||
contents: {
|
||||
text: true, // full page text
|
||||
highlights: { numSentences: 3 }, // key sentences
|
||||
summary: true, // AI summary
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
| Contents option | Type | Description |
|
||||
| --------------- | --------------------------------------------------------------------- | ---------------------- |
|
||||
| `text` | `boolean \| { maxCharacters }` | Extract full page text |
|
||||
| `highlights` | `boolean \| { maxCharacters, query, numSentences, highlightsPerUrl }` | Extract key sentences |
|
||||
| `summary` | `boolean \| { query }` | AI-generated summary |
|
||||
|
||||
### Search modes
|
||||
|
||||
| Mode | Description |
|
||||
| ---------------- | --------------------------------- |
|
||||
| `auto` | Exa picks the best mode (default) |
|
||||
| `neural` | Semantic/meaning-based search |
|
||||
| `fast` | Quick keyword search |
|
||||
| `deep` | Thorough deep search |
|
||||
| `deep-reasoning` | Deep search with reasoning |
|
||||
| `instant` | Fastest results |
|
||||
|
||||
## Notes
|
||||
|
||||
- `freshness` and `date_after`/`date_before` cannot be combined — use one
|
||||
time-filter mode
|
||||
- Results are cached for 15 minutes by default (configurable via
|
||||
`cacheTtlMinutes`)
|
||||
- Exa is an official API integration with structured JSON responses
|
||||
|
||||
## Related
|
||||
|
||||
- [Web Search overview](/tools/web) -- all providers and auto-detection
|
||||
- [Brave Search](/tools/brave-search) -- structured results with country/language filters
|
||||
- [Perplexity Search](/tools/perplexity-search) -- structured results with domain filtering
|
||||
@@ -137,4 +137,8 @@ than basic-only scraping.
|
||||
2. Firecrawl (if configured)
|
||||
3. Basic HTML cleanup (last fallback)
|
||||
|
||||
See [Web Search](/tools/web) for the full provider setup and comparison.
|
||||
## Related
|
||||
|
||||
- [Web Search overview](/tools/web) -- all providers and auto-detection
|
||||
- [Web Fetch](/tools/web-fetch) -- web_fetch tool with Firecrawl fallback
|
||||
- [Tavily](/tools/tavily) -- search + extract tools
|
||||
|
||||
@@ -170,5 +170,9 @@ await web_search({
|
||||
- OpenRouter or explicit `plugins.entries.perplexity.config.webSearch.baseUrl` / `model` switches Perplexity back to Sonar chat completions for compatibility
|
||||
- Results are cached for 15 minutes by default (configurable via `cacheTtlMinutes`)
|
||||
|
||||
See [Web tools](/tools/web) for the full web_search configuration.
|
||||
See [Perplexity Search API docs](https://docs.perplexity.ai/docs/search/quickstart) for more details.
|
||||
## Related
|
||||
|
||||
- [Web Search overview](/tools/web) -- all providers and auto-detection
|
||||
- [Perplexity Search API docs](https://docs.perplexity.ai/docs/search/quickstart) -- official Perplexity documentation
|
||||
- [Brave Search](/tools/brave-search) -- structured results with country/language filters
|
||||
- [Exa Search](/tools/exa-search) -- neural search with content extraction
|
||||
|
||||
@@ -122,4 +122,8 @@ Tips:
|
||||
| Search with depth, topic, AI answers | `tavily_search` |
|
||||
| Extract content from specific URLs | `tavily_extract` |
|
||||
|
||||
See [Web Search](/tools/web) for the full provider setup and comparison.
|
||||
## Related
|
||||
|
||||
- [Web Search overview](/tools/web) -- all providers and auto-detection
|
||||
- [Firecrawl](/tools/firecrawl) -- search + scraping with content extraction
|
||||
- [Exa Search](/tools/exa-search) -- neural search with content extraction
|
||||
|
||||
@@ -52,6 +52,9 @@ returns results. Results are cached by query for 15 minutes (configurable).
|
||||
<Card title="DuckDuckGo" icon="bird" href="/tools/duckduckgo-search">
|
||||
Key-free fallback. No API key needed. Unofficial HTML-based integration.
|
||||
</Card>
|
||||
<Card title="Exa" icon="brain" href="/tools/exa-search">
|
||||
Neural + keyword search with content extraction (highlights, text, summaries).
|
||||
</Card>
|
||||
<Card title="Firecrawl" icon="flame" href="/tools/firecrawl">
|
||||
Structured results. Best paired with `firecrawl_search` and `firecrawl_scrape` for deep extraction.
|
||||
</Card>
|
||||
@@ -78,6 +81,7 @@ returns results. Results are cached by query for 15 minutes (configurable).
|
||||
| -------------------------------------- | -------------------------- | ------------------------------------------------ | ------------------------------------------- |
|
||||
| [Brave](/tools/brave-search) | Structured snippets | Country, language, time, `llm-context` mode | `BRAVE_API_KEY` |
|
||||
| [DuckDuckGo](/tools/duckduckgo-search) | Structured snippets | -- | None (key-free) |
|
||||
| [Exa](/tools/exa-search) | Structured + extracted | Neural/keyword mode, date, content extraction | `EXA_API_KEY` |
|
||||
| [Firecrawl](/tools/firecrawl) | Structured snippets | Via `firecrawl_search` tool | `FIRECRAWL_API_KEY` |
|
||||
| [Gemini](/tools/gemini-search) | AI-synthesized + citations | -- | `GEMINI_API_KEY` |
|
||||
| [Grok](/tools/grok-search) | AI-synthesized + citations | -- | `XAI_API_KEY` |
|
||||
|
||||
Reference in New Issue
Block a user