Skip to main content
Perplexity

Search documentation

Type to search this documentation.

On this pageOverview

Perplexity with LangChain

LangChain gives you chat models and agents. LangGraph adds stateful workflows. This page shows two ways to call Perplexity's Agent API from either one, both grounded on Perplexity end to end.

Bash
pip install -U langchain langchain-perplexity

langchain 1.0 or later provides create_agent and installs LangGraph automatically. langchain-perplexity 1.4.1 or later provides ChatPerplexity with use_responses_api=True.

Bash
export PERPLEXITY_API_KEY="your_api_key_here"

Get API Key

Generate your Perplexity API key from the API portal.

Use ChatPerplexity with use_responses_api=True to route calls to Perplexity's Agent API. Pass the built-in web_search tool for grounded answers.

Python
from langchain_perplexity import ChatPerplexity

llm = ChatPerplexity(
    use_responses_api=True,
    model_kwargs={
        "preset": "medium",
        "tools": [{"type": "web_search"}],
    },
)

response = llm.invoke("What did Perplexity announce most recently?")
print(response.text)

response.text is a property. Do not call response.text().

ChatPerplexity(use_responses_api=True) sends the call to the Agent API, so pick one of two ways to select routing:

  • Pass a preset through model_kwargs. Presets are "fast", "low", "medium", "high", and "xhigh". The preset chooses the current recommended model plus tool defaults for that tier. See Presets for the full list.
  • Set model= explicitly to an Agent API model such as openai/gpt-5.6-sol. See Agent API models.

You can also combine them — an explicit model= overrides the preset's default model while keeping the preset's other defaults.

Passing Perplexity built-in tools and options

Section titled “Passing Perplexity built-in tools and options”

Route Perplexity's built-in tools (web_search, fetch_url) and Agent-API-only fields (like preset) through model_kwargs. That keeps everything the Agent API needs in one place.

Web search filters live inside a filters object on the web_search tool config:

Python
llm = ChatPerplexity(
    use_responses_api=True,
    model_kwargs={
        "preset": "medium",
        "tools": [
            {
                "type": "web_search",
                "filters": {
                    "search_domain_filter": ["docs.perplexity.ai", "developer.mozilla.org"],
                    "search_recency_filter": "week",
                },
            }
        ],
    },
)

See the web_search tool docs for the full filter reference, including domain allowlist and denylist rules and date-range filters.

Create an agent with create_agent from langchain.agents. Do not use langgraph.prebuilt.create_react_agent; that path is deprecated. Pass Perplexity's built-in tools in the agent's tools list.

Python
from langchain.agents import create_agent
from langchain_perplexity import ChatPerplexity

llm = ChatPerplexity(
    use_responses_api=True,
    model_kwargs={"preset": "medium"},
)

agent = create_agent(llm, tools=[{"type": "web_search"}])
result = agent.invoke(
    {"messages": [{"role": "user", "content": "Summarize today's top AI news."}]}
)
print(result["messages"][-1].text)

For agents, put every tool the agent should use in the create_agent tools list, including Perplexity built-ins and any local tools:

Python
agent = create_agent(llm, tools=[{"type": "web_search"}, my_local_tool])

LangChain binds the agent's tools list to the model, so keep tools there rather than in model_kwargs.

To read structured search_results with titles and URLs, call the Agent API directly with the Perplexity SDK:

Python
import os

from perplexity import Perplexity

client = Perplexity()

response = client.responses.create(
    model="openai/gpt-5.6-sol",
    input="What did Perplexity announce most recently?",
    tools=[{"type": "web_search"}],
)

for item in response.output:
    if item.type == "search_results":
        for source in item.results:
            print(source.title, "-", source.url)

See Agent API models for supported models and pricing.

If you already use langchain-openai, point ChatOpenAI at Perplexity's /v1 base URL, set use_responses_api=True, and pass the built-in web_search tool through model_kwargs.

Python
import os

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="https://api.perplexity.ai/v1",
    api_key=os.environ["PERPLEXITY_API_KEY"],
    model="openai/gpt-5.6-sol",
    use_responses_api=True,
    model_kwargs={"tools": [{"type": "web_search"}]},
    extra_body={"preset": "medium"},
)

response = llm.invoke("What did Perplexity announce most recently?")
print(response.text)
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu