Sari la conținut
Endpoint-uri criptate, Tor & I2P

Endpoint-uri criptate, Tor & I2P

API-ul este publicat și ca serviciu onion Tor și ca eepsite I2P. Aceleași rute, aceeași cheie; se schimbă doar base URL și proxy-ul.

Base URL-uri

Patru adrese duc la același API. Folosește-o pe cea care se potrivește rețelei tale, cu aceeași cheie API și aceleași cereri.

Rețea Base URL Cum ajungi la el
Web obișnuit https://api.shannon-ai.com/v1 Direct, prin HTTPS.
Mirror criptat https://api-encrypted.shannon-ai.com/v1 Direct, prin HTTPS. Un al doilea nume de gazdă pentru același API.
Tor (serviciu onion) http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 Printr-un client Tor: un proxy SOCKS5, implicit la 127.0.0.1:9050.
I2P (eepsite) http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 Printr-un router I2P: un proxy HTTP, implicit la 127.0.0.1:4444.
  • Un SDK OpenAI primește base URL așa cum este arătat, cu /v1. Un SDK Anthropic îl primește fără /v1.
  • Pentru a verifica o adresă, citește header-ele de răspuns de la https://api.shannon-ai.com: Onion-Location conține adresa onion, iar X-I2P-Location adresa I2P. Adresa onion începe cu shannon.

Ce rute funcționează

Fiecare rută /v1 răspunde pe toate cele patru adrese:

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

GET /v1/models nu cere cheie, deci este un test rapid că proxy-ul tău ajunge la API.

Ce este la fel și ce diferă

Element La fel? Detaliu
Rute, câmpuri de cerere, răspunsuri, erori La fel La fel pe fiecare adresă. Nicio rută nu se comportă diferit în funcție de numele gazdei.
Cheie API La fel O singură cheie funcționează pe orice adresă, ca Authorization: Bearer sau x-api-key. Cookie-urile nu sunt citite niciodată pe /v1.
Sold și limite La fel Același sold și aceeași limită de 120 de cereri pe minut. Ambele sunt numărate per cont, nu per adresă.
Mărimea cererii La fel Până la 32 MiB per corp de cerere.
Schemă Diferă https:// pe web-ul obișnuit și pe mirror. http:// pe adresele .onion și .b32.i2p, unde rețeaua însăși criptează conexiunea de la un capăt la altul.
Proxy Diferă Niciunul pe web-ul obișnuit. Un proxy SOCKS5 pentru Tor, un proxy HTTP pentru I2P. Numele trebuie rezolvat de proxy, nu de mașina ta.
Viteză Diferă Ambele rețele adaugă întârziere fiecărui octet. I2P este mai lentă dintre cele două.

Soldul și limitele sunt descrise pe pagina lor. Limite și sold

cURL prin Tor

Rulează un client Tor pe mașina ta. Acesta oferă un proxy SOCKS5 la 127.0.0.1:9050. --socks5-hostname dă numele .onion acelui proxy.

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 prin I2P

Rulează un router I2P pe mașina ta. Acesta oferă un proxy HTTP la 127.0.0.1:4444, care primește numele .b32.i2p așa cum este.

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 pentru SDK

Un SDK are nevoie de două schimbări: base URL al rețelei și un client HTTP care trece prin proxy. În Python, ambele SDK-uri oficiale primesc un client httpx. Pentru un proxy SOCKS instalează 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-ul funcționează peste ambele rețele. Cât timp un stream este deschis și modelul nu are încă nimic de trimis, API-ul trimite un keep-alive, ca să nu pară moartă conexiunea pentru un proxy sau pentru clientul tău.

Endpoint Keep-alive pe un stream deschis Trimis pentru
/v1/chat/completions O linie de comentariu (începe cu :) la fiecare 15 secunde. Toate modelele
/v1/messages Un event: ping sau o linie de comentariu, la fiecare 15 secunde. Toate modelele
/v1/responses O linie de comentariu la fiecare 15 secunde. Modele open-weight găzduite
  • Trimite "stream": true. Un răspuns cu streaming începe să sosească de îndată ce modelul scrie, iar keep-alive arată că cererea încă se lucrează. Un răspuns fără streaming nu trimite nimic până când tot răspunsul este gata.
  • Dă clientului un read timeout lung. Exemplele folosesc 600 de secunde. Un timeout mai scurt de 15 secunde poate încheia un stream între două keep-alive-uri.
  • Lasă cititorul tău SSE să sară liniile de comentariu și evenimentele ping. SDK-urile fac deja asta.
  • Nu retrimite o cerere în clipa în care se întrerupe o conexiune. O cerere care a ajuns la API rulează până la capăt și este numărată, chiar și când conexiunea a dispărut.
  • Testează mai întâi calea cu GET /v1/models. Nu cere cheie și returnează o listă JSON scurtă.

Probleme de conexiune

Simptom Cauză și remediu
Conexiunea la 127.0.0.1:9050 sau 127.0.0.1:4444 este refuzată Pe mașina ta nu rulează niciun client Tor sau router I2P ori acesta ascultă pe alt port. Tor Browser oferă proxy-ul său SOCKS pe portul 9150.
Could not resolve host pentru numele .onion Clientul a încercat să rezolve singur numele. Folosește --socks5-hostname în cURL și socks5h:// într-un URL de proxy, ca să îl rezolve clientul Tor.
Proxy-ul I2P răspunde cu propria pagină de eroare Routerul nu a găsit încă adresa. Un router are nevoie de câteva minute după pornire. Încearcă din nou.
401 cu Missing authentication Cererea a ajuns fără cheie. Trimite același header ca pe web-ul obișnuit.

Orice altă eroare este aceeași ca pe web-ul obișnuit. Gestionare erori

Cheia ta fără JavaScript

Shannon are și un site web fără JavaScript, accesibil pe web-ul obișnuit, ca serviciu onion și ca eepsite. Pagina lui /keys îți arată cheia API și te lasă să o schimbi, deci poți obține o cheie fără să părăsești Tor sau I2P. encrypted.shannon-ai.com/keys

Adresele acelui site web pe toate cele trei rețele sunt listate aici: Acces criptat