跳到内容

使用 Perplexity AI 的结构化输出

本指南演示了如何将 Perplexity AI 与 Instructor 结合使用以生成结构化输出。您将学习如何使用 Perplexity 的 Sonar 模型和 Pydantic 来创建类型安全、经过验证的响应。

先决条件

您需要注册一个 Perplexity 账户并获取 API 密钥。您可以在这里完成。

export PERPLEXITY_API_KEY=<your-api-key-here>
pip install "instructor[perplexity]"

Perplexity AI

Perplexity AI 通过其 API 提供对强大语言模型的访问。Instructor 支持使用 Perplexity 的模型通过 OpenAI 兼容的 API 生成结构化输出。

同步示例

import os
from openai import OpenAI
import instructor
from pydantic import BaseModel

# Initialize with API key
client = OpenAI(
    api_key=os.getenv("PERPLEXITY_API_KEY"),
    base_url="https://api.perplexity.ai"
)

# Enable instructor patches for Perplexity client
client = instructor.from_perplexity(client)


class User(BaseModel):
    name: str
    age: int


# Create structured output
user = client.chat.completions.create(
    model="sonar-medium-online",
    messages=[
        {"role": "user", "content": "Extract: Jason is 25 years old"},
    ],
    response_model=User,
)

print(user)
# > User(name='Jason', age=25)

异步示例

import os
from openai import AsyncOpenAI
import instructor
from pydantic import BaseModel
import asyncio

# Initialize with API key
client = AsyncOpenAI(
    api_key=os.getenv("PERPLEXITY_API_KEY"),
    base_url="https://api.perplexity.ai"
)

# Enable instructor patches for Perplexity client
client = instructor.from_perplexity(client)


class User(BaseModel):
    name: str
    age: int


async def extract_user():
    user = await client.chat.completions.create(
        model="sonar-medium-online",
        messages=[
            {"role": "user", "content": "Extract: Jason is 25 years old"},
        ],
        response_model=User,
    )
    return user


# Run async function
user = asyncio.run(extract_user())
print(user)
# > User(name='Jason', age=25)

嵌套对象

import os
from openai import OpenAI
import instructor
from pydantic import BaseModel

# Initialize with API key
client = OpenAI(
    api_key=os.getenv("PERPLEXITY_API_KEY"),
    base_url="https://api.perplexity.ai"
)

# Enable instructor patches for Perplexity client
client = instructor.from_perplexity(client)


class Address(BaseModel):
    street: str
    city: str
    country: str


class User(BaseModel):
    name: str
    age: int
    addresses: list[Address]


# Create structured output with nested objects
user = client.chat.completions.create(
    model="sonar-medium-online",
    messages=[
        {
            "role": "user",
            "content": """
            Extract: Jason is 25 years old.
            He lives at 123 Main St, New York, USA
            and has a summer house at 456 Beach Rd, Miami, USA
        """,
        },
    ],
    response_model=User,
)

print(user)
#> User(
#>     name='Jason',
#>     age=25,
#>     addresses=[
#>         Address(street='123 Main St', city='New York', country='USA'),
#>         Address(street='456 Beach Rd', city='Miami', country='USA')
#>     ]
#> )

支持的模式

Perplexity AI 目前支持以下模式与 Instructor 集成

  • PERPLEXITY_JSON: 直接生成 JSON 响应
import os
from openai import OpenAI
import instructor
from instructor import Mode
from pydantic import BaseModel

# Initialize with API key
client = OpenAI(
    api_key=os.getenv("PERPLEXITY_API_KEY"),
    base_url="https://api.perplexity.ai"
)

# Enable instructor patches for Perplexity client with explicit mode
client = instructor.from_perplexity(
    client, 
    mode=Mode.PERPLEXITY_JSON
)


class User(BaseModel):
    name: str
    age: int


# Create structured output
user = client.chat.completions.create(
    model="sonar-medium-online",
    messages=[
        {"role": "user", "content": "Extract: Jason is 25 years old"},
    ],
    response_model=User,
)

print(user)
# > User(name='Jason', age=25)

附加资源