This guide covers essential best practices for getting the most out of Perplexity’s Search API, including query optimization techniques and efficient async usage patterns for high-performance applications.
Use highly specific queries for more targeted results. For example, instead of searching for “AI”, use a detailed query like “artificial intelligence machine learning healthcare applications 2024”.
Specific queries with context, time frames, and precise terminology yield more relevant and actionable results.
2
Use multi-query for comprehensive research
Break your main topic into related sub-queries to cover all aspects of your research. Use the multi-query search feature to run multiple related queries in a single request for more comprehensive and relevant information.
from perplexity import Perplexityclient = Perplexity()# Comprehensive research with related queriessearch = client.search.create( query=[ "artificial intelligence medical diagnosis accuracy 2024", "machine learning healthcare applications FDA approval", "AI medical imaging radiology deployment hospitals" ], max_results=5)# Access resultsfor result in search.results: print(f" {result.title}: {result.url}")
You can include up to 5 queries in a single multi-query request for efficient batch processing.
3
Handle rate limits efficiently
Implement exponential backoff for rate limit errors and use appropriate batching strategies.
import timeimport randomfrom perplexity import Perplexity, RateLimitErrordef search_with_retry(client, query, max_retries=3): for attempt in range(max_retries): try: return client.search.create(query=query) except RateLimitError: if attempt < max_retries - 1: # Exponential backoff with jitter delay = (2 ** attempt) + random.uniform(0, 1) time.sleep(delay) else: raiseclient = Perplexity()# Usagetry: search = search_with_retry(client, "AI developments") for result in search.results: print(f"{result.title}: {result.url}")except RateLimitError: print("Maximum retries exceeded for search")
4
Process concurrent searches efficiently
Use async for concurrent requests while respecting rate limits.
import asynciofrom perplexity import AsyncPerplexityasync def batch_search(queries, batch_size=3, delay_ms=1000): async with AsyncPerplexity() as client: results = [] for i in range(0, len(queries), batch_size): batch = queries[i:i + batch_size] batch_tasks = [ client.search.create(query=query, max_results=5) for query in batch ] batch_results = await asyncio.gather(*batch_tasks) results.extend(batch_results) # Add delay between batches if i + batch_size < len(queries): await asyncio.sleep(delay_ms / 1000) return results# Usagequeries = ["AI developments", "climate change", "space exploration"]results = asyncio.run(batch_search(queries))print(f"Processed {len(results)} searches")