Saltar ao contido
Endpoints cifrados, Tor e I2P

Endpoints cifrados, Tor e I2P

A API tamén se publica como servizo onion de Tor e como eepsite de I2P. As mesmas rutas, a mesma clave; só cambian a URL base e o proxy.

URL base

Catro enderezos levan á mesma API. Usa o que se axuste á túa rede, coa mesma clave API e as mesmas solicitudes.

Rede URL base Como acceder
Web aberta https://api.shannon-ai.com/v1 Directo, por HTTPS.
Espello cifrado https://api-encrypted.shannon-ai.com/v1 Directo, por HTTPS. Un segundo nome de host para a mesma API.
Tor (servizo onion) http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 Mediante un cliente Tor: un proxy SOCKS5, por defecto en 127.0.0.1:9050.
I2P (eepsite) http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 Mediante un router I2P: un proxy HTTP, por defecto en 127.0.0.1:4444.
  • Un SDK de OpenAI recibe a URL base tal como se mostra, con /v1. Un SDK de Anthropic recíbea sen /v1.
  • Para comprobar un enderezo, le as cabeceiras de resposta de https://api.shannon-ai.com: Onion-Location leva o enderezo onion e X-I2P-Location o enderezo I2P. O enderezo onion comeza por shannon.

Que rutas funcionan

Todas as rutas /v1 responden nos catro enderezos:

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

GET /v1/models non necesita clave, o que o converte nunha proba rápida de que o teu proxy chega á API.

O que é igual e o que difire

Elemento Igual? Detalle
Rutas, campos de solicitude, respostas, erros Igual O mesmo en todos os enderezos. Ningunha ruta se comporta de maneira distinta segundo o nome de host.
Clave API Igual Unha clave funciona en todos os enderezos, como Authorization: Bearer ou x-api-key. As cookies nunca se len en /v1.
Saldo e límites Igual O mesmo saldo e o mesmo límite de 120 solicitudes por minuto. Ambos contan por conta, non por enderezo.
Tamaño da solicitude Igual Ata 32 MiB por corpo de solicitude.
Esquema Difire https:// na web aberta e no espello. http:// nos enderezos .onion e .b32.i2p, onde a propia rede cifra a conexión de extremo a extremo.
Proxy Difire Ningún na web aberta. Un proxy SOCKS5 para Tor, un proxy HTTP para I2P. O nome debe resolverllo o proxy, non a túa máquina.
Velocidade Difire Ambas as redes engaden atraso a cada byte. I2P é a máis lenta das dúas.

O saldo e os límites descríbense na súa propia páxina. Límites e saldo

cURL por Tor

Executa un cliente Tor na túa máquina. Ofrece un proxy SOCKS5 en 127.0.0.1:9050. --socks5-hostname entrega o nome .onion a ese 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 por I2P

Executa un router I2P na túa máquina. Ofrece un proxy HTTP en 127.0.0.1:4444, que acepta o nome .b32.i2p tal cal.

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 base do SDK

Un SDK necesita dous cambios: a URL base da rede e un cliente HTTP que pase polo proxy. En Python, os dous SDK oficiais aceptan un cliente httpx. Para un proxy SOCKS, instala 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)

O streaming funciona nas dúas redes. Mentres un stream está aberto e o modelo aínda non ten nada que enviar, a API envía un keep-alive, para que a conexión non pareza morta a un proxy ou ao teu cliente.

Endpoint Keep-alive nun stream aberto Enviado para
/v1/chat/completions Unha liña de comentario (comeza por :) cada 15 segundos. Todos os modelos
/v1/messages Un event: ping, ou unha liña de comentario, cada 15 segundos. Todos os modelos
/v1/responses Unha liña de comentario cada 15 segundos. Modelos open-weight alojados
  • Envía "stream": true. Unha resposta con stream comeza a chegar en canto o modelo escribe, e o keep-alive mostra que a solicitude segue en curso. Unha resposta sen stream non envía nada ata que toda a resposta está lista.
  • Dálle ao cliente un tempo límite de lectura longo. Os exemplos usan 600 segundos. Un tempo límite inferior a 15 segundos pode cortar un stream entre dous keep-alives.
  • Fai que o teu lector SSE salte as liñas de comentario e os eventos ping. Os SDK xa o fan.
  • Non reenvíes unha solicitude no momento en que se cae a conexión. Unha solicitude que chegou á API execútase ata o final e cóntase, tamén cando a conexión xa non existe.
  • Proba primeiro a ruta con GET /v1/models. Non necesita clave e devolve unha lista JSON curta.

Problemas de conexión

Síntoma Causa e solución
Rexéitase a conexión a 127.0.0.1:9050 ou 127.0.0.1:4444 Non hai ningún cliente Tor nin router I2P en execución na túa máquina, ou escoita noutro porto. Tor Browser ofrece o seu proxy SOCKS no porto 9150.
Could not resolve host para o nome .onion O cliente tentou resolver o nome por si mesmo. Usa --socks5-hostname en cURL e socks5h:// nunha URL de proxy, para que o cliente Tor o resolva.
O proxy I2P responde coa súa propia páxina de erro O router aínda non atopou o enderezo. Un router necesita uns minutos despois de iniciarse. Téntao de novo.
401 con Missing authentication A solicitude chegou sen clave. Envía a mesma cabeceira que na web aberta.

Todos os demais erros son os mesmos que na web aberta. Xestión de erros

A túa clave sen JavaScript

Shannon tamén ten un sitio web sen JavaScript, accesible na web aberta, como servizo onion e como eepsite. A súa páxina /keys mostra a túa clave API e permíteche rotala, así que podes obter unha clave sen saír de Tor nin de I2P. encrypted.shannon-ai.com/keys

Os enderezos dese sitio web nas tres redes están listados aquí: Acceso cifrado