Šifrirane končne točke, Tor & I2P
API je objavljen tudi kot storitev onion v omrežju Tor in kot eepsite v omrežju I2P. Iste poti, isti ključ; spremenita se samo osnovni URL in proxy.
Osnovni URL-ji
Štirje naslovi vodijo do istega API-ja. Uporabite tistega, ki ustreza vašemu omrežju, z istim API ključem in istimi zahtevki.
| Omrežje | Osnovni URL | Kako ga dosežete |
|---|---|---|
| Navadni splet | https://api.shannon-ai.com/v1 | Neposredno, prek HTTPS. |
| Šifrirano zrcalo | https://api-encrypted.shannon-ai.com/v1 | Neposredno, prek HTTPS. Drugo ime gostitelja za isti API. |
| Tor (storitev onion) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | Prek odjemalca Tor: proxy SOCKS5, privzeto na 127.0.0.1:9050. |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | Prek usmerjevalnika I2P: proxy HTTP, privzeto na 127.0.0.1:4444. |
- SDK OpenAI sprejme osnovni URL, kot je prikazan, s
/v1. SDK Anthropic ga sprejme brez/v1. - Naslov preverite tako, da preberete glave odgovora
https://api.shannon-ai.com:Onion-Locationnosi naslov onion,X-I2P-Locationpa naslov I2P. Naslov onion se začne sshannon.
Katere poti delujejo
Vsaka pot /v1 odgovarja na vseh štirih naslovih:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models ne potrebuje ključa, zato je hiter preizkus, da vaš proxy doseže API.
Kaj je enako in kaj se razlikuje
| Element | Enako? | Podrobnost |
|---|---|---|
| Poti, polja zahtevka, odgovori, napake | Enako | Enako na vsakem naslovu. Nobena pot se ne obnaša drugače glede na ime gostitelja. |
| API ključ | Enako | En ključ deluje na vsakem naslovu, kot Authorization: Bearer ali x-api-key. Piškotki se na /v1 nikoli ne preberejo. |
| Stanje in omejitve | Enako | Isto stanje in ista omejitev 120 zahtevkov na minuto. Oboje se šteje na račun, ne na naslov. |
| Velikost zahtevka | Enako | Do 32 MiB na telo zahtevka. |
| Shema | Razlikuje se | https:// na navadnem spletu in na zrcalu. http:// na naslovih .onion in .b32.i2p, kjer samo omrežje šifrira povezavo od konca do konca. |
| Proxy | Razlikuje se | Na navadnem spletu ga ni. Proxy SOCKS5 za Tor, proxy HTTP za I2P. Ime mora razrešiti proxy, ne vaš računalnik. |
| Hitrost | Razlikuje se | Obe omrežji dodata zakasnitev vsakemu bajtu. I2P je počasnejši od obeh. |
Stanje in omejitve so opisani na svoji strani. Omejitve in stanje
cURL prek Tor
Na svojem računalniku zaženite odjemalca Tor. Ponuja proxy SOCKS5 na 127.0.0.1:9050. --socks5-hostname preda ime .onion temu proxyju.
# 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 prek I2P
Na svojem računalniku zaženite usmerjevalnik I2P. Ponuja proxy HTTP na 127.0.0.1:4444, ki ime .b32.i2p sprejme, kot 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"}]
}' Osnovni URL za SDK
SDK potrebuje dve spremembi: osnovni URL omrežja in odjemalca HTTP, ki gre prek proxyja. V Pythonu oba uradna SDK-ja sprejmeta odjemalca httpx. Za proxy SOCKS namestite 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) Pretakanje in ohranjanje povezave na počasnih povezavah
Pretakanje deluje prek obeh omrežij. Medtem ko je tok odprt in model še nima kaj poslati, API pošlje ohranitev povezave, da povezava proxyju ali vašemu odjemalcu ne izgleda mrtva.
| Končna točka | Ohranjanje povezave na odprtem toku | Poslano za |
|---|---|---|
/v1/chat/completions | Komentarna vrstica (začne se z :) vsakih 15 sekund. | Vsi modeli |
/v1/messages | event: ping ali komentarna vrstica vsakih 15 sekund. | Vsi modeli |
/v1/responses | Komentarna vrstica vsakih 15 sekund. | Gostovani modeli z odprtimi utežmi |
- Pošljite
"stream": true. Odgovor s pretakanjem začne prihajati takoj, ko model piše, ohranjanje povezave pa kaže, da se zahtevek še obdeluje. Odgovor brez pretakanja ne pošlje ničesar, dokler ni ves odgovor pripravljen. - Odjemalcu nastavite dolg čas čakanja pri branju. Primeri uporabljajo 600 sekund. Časovna omejitev, krajša od 15 sekund, lahko konča tok med dvema ohranitvama povezave.
- Poskrbite, da vaš bralnik SSE preskoči komentarne vrstice in dogodke
ping. SDK-ji to že počnejo. - Zahtevka ne pošiljajte znova v trenutku, ko se povezava prekine. Zahtevek, ki je dosegel API, teče do konca in se šteje, tudi ko povezave ni več.
- Pot najprej preizkusite z
GET /v1/models. Ne potrebuje ključa in vrne kratek seznam JSON.
Težave s povezavo
| Simptom | Vzrok in rešitev |
|---|---|
Povezava na 127.0.0.1:9050 ali 127.0.0.1:4444 je zavrnjena | Na vašem računalniku ne teče noben odjemalec Tor ali usmerjevalnik I2P ali pa posluša na drugih vratih. Tor Browser ponuja svoj proxy SOCKS na vratih 9150. |
Could not resolve host za ime .onion | Odjemalec je poskusil ime razrešiti sam. V cURL uporabite --socks5-hostname, v URL-ju proxyja pa socks5h://, da ga razreši odjemalec Tor. |
| Proxy I2P odgovori z lastno stranjo z napako | Usmerjevalnik naslova še ni našel. Usmerjevalnik po zagonu potrebuje nekaj minut. Poskusite znova. |
401 z Missing authentication | Zahtevek je prispel brez ključa. Pošljite isto glavo kot na navadnem spletu. |
Vsaka druga napaka je enaka kot na navadnem spletu. Obravnava napak
Vaš ključ brez JavaScripta
Shannon ima tudi spletno mesto brez JavaScripta, dosegljivo na navadnem spletu, kot storitev onion in kot eepsite. Njegova stran /keys prikazuje vaš API ključ in omogoča njegovo zamenjavo, tako da lahko ključ pridobite, ne da bi zapustili Tor ali I2P. encrypted.shannon-ai.com/keys
Naslovi tega spletnega mesta na vseh treh omrežjih so navedeni tukaj: Šifriran dostop