srezai — Python-клиент срезAI
Официальный Python-клиент срезAI — платформы веб-доступа для LLM-агентов и RAG-систем: поиск по вебу, чтение страниц в Markdown, извлечение структурированных данных по схеме и агентное исследование.
Official Python client for срезAI (SrezAI), a web-access platform for LLM agents and RAG systems: web search, page reading as Markdown, schema-driven structured extraction and agentic research.
pip install srezai
Требования: Python 3.10 – 3.13. Единственная зависимость — httpx.
Быстрый старт / Quickstart
from srezai import SrezAI
with SrezAI() as client: # ключ из SREZAI_API_KEY
found = client.search("новости про ИИ", num=5, time_range="week")
for item in found["results"]:
print(item["title"], item["url"])
page = client.read_url("https://example.com", max_chars=8000)
print(page["markdown"])
Ключ передаётся аргументом api_key, а при его отсутствии берётся из переменной
окружения SREZAI_API_KEY. Создать ключ можно в
личном кабинете.
Клиент работает как контекстный менеджер и переиспользует HTTP-соединение внутри
блока with, закрывая его на выходе. Для долгоживущего процесса допустимо
создать клиент один раз и вызвать close() при завершении.
Методы / Methods
| Метод | Назначение | Стоимость вызова |
|---|---|---|
search(query, ...) |
Веб-поиск по десяткам движков одним запросом | 1 кредит |
image_search(query, ...) |
Поиск изображений: ссылки, источник, разрешение | 1 кредит |
read_url(url, ...) |
Страница → плотный Markdown без навигации и рекламы | 1 кредит |
read_urls(urls, ...) |
То же для группы страниц (до 5 за вызов, параллельно) | 1 кредит за страницу |
fetch_page(url, ...) |
Рендер страницы браузером: скриншот и Markdown | 3 кредита |
extract(schema, url=...) |
Данные строго по схеме, без выдуманных значений | 4 кредита за страницу |
deep_research(query) |
Агентное исследование: поиск, чтение, синтез ответа | 20 кредитов + 3 за 1000 токенов ответа |
answer_search(query, ...) |
RAG-ответ по вебу с семантическим ранжированием источников | 50 / 100 / 200 кредитов — по depth |
Тарифная сетка и калькулятор — на странице цен; полное описание параметров — в документации API.
Инструмент учёта get_usage (баланс, квота, цены) в SDK отсутствует: он доступен
только через MCP-сервер, REST-
эндпоинта для него не предусмотрено. В REST эту роль выполняют заголовки
X-RateLimit-* в каждом ответе.
Поиск
found = client.search(
"векторные базы данных",
num=10,
category="it", # general | news | it | science
language="ru", # auto | ru | en
time_range="month", # "" | day | week | month | year
depth="auto", # flash — быстрее и уже; auto — шире
excerpts=True, # подтянуть текст топ-страниц
include_domains=["habr.com"], # только эти сайты и их поддомены
)
Чтение страниц
page = client.read_url("https://example.com", max_chars=8000, engine="auto")
batch = client.read_urls(["https://a.example", "https://b.example"], max_chars=4000)
Параметр engine управляет способом загрузки. По умолчанию auto: клиент
начинает с быстрого способа и повышает ступень самостоятельно, если содержимое не
получено. Явное значение имеет смысл указывать только для заранее известного
сайта — fast для статики и документации, dynamic для SPA, требующих
выполнения JavaScript, stealth для максимально приближенного к браузеру
поведения.
На батче стоит задавать max_chars скромнее: пять больших страниц вытеснят из
контекста модели всё остальное. Если часть адресов не открылась, остальные
возвращаются, а неудачи перечисляются в ответе.
Извлечение структурированных данных
data = client.extract(
{"title": "string", "price": "number?", "tags": "string[]"},
url="https://shop.example/item/42",
instruction="использовать цену со скидкой",
)
Схема задаётся сокращённой формой (? — необязательное поле, [] — массив) или
полным JSON Schema; описания полей в полной форме заметно повышают точность
разбора. Значения, которых на странице нет, возвращаются как null и никогда не
достраиваются моделью. Для группы страниц под одну схему используется urls=
(до 5 адресов, каждый тарифицируется отдельно) — взаимоисключимо с url=.
Answer Search
result = client.answer_search(
"как работает BGE-reranker",
depth="balanced", # fast | balanced (по умолчанию) | deep
)
print(result["answer"])
for s in result["sources"]:
print(s["title"], s["url"], s["relevance"])
В отличие от deep_research, стоимость фиксирована по depth и не зависит от
объёма ответа: fast — 50 кредитов, balanced — 100, deep — 200. sources
отсортированы по релевантности через семантический реранкер, а не только по
порядку поиска.
Обработка ошибок / Errors
Каждая ошибка API содержит машинный код, которому соответствует отдельный класс
исключения. Это позволяет ветвиться по типу ошибки, не разбирая текст сообщения.
Если код не важен, достаточно перехватить базовый SrezAIError.
from srezai import SrezAI, HostUnresolved, RateLimited, SsrfBlocked
with SrezAI() as client:
try:
client.read_url("https://exmaple.com")
except HostUnresolved:
... # домена не существует — вероятна опечатка в адресе
except SsrfBlocked:
... # адрес запрашивать нельзя: локальная сеть или служебный диапазон
except RateLimited as err:
... # лимит; err.retry_after — секунды до следующей попытки
HostUnresolved и SsrfBlocked различаются намеренно: первое означает
«проверьте адрес на опечатку», второе — «такой адрес запрашивать нельзя». Полный
каталог кодов — на srezai.ru/docs/errors.
Клиент автоматически повторяет запрос при временных сбоях — rate_limited,
service_unavailable, search_unavailable, upstream_timeout — с
экспоненциальной задержкой и приоритетом подсказки retry_after от сервера.
Ошибки запроса (bad_request, schema_invalid, unauthorized, ssrf_blocked)
возвращаются немедленно: их повтор не изменит результат.
Конфигурация / Configuration
client = SrezAI(
api_key="srz_live_…", # по умолчанию — SREZAI_API_KEY
base_url="https://srezai.ru", # для стейджинга или изолированного контура
timeout=180.0, # секунды; deep_research идёт до двух минут
max_retries=2,
)
Таймаут по умолчанию выбран с запасом под deep_research: он синхронный и
занимает до двух минут. Уменьшать его стоит только если этот метод не
используется — оборванное соединение не отменяет уже начатую работу на сервере.
Ограничения частоты / Rate limits
Ключ API: 10 запросов за 10 секунд и 200 запросов в сутки. Батчевые методы
read_urls и extract принимают до 5 адресов за вызов. Текущее состояние квоты
возвращается в заголовках X-RateLimit-*. Лимиты выше базовых согласуются
индивидуально — support@srezai.ru.
Типизация и разработка / Typing and development
Пакет поставляется с маркером py.typed и проходит mypy --strict, поэтому
подсказки типов доступны в потребляющем коде без дополнительных заглушек.
pip install -e ".[dev]" && ruff check . && mypy src && pytest -q
Тесты выполняются локально на pytest-httpx и обращений к рабочему API не
требуют.
Поддержка и лицензия / Support and license
- Документация API — srezai.ru/docs
- Вопросы и дефекты — GitHub Issues
- Техническая поддержка — support@srezai.ru
Лицензия — MIT.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file srezai-0.2.0.tar.gz.
File metadata
- Download URL: srezai-0.2.0.tar.gz
- Upload date:
- Size: 15.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa4e45d443540dc7a5f19710fbbbe64b938b16f945a8e1d94570ea11aaa2e901
|
|
| MD5 |
155976a6c88ceb3e7c3eb125c92abc19
|
|
| BLAKE2b-256 |
85174d81f4aaf94edea9a7e4d4a9ab61ab0f9ccba770dc3f05ef95b0e846cba1
|
Provenance
The following attestation bundles were made for srezai-0.2.0.tar.gz:
Publisher:
release-python.yml on srezai-team/srezai-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
srezai-0.2.0.tar.gz -
Subject digest:
aa4e45d443540dc7a5f19710fbbbe64b938b16f945a8e1d94570ea11aaa2e901 - Sigstore transparency entry: 2761880208
- Sigstore integration time:
-
Permalink:
srezai-team/srezai-sdk@b53838b53a221a6f57bc62312c71901206b90c7e -
Branch / Tag:
refs/tags/py-v0.2.0 - Owner: https://github.com/srezai-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-python.yml@b53838b53a221a6f57bc62312c71901206b90c7e -
Trigger Event:
push
-
Statement type:
File details
Details for the file srezai-0.2.0-py3-none-any.whl.
File metadata
- Download URL: srezai-0.2.0-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b179961ec3195d7ab45efc652ffc0600adafe7d249a747dcb50af1cdff49df56
|
|
| MD5 |
2022b978b31cad94aeb4408bd8ff38a5
|
|
| BLAKE2b-256 |
bca5de3817cfc8a8827555364ab698a4e9ab9b4c042ca40348154ab621b18d1c
|
Provenance
The following attestation bundles were made for srezai-0.2.0-py3-none-any.whl:
Publisher:
release-python.yml on srezai-team/srezai-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
srezai-0.2.0-py3-none-any.whl -
Subject digest:
b179961ec3195d7ab45efc652ffc0600adafe7d249a747dcb50af1cdff49df56 - Sigstore transparency entry: 2761880236
- Sigstore integration time:
-
Permalink:
srezai-team/srezai-sdk@b53838b53a221a6f57bc62312c71901206b90c7e -
Branch / Tag:
refs/tags/py-v0.2.0 - Owner: https://github.com/srezai-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-python.yml@b53838b53a221a6f57bc62312c71901206b90c7e -
Trigger Event:
push
-
Statement type: