mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
159 lines
5.2 KiB
Markdown
159 lines
5.2 KiB
Markdown
---
|
|
summary: "Perplexity Search API and Sonar/OpenRouter compatibility for web_search"
|
|
read_when:
|
|
- You want to use Perplexity Search for web search
|
|
- You need PERPLEXITY_API_KEY or OPENROUTER_API_KEY setup
|
|
title: "Perplexity Search"
|
|
---
|
|
|
|
# Perplexity Search API
|
|
|
|
OpenClaw supports Perplexity Search API as a `web_search` provider.
|
|
It returns structured results with `title`, `url`, and `snippet` fields.
|
|
|
|
For compatibility, OpenClaw also supports legacy Perplexity Sonar/OpenRouter setups.
|
|
If you use `OPENROUTER_API_KEY`, an `sk-or-...` key in `tools.web.search.perplexity.apiKey`, or set `tools.web.search.perplexity.baseUrl` / `model`, the provider switches to the chat-completions path and returns AI-synthesized answers with citations instead of structured Search API results.
|
|
|
|
## Getting a Perplexity API key
|
|
|
|
1. Create a Perplexity account at <https://www.perplexity.ai/settings/api>
|
|
2. Generate an API key in the dashboard
|
|
3. Store the key in config or set `PERPLEXITY_API_KEY` in the Gateway environment.
|
|
|
|
## OpenRouter compatibility
|
|
|
|
If you were already using OpenRouter for Perplexity Sonar, keep `provider: "perplexity"` and set `OPENROUTER_API_KEY` in the Gateway environment, or store an `sk-or-...` key in `tools.web.search.perplexity.apiKey`.
|
|
|
|
Optional legacy controls:
|
|
|
|
- `tools.web.search.perplexity.baseUrl`
|
|
- `tools.web.search.perplexity.model`
|
|
|
|
## Config examples
|
|
|
|
### Native Perplexity Search API
|
|
|
|
```json5
|
|
{
|
|
tools: {
|
|
web: {
|
|
search: {
|
|
provider: "perplexity",
|
|
perplexity: {
|
|
apiKey: "pplx-...",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
### OpenRouter / Sonar compatibility
|
|
|
|
```json5
|
|
{
|
|
tools: {
|
|
web: {
|
|
search: {
|
|
provider: "perplexity",
|
|
perplexity: {
|
|
apiKey: "<openrouter-api-key>",
|
|
baseUrl: "https://openrouter.ai/api/v1",
|
|
model: "perplexity/sonar-pro",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
```
|
|
|
|
## Where to set the key
|
|
|
|
**Via config:** run `openclaw configure --section web`. It stores the key in
|
|
`~/.openclaw/openclaw.json` under `tools.web.search.perplexity.apiKey`.
|
|
That field also accepts SecretRef objects.
|
|
|
|
**Via environment:** set `PERPLEXITY_API_KEY` or `OPENROUTER_API_KEY`
|
|
in the Gateway process environment. For a gateway install, put it in
|
|
`~/.openclaw/.env` (or your service environment). See [Env vars](/help/faq#how-does-openclaw-load-environment-variables).
|
|
|
|
If `provider: "perplexity"` is configured and the Perplexity key SecretRef is unresolved with no env fallback, startup/reload fails fast.
|
|
|
|
## Tool parameters
|
|
|
|
These parameters apply to the native Perplexity Search API path.
|
|
|
|
| Parameter | Description |
|
|
| --------------------- | ---------------------------------------------------- |
|
|
| `query` | Search query (required) |
|
|
| `count` | Number of results to return (1-10, default: 5) |
|
|
| `country` | 2-letter ISO country code (e.g., "US", "DE") |
|
|
| `language` | ISO 639-1 language code (e.g., "en", "de", "fr") |
|
|
| `freshness` | Time filter: `day` (24h), `week`, `month`, or `year` |
|
|
| `date_after` | Only results published after this date (YYYY-MM-DD) |
|
|
| `date_before` | Only results published before this date (YYYY-MM-DD) |
|
|
| `domain_filter` | Domain allowlist/denylist array (max 20) |
|
|
| `max_tokens` | Total content budget (default: 25000, max: 1000000) |
|
|
| `max_tokens_per_page` | Per-page token limit (default: 2048) |
|
|
|
|
For the legacy Sonar/OpenRouter compatibility path, only `query` and `freshness` are supported.
|
|
Search API-only filters such as `country`, `language`, `date_after`, `date_before`, `domain_filter`, `max_tokens`, and `max_tokens_per_page` return explicit errors.
|
|
|
|
**Examples:**
|
|
|
|
```javascript
|
|
// Country and language-specific search
|
|
await web_search({
|
|
query: "renewable energy",
|
|
country: "DE",
|
|
language: "de",
|
|
});
|
|
|
|
// Recent results (past week)
|
|
await web_search({
|
|
query: "AI news",
|
|
freshness: "week",
|
|
});
|
|
|
|
// Date range search
|
|
await web_search({
|
|
query: "AI developments",
|
|
date_after: "2024-01-01",
|
|
date_before: "2024-06-30",
|
|
});
|
|
|
|
// Domain filtering (allowlist)
|
|
await web_search({
|
|
query: "climate research",
|
|
domain_filter: ["nature.com", "science.org", ".edu"],
|
|
});
|
|
|
|
// Domain filtering (denylist - prefix with -)
|
|
await web_search({
|
|
query: "product reviews",
|
|
domain_filter: ["-reddit.com", "-pinterest.com"],
|
|
});
|
|
|
|
// More content extraction
|
|
await web_search({
|
|
query: "detailed AI research",
|
|
max_tokens: 50000,
|
|
max_tokens_per_page: 4096,
|
|
});
|
|
```
|
|
|
|
### Domain filter rules
|
|
|
|
- Maximum 20 domains per filter
|
|
- Cannot mix allowlist and denylist in the same request
|
|
- Use `-` prefix for denylist entries (e.g., `["-reddit.com"]`)
|
|
|
|
## Notes
|
|
|
|
- Perplexity Search API returns structured web search results (`title`, `url`, `snippet`)
|
|
- OpenRouter or explicit `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.
|