Šifrované endpointy, Tor a I2P
API je také zveřejněno jako služba Tor onion a eepsite I2P. Stejné cesty, stejný klíč; mění se jen základní URL a proxy.
Základní URL
Čtyři adresy vedou ke stejnému API. Použijte tu, která vyhovuje vaší síti, se stejným klíčem API a stejnými požadavky.
| Síť | Základní URL | Jak se k němu dostanete |
|---|---|---|
| Běžný web | https://api.shannon-ai.com/v1 | Přímo, přes HTTPS. |
| Šifrované zrcadlo | https://api-encrypted.shannon-ai.com/v1 | Přímo, přes HTTPS. Druhý název hostitele pro stejné API. |
| Tor (služba onion) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | Přes klienta Tor: proxy SOCKS5, ve výchozím nastavení na 127.0.0.1:9050. |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | Přes router I2P: proxy HTTP, ve výchozím nastavení na 127.0.0.1:4444. |
- SDK OpenAI přijímá základní URL tak, jak je uvedena, s
/v1. SDK Anthropic ji přijímá bez/v1. - Adresu ověříte čtením hlaviček odpovědi z
https://api.shannon-ai.com:Onion-Locationnese adresu onion aX-I2P-Locationadresu I2P. Adresa onion začínáshannon.
Které cesty fungují
Každá cesta /v1 odpovídá na všech čtyřech adresách:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models nepotřebuje klíč, takže je to rychlý test, zda vaše proxy na API dosáhne.
Co je stejné a co se liší
| Položka | Stejné? | Podrobnosti |
|---|---|---|
| Cesty, pole požadavků, odpovědi, chyby | Stejné | Stejné na každé adrese. Žádná cesta se podle názvu hostitele nechová jinak. |
| Klíč API | Stejné | Jeden klíč funguje na každé adrese, jako Authorization: Bearer nebo x-api-key. Cookies se na /v1 nikdy nečtou. |
| Zůstatek a limity | Stejné | Stejný zůstatek a stejný limit 120 požadavků za minutu. Obojí se počítá na účet, ne na adresu. |
| Velikost požadavku | Stejné | Až 32 MiB na tělo požadavku. |
| Schéma | Liší se | https:// na běžném webu a na zrcadle. http:// na adresách .onion a .b32.i2p, kde spojení šifruje od konce ke konci sama síť. |
| Proxy | Liší se | Na běžném webu žádná. Proxy SOCKS5 pro Tor, proxy HTTP pro I2P. Název musí překládat proxy, ne váš počítač. |
| Rychlost | Liší se | Obě sítě přidávají zpoždění ke každému bajtu. I2P je z nich pomalejší. |
Zůstatek a limity jsou popsány na vlastní stránce. Limity a zůstatek
cURL přes Tor
Spusťte na svém počítači klienta Tor. Nabízí proxy SOCKS5 na 127.0.0.1:9050. --socks5-hostname předá název .onion této proxy.
# 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 přes I2P
Spusťte na svém počítači router I2P. Nabízí proxy HTTP na 127.0.0.1:4444, která přijímá název .b32.i2p tak, jak je.
# 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"}]
}' Základní URL pro SDK
SDK potřebuje dvě změny: základní URL sítě a klienta HTTP, který jde přes proxy. V Pythonu přijímají obě oficiální SDK klienta httpx. Pro proxy SOCKS nainstalujte 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) # pip install openai
import httpx
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1",
http_client=httpx.Client(proxy="http://127.0.0.1:4444", timeout=600),
)
stream = client.chat.completions.create(
model="shannon-3",
messages=[{"role": "user", "content": "Hello over I2P"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True) # pip install anthropic "httpx[socks]"
import anthropic
import httpx
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion",
http_client=httpx.Client(proxy="socks5h://127.0.0.1:9050", timeout=600),
)
with client.messages.stream(
model="shannon-1.6-lite",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello over Tor"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True) Streamování a keep-alive na pomalých spojeních
Streamování funguje přes obě sítě. Dokud je stream otevřený a model zatím nemá co poslat, API posílá keep-alive, aby spojení nevypadalo jako mrtvé pro proxy ani pro vašeho klienta.
| Endpoint | Keep-alive na otevřeném streamu | Posílá se pro |
|---|---|---|
/v1/chat/completions | Komentářový řádek (začíná :) každých 15 sekund. | Všechny modely |
/v1/messages | event: ping nebo komentářový řádek každých 15 sekund. | Všechny modely |
/v1/responses | Komentářový řádek každých 15 sekund. | Hostované modely s otevřenými váhami |
- Pošlete
"stream": true. Streamovaná odpověď začne přicházet, jakmile model píše, a keep-alive ukazuje, že se na požadavku pořád pracuje. Nestreamovaná odpověď neposílá nic, dokud není hotová celá odpověď. - Dejte klientovi dlouhý timeout čtení. Ukázky používají 600 sekund. Timeout kratší než 15 sekund může ukončit stream mezi dvěma keep-alive.
- Nechte svou čtečku SSE přeskakovat komentářové řádky a události
ping. SDK to už dělají. - Neposílejte požadavek znovu v okamžiku, kdy spojení spadne. Požadavek, který na API dorazil, doběhne do konce a započítá se, i když spojení zmizelo.
- Cestu nejdřív vyzkoušejte přes
GET /v1/models. Nepotřebuje klíč a vrací krátký seznam JSON.
Problémy se spojením
| Příznak | Příčina a oprava |
|---|---|
Spojení na 127.0.0.1:9050 nebo 127.0.0.1:4444 je odmítnuto | Na vašem počítači neběží klient Tor ani router I2P, nebo naslouchá na jiném portu. Tor Browser nabízí svou proxy SOCKS na portu 9150. |
Could not resolve host pro název .onion | Klient se pokusil název přeložit sám. V cURL použijte --socks5-hostname a v URL proxy socks5h://, aby název přeložil klient Tor. |
| Proxy I2P odpovídá vlastní chybovou stránkou | Router adresu zatím nenašel. Router po spuštění potřebuje několik minut. Zkuste to znovu. |
401 s Missing authentication | Požadavek dorazil bez klíče. Pošlete stejnou hlavičku jako na běžném webu. |
Každá další chyba je stejná jako na běžném webu. Zpracování chyb
Váš klíč bez JavaScriptu
Shannon má také web bez JavaScriptu, dostupný na běžném webu, jako služba onion a jako eepsite. Jeho stránka /keys ukazuje váš klíč API a umožňuje jej vyměnit, takže klíč získáte, aniž byste opustili Tor nebo I2P. encrypted.shannon-ai.com/keys
Adresy tohoto webu ve všech třech sítích jsou uvedeny zde: Šifrovaný přístup