Интеграция OpenAI API: GPT-4, GPT-4o, o1, o3
OpenAI предоставляет несколько семейств моделей с разными характеристиками. GPT-4o — оптимальный выбор для большинства задач: мультимодальность, хорошее соотношение качество/стоимость. o1/o3 — для задач с глубоким рассуждением (математика, код, логика). GPT-4o-mini — для высоконагруженных сценариев с простыми задачами.
Базовая интеграция
from openai import OpenAI, AsyncOpenAI
from pydantic import BaseModel
client = OpenAI() # Использует OPENAI_API_KEY из env
async_client = AsyncOpenAI()
# Синхронный вызов
def chat(prompt: str, model: str = "gpt-4o") -> str:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=0.1,
)
return response.choices[0].message.content
# Структурированный вывод
class Extraction(BaseModel):
name: str
amount: float
currency: str
def extract_structured(text: str) -> Extraction:
response = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[{"role": "user", "content": f"Извлеки данные: {text}"}],
response_format=Extraction,
)
return response.choices[0].message.parsed
# Streaming
def stream_response(prompt: str):
with client.chat.completions.stream(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
) as stream:
for chunk in stream.text_stream:
yield chunk
# Vision (GPT-4o)
def analyze_image(image_url: str, question: str) -> str:
response = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": image_url}},
{"type": "text", "text": question}
]
}]
)
return response.choices[0].message.content
o1/o3 для задач рассуждения
# o1 не поддерживает system prompt, temperature, streaming
def reason_with_o1(problem: str) -> str:
response = client.chat.completions.create(
model="o3-mini",
messages=[{"role": "user", "content": problem}],
# reasoning_effort: "low" | "medium" | "high" (для o3-mini)
reasoning_effort="high",
)
return response.choices[0].message.content
# o1 оптимален для: математических доказательств, алгоритмических задач,
# многошагового кода с ограничениями, логических головоломок
Управление стоимостью
# Примерные стоимости (на 1M токенов, 2025):
# gpt-4o: $2.50 input / $10.00 output
# gpt-4o-mini: $0.15 input / $0.60 output
# o3-mini: $1.10 input / $4.40 output
def estimate_cost(text: str, model: str = "gpt-4o") -> float:
"""Грубая оценка стоимости перед вызовом"""
tokens = len(text.split()) * 1.3 # Приблизительно
costs = {"gpt-4o": 2.50, "gpt-4o-mini": 0.15, "o3-mini": 1.10}
return tokens / 1_000_000 * costs.get(model, 2.50)
Эмбеддинги и семантический поиск
def get_embeddings(texts: list[str]) -> list[list[float]]:
response = client.embeddings.create(
model="text-embedding-3-small", # 1536 dims, $0.02/1M tokens
input=texts,
)
return [item.embedding for item in response.data]
Сроки
- Базовая интеграция chat completions: 0.5–1 день
- Structured outputs + инструменты: 2–3 дня
- Retry logic + cost management: 1–2 дня







