使用 Perplexity AI 的结构化输出¶
本指南演示了如何将 Perplexity AI 与 Instructor 结合使用以生成结构化输出。您将学习如何使用 Perplexity 的 Sonar 模型和 Pydantic 来创建类型安全、经过验证的响应。
先决条件¶
您需要注册一个 Perplexity 账户并获取 API 密钥。您可以在这里完成。
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)