Перейти до вмісту
Зашифровані ендпоінти, Tor та I2P

Зашифровані ендпоінти, Tor та I2P

API також опубліковано як сервіс onion у Tor та eepsite в I2P. Ті самі маршрути, той самий ключ; змінюються лише базовий URL і проксі.

Базові URL

Чотири адреси ведуть до того самого API. Використовуйте ту, що підходить вашій мережі, з тим самим API-ключем і тими самими запитами.

Мережа Базовий URL Як дістатися
Відкритий веб https://api.shannon-ai.com/v1 Напряму, через HTTPS.
Зашифроване дзеркало https://api-encrypted.shannon-ai.com/v1 Напряму, через HTTPS. Друге ім'я хоста для того самого API.
Tor (сервіс onion) http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 Через клієнт Tor: проксі SOCKS5, за замовчуванням на 127.0.0.1:9050.
I2P (eepsite) http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 Через маршрутизатор I2P: HTTP-проксі, за замовчуванням на 127.0.0.1:4444.
  • SDK OpenAI приймає базовий URL так, як показано, з /v1. SDK Anthropic приймає його без /v1.
  • Щоб перевірити адресу, прочитайте заголовки відповіді https://api.shannon-ai.com: Onion-Location містить адресу onion, а X-I2P-Location — адресу I2P. Адреса onion починається з shannon.

Які маршрути працюють

Кожен маршрут /v1 відповідає на всіх чотирьох адресах:

  • POST /v1/chat/completions
  • POST /v1/responses
  • POST /v1/messages
  • POST /v1/messages/count_tokens
  • POST /v1/tokenize
  • GET /v1/models

GET /v1/models не потребує ключа, тож це швидка перевірка, чи ваш проксі досягає API.

Що однакове, а що відрізняється

Пункт Те саме? Деталі
Маршрути, поля запиту, відповіді, помилки Те саме Однакові на кожній адресі. Жоден маршрут не поводиться інакше залежно від імені хоста.
API-ключ Те саме Один ключ працює на кожній адресі, як Authorization: Bearer або x-api-key. Cookies на /v1 ніколи не читаються.
Баланс і ліміти Те саме Той самий баланс і той самий ліміт 120 запитів на хвилину. Обидва рахуються на обліковий запис, а не на адресу.
Розмір запиту Те саме До 32 MiB на тіло запиту.
Схема Відрізняється https:// у відкритому вебі та на дзеркалі. http:// на адресах .onion і .b32.i2p, де сама мережа шифрує з'єднання від краю до краю.
Проксі Відрізняється У відкритому вебі не потрібен. Проксі SOCKS5 для Tor, HTTP-проксі для I2P. Ім'я має розв'язувати проксі, а не ваша машина.
Швидкість Відрізняється Обидві мережі додають затримку до кожного байта. I2P з двох повільніша.

Баланс і ліміти описано на окремій сторінці. Ліміти та баланс

cURL через Tor

Запустіть клієнт Tor на своїй машині. Він надає проксі SOCKS5 на 127.0.0.1:9050. --socks5-hostname передає ім'я .onion цьому проксі.

cURL · Tor
# 1. Is the onion service reachable? No key needed.
curl --socks5-hostname 127.0.0.1:9050 http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1/models

# 2. A streamed chat call. -N prints the stream as it arrives.
curl -N --socks5-hostname 127.0.0.1:9050 http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "shannon-3",
    "stream": true,
    "messages": [{"role": "user", "content": "Hello over Tor"}]
  }'

cURL через I2P

Запустіть маршрутизатор I2P на своїй машині. Він надає HTTP-проксі на 127.0.0.1:4444, який приймає ім'я .b32.i2p як є.

cURL · I2P
# 1. Is the eepsite reachable? No key needed.
curl --proxy http://127.0.0.1:4444 http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1/models

# 2. A streamed chat call.
curl -N --proxy http://127.0.0.1:4444 http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "shannon-3",
    "stream": true,
    "messages": [{"role": "user", "content": "Hello over I2P"}]
  }'

Базовий URL для SDK

SDK потребує двох змін: базового URL мережі та HTTP-клієнта, що йде через проксі. У Python обидва офіційні SDK приймають клієнт httpx. Для проксі SOCKS встановіть httpx[socks].

# pip install openai "httpx[socks]"
import httpx
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1",
    http_client=httpx.Client(proxy="socks5h://127.0.0.1:9050", timeout=600),
)

stream = client.chat.completions.create(
    model="shannon-3",
    messages=[{"role": "user", "content": "Hello over Tor"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Стрімінг працює в обох мережах. Поки стрім відкритий, а модель ще не має що надіслати, API надсилає keep-alive, щоб з'єднання не виглядало мертвим для проксі чи вашого клієнта.

Ендпоінт Keep-alive у відкритому стрімі Надсилається для
/v1/chat/completions Рядок-коментар (починається з :) кожні 15 секунд. Усі моделі
/v1/messages event: ping або рядок-коментар кожні 15 секунд. Усі моделі
/v1/responses Рядок-коментар кожні 15 секунд. Хостовані open-weight моделі
  • Надсилайте "stream": true. Відповідь зі стрімінгом починає надходити, щойно модель пише, а keep-alive показує, що запит ще обробляється. Відповідь без стрімінгу нічого не надсилає, доки вся відповідь не буде готова.
  • Задайте клієнту довгий тайм-аут читання. У прикладах використано 600 секунд. Тайм-аут коротший за 15 секунд може обірвати стрім між двома keep-alive.
  • Дозвольте вашому читачу SSE пропускати рядки-коментарі та події ping. SDK це вже роблять.
  • Не надсилайте запит повторно одразу, коли з'єднання розірвалося. Запит, що дійшов до API, виконується до кінця й рахується, навіть якщо з'єднання зникло.
  • Спершу перевірте шлях через GET /v1/models. Він не потребує ключа й повертає короткий список JSON.

Проблеми зі з'єднанням

Симптом Причина й виправлення
З'єднання з 127.0.0.1:9050 або 127.0.0.1:4444 відхилено На вашій машині не запущено ні клієнта Tor, ні маршрутизатора I2P, або він слухає інший порт. Tor Browser надає свій проксі SOCKS на порту 9150.
Could not resolve host для імені .onion Клієнт спробував розв'язати ім'я сам. Використовуйте --socks5-hostname у cURL і socks5h:// в URL проксі, щоб ім'я розв'язував клієнт Tor.
Проксі I2P відповідає власною сторінкою помилки Маршрутизатор ще не знайшов адресу. Маршрутизатору потрібно кілька хвилин після запуску. Спробуйте ще раз.
401 з Missing authentication Запит надійшов без ключа. Надішліть той самий заголовок, що й у відкритому вебі.

Кожна інша помилка така сама, як у відкритому вебі. Обробка помилок

Ваш ключ без JavaScript

Shannon має також вебсайт без JavaScript, доступний у відкритому вебі, як сервіс onion і як eepsite. Його сторінка /keys показує ваш API-ключ і дає змогу його замінити, тож ключ можна отримати, не залишаючи Tor чи I2P. encrypted.shannon-ai.com/keys

Адреси цього вебсайту в усіх трьох мережах наведено тут: Зашифрований доступ