一键导入
exa-research
// Use when researching products, finding academic papers, discovering competitors, reading webpage content, or getting cited answers grounded in real web sources. Use over generic search when semantic relevance matters.
// Use when researching products, finding academic papers, discovering competitors, reading webpage content, or getting cited answers grounded in real web sources. Use over generic search when semantic relevance matters.
Use when the user wants real-time web, news, or X/Twitter results with AI-summarized answers and citations — Grok Live Search via BlockRun. Cheapest path for "what just happened" questions where freshness beats neural-semantic ranking.
Use when the user needs to run isolated code remotely — a disposable container, optional GPU access (T4 → H100), or a safer place for untrusted / heavy code. Prefer local execution for normal repo work; use Modal sandboxes for isolation, hardware access, or one-shot heavy compute.
Use when the user wants phone-number intelligence (lookup, carrier, line type, SIM-swap / call-forwarding fraud signals), US/CA number provisioning (rent a phone number), or outbound AI voice calls (Bland.ai under the hood — schedule, confirm, follow-up). Pay per call in USDC.
Use when the user wants crypto data — token prices, on-chain SQL, prediction-market positions, CEX order books, wallet labels/net-worth, social mindshare, news, or a Surf-1.5 chat answer with citations. 84 endpoints across exchange, on-chain, wallet, social, prediction, news, search, and chat — one API, pay-per-call in USDC via x402. Settles directly to Surf's Base treasury; no Surf account needed.
Use when user asks about event probabilities, prediction market odds, what people are betting on, Polymarket or Kalshi prices, sports markets, wallet identity / clustering, or wants to find markets on a specific topic (elections, crypto, sports, macro events). Predexon v2 endpoints (canonical cross-venue markets, sports, wallet identity, keyset pagination) live in production as of 2026-05.
Use when generating or editing images via `blockrun_image` — especially with GPT Image 2, DALL-E 3, or Flux for posters, UI mockups, marketing assets, product shots, or anything with on-image text. Turns vague user requests ("make me a cool poster") into structured, text-accurate prompts that actually render what you asked for.
| name | exa-research |
| description | Use when researching products, finding academic papers, discovering competitors, reading webpage content, or getting cited answers grounded in real web sources. Use over generic search when semantic relevance matters. |
| triggers | ["research","web research","find papers","academic papers","competitor discovery","find similar sites","exa search","cited answer","scrape webpage","neural search","semantic search","look up sources"] |
Neural web search via BlockRun. Understands meaning, not keywords. Four distinct actions for different research modes.
As of v0.14.1 the blockrun_exa tool is path-based. Pass the endpoint name as path and the request as body:
blockrun_exa({ path: "search", body: { query: "AI agent frameworks 2026", numResults: 10 } })
blockrun_exa({ path: "answer", body: { query: "What is speculative decoding?" } })
blockrun_exa({ path: "contents", body: { urls: ["https://example.com/a", "https://example.com/b"] } })
blockrun_exa({ path: "find-similar", body: { url: "https://arxiv.org/abs/2401.12345", numResults: 5 } })
| User wants... | Path | Body | Cost |
|---|---|---|---|
| Relevant URLs on a topic | search | { query, numResults?, category? } | $0.01/call |
| Cited answer to a question | answer | { query } | $0.01/call |
| Full text of URLs | contents | { urls: [...] } | $0.002/URL |
| Pages like a given URL | find-similar | { url, numResults? } | $0.01/call |
| Recent news | search + category: "news" | – | $0.01/call |
| Academic papers | search + category: "research paper" | – | $0.01/call |
| Company info | search + category: "company" | – | $0.01/call |
Valid category values for search: "news", "research paper", "company", "tweet", "github", "pdf".
from blockrun_llm import setup_agent_wallet
chain = open(os.path.expanduser("~/.blockrun/.chain")).read().strip() if os.path.exists(os.path.expanduser("~/.blockrun/.chain")) else "base"
if chain == "solana":
from blockrun_llm import setup_agent_solana_wallet
client = setup_agent_solana_wallet()
else:
from blockrun_llm import setup_agent_wallet
client = setup_agent_wallet()
# Basic search
result = client._request_with_payment_raw("/v1/exa/search", {
"query": "AI agent frameworks 2025",
"numResults": 10,
})
for r in result.get("results", []):
print(f"{r['title']} — {r['url']}")
# Filter by category
result = client._request_with_payment_raw("/v1/exa/search", {
"query": "transformer architecture improvements",
"numResults": 10,
"category": "research paper",
})
# Restrict to specific domains
result = client._request_with_payment_raw("/v1/exa/search", {
"query": "prediction market regulation",
"numResults": 10,
"includeDomains": ["reuters.com", "bloomberg.com", "wsj.com"],
})
Categories: "news", "research paper", "company", "tweet", "github", "pdf"
Use when the user asks a factual question and needs reliable sources (not Claude's training data).
result = client._request_with_payment_raw("/v1/exa/answer", {
"query": "What is the current market cap of Polymarket?",
})
print(result.get("answer", ""))
for c in result.get("citations", []):
print(f" [{c.get('title')}] {c.get('url')}")
Use when you have URLs and need their full text for LLM context (scraping without a browser).
urls = [
"https://example.com/article-1",
"https://example.com/article-2",
]
result = client._request_with_payment_raw("/v1/exa/contents", {
"urls": urls,
})
for item in result.get("results", []):
print(f"=== {item['url']} ===")
print(item.get("text", "")[:500])
Up to 100 URLs per call. Returns Markdown-ready text.
Use to discover competitors, related research, or sites with similar content.
result = client._request_with_payment_raw("/v1/exa/find-similar", {
"url": "https://polymarket.com",
"numResults": 10,
})
for r in result.get("results", []):
print(f"{r['title']} — {r['url']}")
Competitor discovery:
# 1. Find similar companies
similar = client._request_with_payment_raw("/v1/exa/find-similar", {"url": "https://target-company.com", "numResults": 15})
urls = [r["url"] for r in similar.get("results", [])]
# 2. Fetch their about pages
contents = client._request_with_payment_raw("/v1/exa/contents", {"urls": urls[:10]})
Research synthesis:
# 1. Find papers
papers = client._request_with_payment_raw("/v1/exa/search", {
"query": "your topic",
"category": "research paper",
"numResults": 20,
})
# 2. Get answer with citations
answer = client._request_with_payment_raw("/v1/exa/answer", {
"query": "What are the key findings on your topic?",
})
client.search()Use blockrun_exa / _request_with_payment_raw | Use client.search() |
|---|---|
| Finding specific URLs and fetching content | Getting a summarized answer with citations |
| Semantic similarity search | Web + X/Twitter + news combined |
| Academic paper discovery | Cheaper per call for simple lookups |
| Domain-filtered research | Already returns a SearchResult object |
pip install blockrun-llmclient.get_balance())_request_with_payment_raw is the Python SDK entry point for Exa (no dedicated method yet)