Šifrēti, Tor un I2P galapunkti
API ir publicēts arī kā Tor onion pakalpojums un I2P eepsite. Tie paši ceļi, tā pati atslēga; mainās tikai bāzes URL un starpniekserveris.
Bāzes URL
Četras adreses ved uz to pašu API. Izmantojiet to, kas atbilst jūsu tīklam, ar to pašu API atslēgu un tiem pašiem pieprasījumiem.
| Tīkls | Bāzes URL | Kā to sasniegt |
|---|---|---|
| Atklātais tīmeklis | https://api.shannon-ai.com/v1 | Tieši, pa HTTPS. |
| Šifrēts spogulis | https://api-encrypted.shannon-ai.com/v1 | Tieši, pa HTTPS. Otrs resursdatora nosaukums tam pašam API. |
| Tor (onion pakalpojums) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | Caur Tor klientu: SOCKS5 starpniekserveris, pēc noklusējuma adresē 127.0.0.1:9050. |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | Caur I2P maršrutētāju: HTTP starpniekserveris, pēc noklusējuma adresē 127.0.0.1:4444. |
- OpenAI SDK pieņem bāzes URL, kā parādīts, ar
/v1. Anthropic SDK pieņem to bez/v1. - Lai pārbaudītu adresi, izlasiet atbildes galvenes no
https://api.shannon-ai.com:Onion-Locationnes onion adresi unX-I2P-LocationI2P adresi. Onion adrese sākas arshannon.
Kuri ceļi darbojas
Katrs /v1 ceļš atbild visās četrās adresēs:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models atslēgu nevajag, tāpēc tas ir ātrs tests, vai jūsu starpniekserveris sasniedz API.
Kas ir vienāds un kas atšķiras
| Postenis | Vienāds? | Detaļas |
|---|---|---|
| Ceļi, pieprasījumu lauki, atbildes, kļūdas | Vienāds | Tās pašas katrā adresē. Neviens ceļš pēc resursdatora nosaukuma neuzvedas citādi. |
| API atslēga | Vienāds | Viena atslēga darbojas katrā adresē, kā Authorization: Bearer vai x-api-key. Sīkdatnes galapunktā /v1 netiek lasītas nekad. |
| Atlikums un ierobežojumi | Vienāds | Tas pats atlikums un tas pats ierobežojums 120 pieprasījumi minūtē. Abi tiek skaitīti uz kontu, nevis uz adresi. |
| Pieprasījuma lielums | Vienāds | Līdz 32 MiB vienam pieprasījuma pamatteksta. |
| Shēma | Atšķiras | https:// atklātajā tīmeklī un spogulī. http:// adresēm .onion un .b32.i2p, kur pats tīkls šifrē savienojumu no gala līdz galam. |
| Starpniekserveris | Atšķiras | Atklātajā tīmeklī nav. SOCKS5 starpniekserveris Tor, HTTP starpniekserveris I2P. Nosaukumu jāatrisina starpniekserverim, nevis jūsu datoram. |
| Ātrums | Atšķiras | Abi tīkli katram baitam pievieno aizkavi. I2P ir lēnākais no abiem. |
Atlikums un ierobežojumi ir aprakstīti savā lapā. Ierobežojumi un atlikums
cURL caur Tor
Palaidiet Tor klientu savā datorā. Tas piedāvā SOCKS5 starpniekserveri adresē 127.0.0.1:9050. --socks5-hostname nodod .onion nosaukumu šim starpniekserverim.
# 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 caur I2P
Palaidiet I2P maršrutētāju savā datorā. Tas piedāvā HTTP starpniekserveri adresē 127.0.0.1:4444, kas pieņem .b32.i2p nosaukumu tādu, kāds tas ir.
# 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"}]
}' SDK bāzes URL
SDK vajadzīgas divas izmaiņas: tīkla bāzes URL un HTTP klients, kas iet caur starpniekserveri. Python abi oficiālie SDK pieņem httpx klientu. SOCKS starpniekserverim instalējiet 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) Straumēšana un keep-alive lēnos savienojumos
Straumēšana darbojas abos tīklos. Kamēr straume ir atvērta un modelim vēl nav ko sūtīt, API sūta keep-alive, lai savienojums starpniekserverim vai jūsu klientam neizskatītos miris.
| Galapunkts | Keep-alive atvērtā straumē | Sūta modeļiem |
|---|---|---|
/v1/chat/completions | Komentāra rinda (tā sākas ar :) ik pēc 15 sekundēm. | Visi modeļi |
/v1/messages | event: ping vai komentāra rinda ik pēc 15 sekundēm. | Visi modeļi |
/v1/responses | Komentāra rinda ik pēc 15 sekundēm. | Hostētie atvērto svaru modeļi |
- Sūtiet
"stream": true. Straumēta atbilde sāk ierasties, tiklīdz modelis raksta, un keep-alive rāda, ka pieprasījums joprojām tiek apstrādāts. Nestraumēta atbilde neko nesūta, līdz visa atbilde ir gatava. - Iestatiet klientam garu lasīšanas taimautu. Piemēros izmantotas 600 sekundes. Taimauts, īsāks par 15 sekundēm, var pārtraukt straumi starp diviem keep-alive.
- Ļaujiet savam SSE lasītājam izlaist komentāru rindas un
pingnotikumus. SDK to jau dara. - Nesūtiet pieprasījumu vēlreiz tajā pašā brīdī, kad savienojums pārtrūkst. Pieprasījums, kas sasniedza API, tiek izpildīts līdz galam un ieskaitīts arī tad, ja savienojuma vairs nav.
- Vispirms pārbaudiet ceļu ar
GET /v1/models. Tam atslēga nav vajadzīga, un tas atgriež īsu JSON sarakstu.
Savienojuma problēmas
| Simptoms | Cēlonis un labojums |
|---|---|
Savienojums ar 127.0.0.1:9050 vai 127.0.0.1:4444 tiek noraidīts | Jūsu datorā nedarbojas neviens Tor klients vai I2P maršrutētājs, vai tas klausās citā portā. Tor Browser savu SOCKS starpniekserveri piedāvā portā 9150. |
Could not resolve host nosaukumam .onion | Klients mēģināja nosaukumu atrisināt pats. Izmantojiet --socks5-hostname cURL un socks5h:// starpniekservera URL, lai to atrisina Tor klients. |
| I2P starpniekserveris atbild ar savu kļūdas lapu | Maršrutētājs adresi vēl nav atradis. Maršrutētājam pēc palaišanas vajag dažas minūtes. Mēģiniet vēlreiz. |
401 ar Missing authentication | Pieprasījums ieradās bez atslēgas. Sūtiet to pašu galveni, kas atklātajā tīmeklī. |
Katra cita kļūda ir tāda pati kā atklātajā tīmeklī. Kļūdu apstrāde
Jūsu atslēga bez JavaScript
Shannon ir arī tīmekļa vietne bez JavaScript, sasniedzama atklātajā tīmeklī, kā onion pakalpojums un kā eepsite. Tās lapa /keys rāda jūsu API atslēgu un ļauj to nomainīt, tāpēc atslēgu varat iegūt, neizejot no Tor vai I2P. encrypted.shannon-ai.com/keys
Šīs tīmekļa vietnes adreses visos trijos tīklos ir uzskaitītas šeit: Šifrēta piekļuve