Perplexity AI

Perplexity AI (pplx-api)

LiteLLM에서 Perplexity AI의 모델을 사용하는 방법을 알아봐요. 잘 알려진 sonar 모델과 Agent API(Responses API)를 모두 지원해요.

출처: 문서

본문

API 키

# env variable
os.environ['PERPLEXITYAI_API_KEY']

사용 예시

from litellm import completion
import os

os.environ['PERPLEXITYAI_API_KEY'] = ""
response = completion(
    model="perplexity/sonar-pro",
    messages=messages
)
print(response)

사용 예시 - 스트리밍

from litellm import completion
import os

os.environ['PERPLEXITYAI_API_KEY'] = ""
response = completion(
    model="perplexity/sonar-pro",
    messages=messages,
    stream=True
)

for chunk in response:
    print(chunk)

추론 노력 (Reasoning Effort)

v1.72.6+ 필요

info: LiteLLM에서의 Reasoning 전체 가이드는 여기를 참고해요.

reasoning_effort 파라미터로 추론 노력을 설정할 수 있어요.

from litellm import completion
import os

os.environ['PERPLEXITYAI_API_KEY'] = ""
response = completion(
    model="perplexity/sonar-reasoning",
    messages=messages,
    reasoning_effort="high"
)
print(response)

config.yaml:

model_list:
  - model_name: perplexity-sonar-reasoning-model
    litellm_params:
        model: perplexity/sonar-reasoning
        api_key: os.environ/PERPLEXITYAI_API_KEY

Proxy 시작:

litellm --config /path/to/config.yaml

테스트:

curl http://0.0.0.0:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "model": "perplexity-sonar-reasoning-model",
    "messages": [{"role": "user", "content": "Who won the World Cup in 2022?"}],
    "reasoning_effort": "high"
  }'

지원 모델

https://docs.perplexity.ai/docs/model-cards 에 있는 모든 모델을 지원해요. model=perplexity/를 사용하면 돼요.

모델명 함수 호출
sonar-deep-research completion(model="perplexity/sonar-deep-research", messages)
sonar-reasoning-pro completion(model="perplexity/sonar-reasoning-pro", messages)
sonar-reasoning completion(model="perplexity/sonar-reasoning", messages)
sonar-pro completion(model="perplexity/sonar-pro", messages)
sonar completion(model="perplexity/sonar", messages)
r1-1776 completion(model="perplexity/r1-1776", messages)

Agent API (Responses API)

v1.72.6+ 필요

프리셋 사용

프리셋은 특정 사용 사례에 최적화된 기본값을 제공해요. 빠른 설정을 위해 프리셋으로 시작해요:

from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

# Using the pro-search preset
response = responses(
    model="perplexity/preset/pro-search",
    input="What are the latest developments in AI?",
    custom_llm_provider="perplexity",
)

print(response.output)

config.yaml:

model_list:
  - model_name: perplexity-pro-search
    litellm_params:
        model: perplexity/preset/pro-search
        api_key: os.environ/PERPLEXITY_API_KEY

Proxy 시작:

litellm --config /path/to/config.yaml

테스트:

curl http://0.0.0.0:4000/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "model": "perplexity-pro-search",
    "input": "What are the latest developments in AI?"
  }'

타사 모델 사용

Perplexity의 통합 API를 통해 OpenAI, Anthropic, Google, xAI 등 제공사의 모델에 접근할 수 있어요:

from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/openai/gpt-5.6-terra",
    input="Explain quantum computing in simple terms",
    custom_llm_provider="perplexity",
    max_output_tokens=500,
)

print(response.output)
from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/anthropic/claude-sonnet-5",
    input="Write a short story about a robot learning to paint",
    custom_llm_provider="perplexity",
    max_output_tokens=500,
)

print(response.output)
from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/google/gemini-3.8-flash",
    input="Explain the concept of neural networks",
    custom_llm_provider="perplexity",
    max_output_tokens=500,
)

print(response.output)
from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/xai/grok-4-1-fast-non-reasoning",
    input="What makes a good AI assistant?",
    custom_llm_provider="perplexity",
    max_output_tokens=500,
)

print(response.output)

웹 검색 도구

실시간 정보에 접근하는 웹 검색 기능을 활성화할 수 있어요:

from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/openai/gpt-5.6-terra",
    input="What's the weather in San Francisco today?",
    custom_llm_provider="perplexity",
    tools=[{"type": "web_search"}],
    instructions="You have access to a web_search tool. Use it for questions about current events.",
)

print(response.output)

함수 호출

Agent API는 사용자 정의 함수 도구를 지원해요. 함수 도구를 그대로 전달해요:

from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/openai/gpt-5.6-terra",
    input="What's the weather in San Francisco?",
    custom_llm_provider="perplexity",
    tools=[
        {"type": "web_search"},
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Get the current weather for a location",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {"type": "string"},
                        "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                    },
                },
            },
        },
    ],
    instructions="Use tools when appropriate.",
)

print(response.output)

구조화 출력

text 파라미터를 통해 JSON 스키마 구조화 출력을 요청할 수 있어요:

from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/preset/pro-search",
    input="Extract key facts about the Eiffel Tower",
    custom_llm_provider="perplexity",
    text={
        "format": {
            "type": "json_schema",
            "name": "facts",
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "height_meters": {"type": "number"},
                    "year_built": {"type": "integer"},
                },
                "required": ["name", "height_meters", "year_built"],
            },
            "strict": True,
        }
    },
)

print(response.output)

추론 노력 (Responses API)

추론 가능한 모델의 추론 노력 수준을 제어할 수 있어요:

from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/openai/gpt-5.6-terra",
    input="Solve this complex problem step by step",
    custom_llm_provider="perplexity",
    reasoning={"effort": "high"},  # Options: low, medium, high
    max_output_tokens=1000,
)

print(response.output)

다중 턴 대화

컨텍스트가 있는 다중 턴 대화에는 메시지 배열을 사용해요:

from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/anthropic/claude-sonnet-5",
    input=[
        {"type": "message", "role": "system", "content": "You are a helpful assistant."},
        {"type": "message", "role": "user", "content": "What are the latest AI developments?"},
    ],
    custom_llm_provider="perplexity",
    instructions="Provide detailed, well-researched answers.",
    max_output_tokens=800,
)

print(response.output)

스트리밍 응답

실시간 출력을 위해 응답을 스트리밍할 수 있어요:

from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

response = responses(
    model="perplexity/openai/gpt-5.6-terra",
    input="Tell me a story about space exploration",
    custom_llm_provider="perplexity",
    stream=True,
    max_output_tokens=500,
)

for chunk in response:
    if hasattr(chunk, 'type'):
        if chunk.type == "response.output_text.delta":
            print(chunk.delta, end="", flush=True)

지원되는 타사 모델

프로바이더 모델명 함수 호출
OpenAI gpt-5.2 responses(model="perplexity/openai/gpt-5.2", ...)
OpenAI gpt-5.1 responses(model="perplexity/openai/gpt-5.1", ...)
OpenAI gpt-5-mini responses(model="perplexity/openai/gpt-5-mini", ...)
Anthropic claude-opus-4-6 responses(model="perplexity/anthropic/claude-opus-4-6", ...)
Anthropic claude-opus-4-5 responses(model="perplexity/anthropic/claude-opus-4-5", ...)
Anthropic claude-sonnet-4-5 responses(model="perplexity/anthropic/claude-sonnet-4-5", ...)
Anthropic claude-haiku-4-5 responses(model="perplexity/anthropic/claude-haiku-4-5", ...)
Google gemini-3-pro-preview responses(model="perplexity/google/gemini-3-pro-preview", ...)
Google gemini-3-flash-preview responses(model="perplexity/google/gemini-3-flash-preview", ...)
Google gemini-2.5-pro responses(model="perplexity/google/gemini-2.5-pro", ...)
Google gemini-2.5-flash responses(model="perplexity/google/gemini-2.5-flash", ...)
xAI grok-4-1-fast-non-reasoning responses(model="perplexity/xai/grok-4-1-fast-non-reasoning", ...)
Perplexity sonar responses(model="perplexity/perplexity/sonar", ...)

사용 가능한 프리셋

프리셋 이름 함수 호출
fast-search responses(model="perplexity/preset/fast-search", ...)
pro-search responses(model="perplexity/preset/pro-search", ...)
deep-research responses(model="perplexity/preset/deep-research", ...)
advanced-deep-research responses(model="perplexity/preset/advanced-deep-research", ...)

완전한 예시

from litellm import responses
import os

os.environ['PERPLEXITY_API_KEY'] = ""

# Comprehensive example with multiple features
response = responses(
    model="perplexity/openai/gpt-5.6-terra",
    input="Research the latest developments in quantum computing and provide sources",
    custom_llm_provider="perplexity",
    tools=[
        {"type": "web_search"},
        {"type": "fetch_url"}
    ],
    instructions="Use web_search to find relevant information and fetch_url to retrieve detailed content from sources. Provide citations for all claims.",
    max_output_tokens=1000,
    temperature=0.7,
)

print(f"Response ID: {response.id}")
print(f"Model: {response.model}")
print(f"Status: {response.status}")
print(f"Output: {response.output}")
print(f"Usage: {response.usage}")

info: 제공사 전용 파라미터 전달에 대한 자세한 내용은 여기를 참고해요.

더 알아보기 (Learn more)

  • Perplexity AI 공식 문서
  • LiteLLM Reasoning 가이드
  • LiteLLM Responses API