Perplexity API 설치 및 설정 완전 가이드 – pplx-api 키 발급부터 Python SDK 연동까지

Perplexity API란?

Perplexity API는 실시간 웹 검색 기능이 내장된 대규모 언어 모델(LLM) API입니다. OpenAI 호환 인터페이스를 제공하므로 기존 코드베이스에 쉽게 통합할 수 있으며, 검색 강화 생성(Search-Augmented Generation) 기능을 통해 최신 정보가 포함된 응답과 출처 인용을 자동으로 제공합니다.

1단계: API 키 발급

  • perplexity.ai에 접속하여 계정을 생성하거나 로그인합니다.- 좌측 메뉴에서 Settings → API로 이동합니다.- Generate API Key 버튼을 클릭합니다.- 생성된 키를 안전한 곳에 복사하여 저장합니다. 키는 pplx-로 시작합니다.- 결제 정보(Credit)를 등록합니다. Perplexity API는 사용량 기반 과금 방식입니다.

2단계: 개발 환경 설정

Python 패키지 설치

Perplexity API는 OpenAI SDK와 호환되므로 openai 패키지를 사용합니다. pip install openai requests python-dotenv

환경 변수 설정

API 키를 코드에 직접 넣지 말고 .env 파일로 관리하세요. # .env 파일 생성 PPLX_API_KEY=pplx-YOUR_API_KEY

# Python에서 환경 변수 로드
import os
from dotenv import load_dotenv

load_dotenv() api_key = os.getenv(“PPLX_API_KEY”)

CLI에서 환경 변수 설정 (Linux/macOS)

export PPLX_API_KEY="pplx-YOUR_API_KEY"

PowerShell (Windows)

$env:PPLX_API_KEY = "pplx-YOUR_API_KEY"

3단계: 첫 번째 API 호출

OpenAI SDK를 이용한 기본 호출

from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("PPLX_API_KEY"),
    base_url="https://api.perplexity.ai"
)

response = client.chat.completions.create(
    model="sonar-pro",
    messages=[
        {"role": "system", "content": "정확하고 간결하게 답변하세요."},
        {"role": "user", "content": "2026년 최신 Python 웹 프레임워크 트렌드를 알려줘"}
    ]
)

print(response.choices[0].message.content)

requests 라이브러리를 이용한 직접 호출

import requests
import json

url = "https://api.perplexity.ai/chat/completions"
headers = {
    "Authorization": f"Bearer {os.getenv('PPLX_API_KEY')}",
    "Content-Type": "application/json"
}
payload = {
    "model": "sonar-pro",
    "messages": [
        {"role": "user", "content": "서울 날씨 현재 상황"}
    ]
}

res = requests.post(url, headers=headers, json=payload)
data = res.json()
print(data["choices"][0]["message"]["content"])

4단계: 소스 인용(Citation) 파싱

Perplexity API의 핵심 장점은 응답에 출처 URL이 포함된다는 점입니다. citations 필드를 통해 참조 소스를 추출할 수 있습니다. response = client.chat.completions.create( model="sonar-pro", messages=[ {"role": "user", "content": "한국의 2026년 AI 정책 동향"} ] )

응답 본문

content = response.choices[0].message.content print(“답변:”, content)

인용 소스 추출

citations = getattr(response, ‘citations’, []) if citations: print(“\n참조 소스:”) for i, url in enumerate(citations, 1): print(f” [{i}] {url}“)

인용 번호와 URL 매핑

응답 텍스트에 [1], [2] 형태로 삽입된 인용 번호는 citations 배열의 인덱스와 대응합니다. 이를 활용해 하이퍼링크로 변환할 수 있습니다. import re

def replace_citations(text, citations): """인용 번호를 마크다운 링크로 변환""" def replacer(match): idx = int(match.group(1)) - 1 if 0 <= idx < len(citations): return f”{match.group(1)}” return match.group(0) return re.sub(r’[(\d+)]’, replacer, text)

formatted = replace_citations(content, citations) print(formatted)

5단계: 검색 강화 모드 및 모델 선택

모델특징용도
sonar빠른 응답, 기본 검색간단한 질의, 실시간 정보
sonar-pro정밀 검색, 복합 추론심층 분석, 리서치
sonar-reasoning다단계 추론, 체인 오브 씽킹복잡한 논리 문제, 비교 분석
sonar-reasoning-pro최고 성능 추론전문 연구, 고난이도 분석
### 검색 도메인 필터링
response = client.chat.completions.create(
    model="sonar-pro",
    messages=[
        {"role": "user", "content": "최신 React 19 변경사항"}
    ],
    search_domain_filter=["reactjs.org", "github.com", "developer.mozilla.org"],
    search_recency_filter="week"
)
### 스트리밍 응답 처리
stream = client.chat.completions.create(
    model="sonar-pro",
    messages=[{"role": "user", "content": "AI 에이전트 아키텍처 설명"}],
    stream=True
)

for chunk in stream: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True)

Pro Tips

  • 시스템 프롬프트 활용: system 메시지에 응답 형식(JSON, 마크다운 등)과 언어를 명시하면 일관된 출력을 얻을 수 있습니다.- search_recency_filter: day, week, month, year 옵션으로 최신 정보 범위를 제한하세요.- 토큰 비용 절약: sonar 모델은 sonar-pro 대비 비용이 낮으므로 간단한 질의에는 기본 모델을 사용하세요.- temperature 조절: 사실 기반 검색에는 temperature=0.1, 창의적 생성에는 0.7 이상을 권장합니다.- 대화 컨텍스트 유지: messages 배열에 이전 대화를 포함하면 멀티턴 검색이 가능합니다.

Troubleshooting

에러원인해결 방법
401 UnauthorizedAPI 키 누락 또는 만료키가 pplx-로 시작하는지 확인, 재발급 시도
429 Too Many Requests요청 속도 제한 초과요청 간 딜레이 추가, time.sleep(1) 적용
400 Bad Request잘못된 모델명 또는 파라미터모델명 확인: sonar, sonar-pro 등 공식 모델명 사용
credits 부족계정 크레딧 소진Perplexity 대시보드에서 크레딧 충전
timeout복잡한 쿼리로 인한 응답 지연timeout=60 파라미터 추가, 쿼리 단순화
## 자주 묻는 질문 (FAQ)

Q1: Perplexity API와 OpenAI API의 차이점은 무엇인가요?

Perplexity API는 실시간 웹 검색이 기본 내장되어 있어 별도의 검색 도구 없이 최신 정보를 포함한 응답을 생성합니다. 또한 응답에 출처 URL(citations)이 자동으로 포함되어 정보의 신뢰성을 검증할 수 있습니다. OpenAI API는 학습 데이터 기반으로 응답하며, 웹 검색을 위해서는 별도의 도구 연동이 필요합니다.

Q2: 무료로 Perplexity API를 사용할 수 있나요?

Perplexity API는 사용량 기반 유료 서비스입니다. 신규 가입 시 일정량의 무료 크레딧이 제공될 수 있으며, 이후에는 토큰 사용량에 따라 과금됩니다. 최신 가격 정책은 Perplexity 공식 문서를 확인하세요.

Q3: sonar와 sonar-pro 모델 중 어떤 것을 선택해야 하나요?

sonar 모델은 빠른 응답 속도와 낮은 비용이 장점이며 간단한 사실 확인이나 실시간 정보 조회에 적합합니다. sonar-pro는 더 깊은 검색과 복합적 추론이 필요한 리서치, 비교 분석, 심층 보고서 작성에 권장됩니다. 프로토타입 단계에서는 sonar로 시작하고, 품질이 부족하면 sonar-pro로 전환하는 전략이 효율적입니다.

다른 도구 둘러보기

Antigravity AI 콘텐츠 파이프라인 자동화 가이드: Google Docs에서 WordPress 퍼블리싱까지 가이드 Bolt.new 사례 연구: 마케팅 에이전시가 하루 만에 클라이언트 대시보드 5개 구축 사례 Bolt.new 베스트 프랙티스: 자연어 프롬프트로 풀스택 앱 빠르게 생성하기 모범사례 ChatGPT 고급 데이터 분석(코드 인터프리터) 완벽 가이드: 업로드부터 시각화까지 가이드 ChatGPT Custom GPTs 고급 가이드: Actions, API 통합, 지식 베이스 설정 가이드 ChatGPT 음성 모드 가이드: 음성 중심 고객 서비스와 내부 워크플로우 구축 가이드 Claude API 프로덕션 챗봇 가이드: 안정적인 AI 어시스턴트를 위한 시스템 프롬프트 아키텍처 가이드 Claude Artifacts 활용 베스트 프랙티스: 인터랙티브 대시보드, 문서, 코드 미리보기 만들기 모범사례 Claude Code Hooks 가이드: Pre/Post 실행 훅으로 커스텀 워크플로우 자동화하기 가이드 Claude MCP 서버 설정 가이드: Claude Code와 Desktop을 위한 커스텀 도구 통합 가이드 Cursor 사례 연구: 1인 창업자가 AI 코딩으로 2주 만에 Next.js SaaS MVP 구축 사례 Cursor Composer 완벽 가이드: 멀티 파일 편집, 인라인 Diff, 에이전트 모드 가이드 Cursor Rules 고급 가이드: 프로젝트별 AI 설정과 팀 코딩 표준 가이드 Devin AI 팀 워크플로우 통합 베스트 프랙티스: Slack, GitHub, 코드 리뷰 자동화 모범사례 Devin 사례 연구: 500개 패키지 Python 모노레포 의존성 자동 업그레이드 사례 ElevenLabs 사례 연구: 에드테크 스타트업이 6주 만에 200시간 강의를 8개 언어로 현지화 사례 ElevenLabs 다국어 더빙 가이드: 글로벌 콘텐츠를 위한 자동화된 영상 현지화 워크플로우 가이드 ElevenLabs Voice Design 완벽 가이드: 게임, 팟캐스트, 앱을 위한 일관된 캐릭터 음성 만들기 가이드 Gemini 2.5 Pro vs Claude Sonnet 4 vs GPT-4o: AI 코드 생성 비교 2026 비교 Gemini API 멀티모달 개발자 가이드: 이미지, 비디오, 문서 분석 코드 예제 가이드