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.
Installation
Section titled “Installation”pip install -U langchain langchain-perplexitylangchain 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.
API Key Setup
Section titled “API Key Setup”export PERPLEXITY_API_KEY="your_api_key_here"Get API Key
Generate your Perplexity API key from the API portal.
Chat Model
Section titled “Chat Model”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.
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().
Selecting a model or preset
Section titled “Selecting a model or preset”ChatPerplexity(use_responses_api=True) sends the call to the Agent API, so pick one of two ways to select routing:
- Pass a
presetthroughmodel_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 asopenai/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.
Filtering web search
Section titled “Filtering web search”Web search filters live inside a filters object on the web_search tool config:
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.
LangChain Agent
Section titled “LangChain Agent”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.
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:
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.
Reading Sources
Section titled “Reading Sources”To read structured search_results with titles and URLs, call the Agent API directly with the Perplexity SDK:
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.
langchain-openai Alternate Path
Section titled “langchain-openai Alternate Path”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.
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)