Przejdź do treści
Szyfrowane endpointy, Tor i I2P

Szyfrowane endpointy, Tor i I2P

API jest też opublikowane jako usługa onion Tor i eepsite I2P. Te same trasy, ten sam klucz; zmieniają się tylko base URL i proxy.

Base URL

Cztery adresy prowadzą do tego samego API. Użyj tego, który pasuje do Twojej sieci, z tym samym kluczem API i tymi samymi zapytaniami.

Sieć Base URL Jak się z nim połączyć
Zwykła sieć https://api.shannon-ai.com/v1 Bezpośrednio, przez HTTPS.
Szyfrowany mirror https://api-encrypted.shannon-ai.com/v1 Bezpośrednio, przez HTTPS. Druga nazwa hosta tego samego API.
Tor (usługa onion) http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 Przez klienta Tor: proxy SOCKS5, domyślnie pod 127.0.0.1:9050.
I2P (eepsite) http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 Przez router I2P: proxy HTTP, domyślnie pod 127.0.0.1:4444.
  • SDK OpenAI przyjmuje base URL tak, jak pokazano, z /v1. SDK Anthropic przyjmuje go bez /v1.
  • Aby sprawdzić adres, przeczytaj nagłówki odpowiedzi z https://api.shannon-ai.com: Onion-Location niesie adres onion, a X-I2P-Location adres I2P. Adres onion zaczyna się od shannon.

Które trasy działają

Każda trasa /v1 odpowiada pod wszystkimi czterema adresami:

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

GET /v1/models nie wymaga klucza, więc jest szybkim testem, czy Twoje proxy dociera do API.

Co jest takie samo, a co się różni

Element Tak samo? Szczegóły
Trasy, pola zapytań, odpowiedzi, błędy Tak samo Takie same pod każdym adresem. Żadna trasa nie zachowuje się inaczej w zależności od nazwy hosta.
Klucz API Tak samo Jeden klucz działa pod każdym adresem, jako Authorization: Bearer lub x-api-key. Ciasteczka nigdy nie są czytane w /v1.
Saldo i limity Tak samo To samo saldo i ten sam limit 120 zapytań na minutę. Oba są liczone na konto, nie na adres.
Rozmiar zapytania Tak samo Do 32 MiB na treść zapytania.
Schemat Inaczej https:// w zwykłej sieci i w mirrorze. http:// pod adresami .onion i .b32.i2p, gdzie sama sieć szyfruje połączenie od końca do końca.
Proxy Inaczej Brak w zwykłej sieci. Proxy SOCKS5 dla Tor, proxy HTTP dla I2P. Nazwę musi rozwiązać proxy, a nie Twój komputer.
Szybkość Inaczej Obie sieci dodają opóźnienie do każdego bajtu. I2P jest wolniejsza z tych dwóch.

Saldo i limity opisuje ich własna strona. Limity i saldo

cURL przez Tor

Uruchom klienta Tor na swoim komputerze. Udostępnia proxy SOCKS5 pod 127.0.0.1:9050. --socks5-hostname przekazuje tej proxy nazwę .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 przez I2P

Uruchom router I2P na swoim komputerze. Udostępnia proxy HTTP pod 127.0.0.1:4444, które przyjmuje nazwę .b32.i2p bez zmian.

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"}]
  }'

Base URL dla SDK

SDK potrzebuje dwóch zmian: base URL sieci oraz klienta HTTP, który idzie przez proxy. W Pythonie oba oficjalne SDK przyjmują klienta httpx. Dla proxy SOCKS zainstaluj 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)

Streaming działa w obu sieciach. Gdy stream jest otwarty, a model nie ma jeszcze nic do wysłania, API wysyła keep-alive, aby połączenie nie wyglądało na martwe dla proxy ani dla Twojego klienta.

Endpoint Keep-alive w otwartym streamie Wysyłane dla
/v1/chat/completions Wiersz komentarza (zaczyna się od :) co 15 sekund. Wszystkie modele
/v1/messages event: ping albo wiersz komentarza co 15 sekund. Wszystkie modele
/v1/responses Wiersz komentarza co 15 sekund. Hostowane modele open-weight
  • Wyślij "stream": true. Odpowiedź ze streamingiem zaczyna napływać, gdy tylko model pisze, a keep-alive pokazuje, że zapytanie nadal jest przetwarzane. Odpowiedź bez streamingu nie wysyła nic, dopóki cała odpowiedź nie jest gotowa.
  • Ustaw w kliencie długi timeout odczytu. Przykłady używają 600 sekund. Timeout krótszy niż 15 sekund może przerwać stream między dwoma keep-alive.
  • Pozwól, aby Twój czytnik SSE pomijał wiersze komentarza i zdarzenia ping. SDK już to robią.
  • Nie wysyłaj ponownie zapytania w chwili zerwania połączenia. Zapytanie, które dotarło do API, jest wykonywane do końca i liczone, także gdy połączenia już nie ma.
  • Najpierw przetestuj trasę przez GET /v1/models. Nie wymaga klucza i zwraca krótką listę JSON.

Problemy z połączeniem

Objaw Przyczyna i rozwiązanie
Połączenie z 127.0.0.1:9050 lub 127.0.0.1:4444 jest odrzucane Na Twoim komputerze nie działa klient Tor ani router I2P albo nasłuchuje na innym porcie. Tor Browser udostępnia proxy SOCKS na porcie 9150.
Could not resolve host dla nazwy .onion Klient próbował sam rozwiązać nazwę. Użyj --socks5-hostname w cURL i socks5h:// w URL proxy, aby klient Tor ją rozwiązał.
Proxy I2P odpowiada własną stroną błędu Router nie znalazł jeszcze adresu. Router potrzebuje kilku minut po uruchomieniu. Spróbuj ponownie.
401 z Missing authentication Zapytanie dotarło bez klucza. Wyślij ten sam nagłówek co w zwykłej sieci.

Każdy inny błąd jest taki sam jak w zwykłej sieci. Obsługa błędów

Twój klucz bez JavaScript

Shannon ma też stronę bez JavaScript, dostępną w zwykłej sieci, jako usługa onion i jako eepsite. Jej strona /keys pokazuje Twój klucz API i pozwala go zrotować, więc możesz zdobyć klucz bez opuszczania Tor lub I2P. encrypted.shannon-ai.com/keys

Adresy tej strony we wszystkich trzech sieciach są wymienione tutaj: Dostęp szyfrowany