LLM API для разработчиков — руководство по интеграции 2026 | APIMaster.ai
Руководство разработчика по LLM API: аутентификация, стриминг, вызов функций, эмбеддинги, RAG, асинхронные паттерны и управление затратами. Работает с Claude, GPT и DeepSeek через APIMaster.
LLM API для разработчиков: полное руководство по интеграции
Это руководство охватывает всё, что нужно разработчику для интеграции LLM API в production-приложения: аутентификацию, стриминг, использование инструментов, эмбеддинги, паттерны RAG и управление затратами. Все примеры используют формат, совместимый с OpenAI, и работают с APIMaster.ai.
Настройка
from openai import OpenAI
client = OpenAI(
api_key="YOUR_APIMASTER_KEY",
base_url="https://apimaster.ai/v1",
)
Основные паттерны
1. Базовый чат-запрос
def ask(prompt: str, model: str = "claude-sonnet-4-6") -> str:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
)
return response.choices[0].message.content
2. Системный промпт + диалог
class Conversation:
def __init__(self, system: str, model: str = "claude-sonnet-4-6"):
self.model = model
self.messages = [{"role": "system", "content": system}]
def send(self, user_msg: str) -> str:
self.messages.append({"role": "user", "content": user_msg})
resp = client.chat.completions.create(
model=self.model,
messages=self.messages,
)
reply = resp.choices[0].message.content
self.messages.append({"role": "assistant", "content": reply})
return reply
bot = Conversation("You are an expert Python developer.")
print(bot.send("What is the GIL?"))
print(bot.send("How do I work around it?"))
3. Стриминг
def stream(prompt: str, model: str = "gpt-5.4"):
with client.chat.completions.stream(
model=model,
messages=[{"role": "user", "content": prompt}],
) as s:
for text in s.text_stream:
yield text
for chunk in stream("Explain async/await in Python"):
print(chunk, end="", flush=True)
4. Структурированный вывод
from pydantic import BaseModel
from typing import List
class ExtractedData(BaseModel):
entities: List[str]
sentiment: str
summary: str
import json
response = client.chat.completions.create(
model="gpt-5.4",
messages=[
{"role": "system", "content": f"Extract data and return JSON matching this schema: {ExtractedData.schema()}"},
{"role": "user", "content": "Apple reported record revenue. CEO Tim Cook called it exceptional."},
],
response_format={"type": "json_object"},
)
data = ExtractedData(**json.loads(response.choices[0].message.content))
print(data.entities) # ["Apple", "Tim Cook"]
print(data.sentiment) # "positive"
5. Использование инструментов / вызов функций
import json
tools = [
{
"type": "function",
"function": {
"name": "execute_sql",
"description": "Run a read-only SQL query",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string"},
"database": {"type": "string", "enum": ["users", "orders", "products"]},
},
"required": ["query", "database"],
},
},
}
]
def handle_tool_call(tool_name: str, args: dict) -> str:
# Your implementation
return json.dumps({"result": "mock data"})
def agent_loop(user_msg: str):
messages = [{"role": "user", "content": user_msg}]
while True:
resp = client.chat.completions.create(
model="gpt-5.4",
messages=messages,
tools=tools,
)
if resp.choices[0].finish_reason != "tool_calls":
return resp.choices[0].message.content
# Process tool calls
messages.append(resp.choices[0].message)
for tc in resp.choices[0].message.tool_calls:
result = handle_tool_call(tc.function.name, json.loads(tc.function.arguments))
messages.append({"role": "tool", "tool_call_id": tc.id, "content": result})
6. Эмбеддинги
def embed(texts: list[str]) -> list[list[float]]:
response = client.embeddings.create(
model="text-embedding-3-small",
input=texts,
)
return [item.embedding for item in response.data]
# Semantic similarity
import numpy as np
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
vecs = embed(["Python is great", "I love Python", "Java is verbose"])
print(cosine_similarity(vecs[0], vecs[1])) # High: ~0.95
print(cosine_similarity(vecs[0], vecs[2])) # Lower: ~0.70
7. RAG (генерация с дополнением извлечением)
from typing import List
def rag_query(user_question: str, knowledge_base: List[str]) -> str:
# Step 1: Embed the question
q_embedding = embed([user_question])[0]
doc_embeddings = embed(knowledge_base)
# Step 2: Find most relevant docs
similarities = [cosine_similarity(q_embedding, d) for d in doc_embeddings]
top_indices = sorted(range(len(similarities)), key=lambda i: similarities[i], reverse=True)[:3]
context = "\n\n".join(knowledge_base[i] for i in top_indices)
# Step 3: Generate answer with context
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{"role": "system", "content": f"Answer using only this context:\n\n{context}"},
{"role": "user", "content": user_question},
],
)
return response.choices[0].message.content
8. Асинхронность для высокой пропускной способности
import asyncio
from openai import AsyncOpenAI
async_client = AsyncOpenAI(
api_key="YOUR_APIMASTER_KEY",
base_url="https://apimaster.ai/v1",
)
async def process_batch(prompts: list[str]) -> list[str]:
tasks = [
async_client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": p}],
max_tokens=100,
)
for p in prompts
]
responses = await asyncio.gather(*tasks)
return [r.choices[0].message.content for r in responses]
# Process 50 prompts concurrently
results = asyncio.run(process_batch(my_prompts))
Контрольный список для production
- Ключи API в переменных окружения, а не в исходном коде
- Логика повторных попыток с экспоненциальной задержкой для ошибок 429/500
-
max_tokensустановлен для предотвращения неконтролируемых затрат - Стриминг для ответов пользователю длительностью >2 секунд
- Логирование запросов с подсчётом токенов для отслеживания затрат
- Ограничитель скорости для соблюдения лимитов провайдера
Выбор подходящей модели
| Сценарий использования | Модель | Уровень стоимости |
|---|---|---|
| Прототипирование | deepseek-v4-flash или gpt-4o-mini | Очень низкий |
| Production-чатбот | claude-haiku-4-5 | Низкий |
| Ассистент кода | deepseek-v4-flash или claude-sonnet-4-6 | Низкий–средний |
| Сложный анализ | claude-sonnet-4-6 | Средний |
| Исследования/рассуждения | claude-opus-4-8 или o3 | Высокий |
Часто задаваемые вопросы
Что такое LLM API?
LLM API — это HTTP-интерфейс, который позволяет вашему коду отправлять текстовые промпты и получать ответы, сгенерированные ИИ. Вы отправляете массив messages; API возвращает завершение. Большинство используют формат Chat Completions от OpenAI.
Как выбрать между провайдерами LLM API? Учитывайте возможности модели (бенчмарки), стоимость за токен, задержку и надёжность. Для большинства случаев DeepSeek V4 Flash (недорогое кодирование), Claude Sonnet (письмо/анализ) или GPT-4o (мультимодальность) покрывают основные потребности. APIMaster позволяет переключать провайдеров одной строкой.
Что такое API, совместимый с OpenAI?
Это endpoint, который реализует тот же формат /v1/chat/completions, что и OpenAI, позволяя использовать библиотеку openai для Python или любой инструмент, совместимый с OpenAI, с моделями, отличными от OpenAI.
Как обрабатывать ошибки LLM API в production?
Перехватывайте RateLimitError (повторить с задержкой), APIConnectionError (повторить) и InvalidRequestError (исправить промпт). Используйте таймауты и circuit breakers для отказоустойчивости в production.
Можно ли использовать один ключ API для нескольких LLM-провайдеров?
Да — APIMaster предоставляет единый ключ и endpoint для GPT, Claude, DeepSeek и Gemini. Переключайте модели, изменяя параметр model. Никаких ключей или SDK от конкретных провайдеров не требуется.