Endpoint ដែលបានអ៊ិនគ្រីប, Tor និង I2P
API ក៏ត្រូវបានបោះពុម្ពផ្សាយជា Tor onion service និង I2P eepsite ដែរ។ route ដូចគ្នា key ដូចគ្នា៖ មានតែ base URL និង proxy ប៉ុណ្ណោះដែលផ្លាស់ប្តូរ។
Base URL
អាសយដ្ឋានបួនបណ្តាលទៅ API ដូចគ្នា។ សូមប្រើមួយដែលសមនឹងបណ្តាញរបស់អ្នក ជាមួយ API key ដូចគ្នា និង request ដូចគ្នា។
| បណ្តាញ | Base URL | របៀបដែលអ្នកទៅដល់វា |
|---|---|---|
| Clear web | https://api.shannon-ai.com/v1 | ដោយផ្ទាល់ តាម HTTPS។ |
| Mirror ដែលបានអ៊ិនគ្រីប | https://api-encrypted.shannon-ai.com/v1 | ដោយផ្ទាល់ តាម HTTPS។ ឈ្មោះ host ទីពីរសម្រាប់ API ដូចគ្នា។ |
| Tor (onion service) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | តាមរយៈ Tor client៖ SOCKS5 proxy តាមលំនាំដើមនៅ 127.0.0.1:9050។ |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | តាមរយៈ I2P router៖ HTTP proxy តាមលំនាំដើមនៅ 127.0.0.1:4444។ |
- OpenAI SDK យក base URL ដូចបង្ហាញ ជាមួយ
/v1។ Anthropic SDK យកវាដោយគ្មាន/v1។ - ដើម្បីផ្ទៀងផ្ទាត់អាសយដ្ឋាន សូមអាន header ចម្លើយរបស់
https://api.shannon-ai.com៖Onion-Locationមានអាសយដ្ឋាន onion ហើយX-I2P-Locationមានអាសយដ្ឋាន I2P។ អាសយដ្ឋាន onion ចាប់ផ្តើមដោយshannon។
Route ណាដំណើរការ
រាល់ route /v1 ឆ្លើយតបលើអាសយដ្ឋានទាំងបួន៖
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models មិនត្រូវការ key ដែលធ្វើឱ្យវាជាការសាកល្បងរហ័សថា proxy របស់អ្នកទៅដល់ API។
អ្វីដែលដូចគ្នា និងអ្វីដែលខុសគ្នា
| ធាតុ | ដូចគ្នា? | ព័ត៌មានលម្អិត |
|---|---|---|
| Route, field នៃ request, ចម្លើយ, កំហុស | ដូចគ្នា | ដូចគ្នាលើគ្រប់អាសយដ្ឋាន។ គ្មាន route ណាដែលដំណើរការខុសគ្នាតាមឈ្មោះ host ទេ។ |
| API key | ដូចគ្នា | key មួយដំណើរការលើគ្រប់អាសយដ្ឋាន ជា Authorization: Bearer ឬ x-api-key។ Cookie មិនដែលត្រូវបានអានលើ /v1 ទេ។ |
| សមតុល្យ និងដែនកំណត់ | ដូចគ្នា | សមតុល្យដូចគ្នា និងដែនកំណត់ដូចគ្នា 120 request ក្នុងមួយនាទី។ ទាំងពីរត្រូវបានរាប់តាមគណនី មិនមែនតាមអាសយដ្ឋានទេ។ |
| ទំហំ request | ដូចគ្នា | រហូតដល់ 32 MiB ក្នុងមួយខ្លឹមសារ request។ |
| Scheme | ខុសគ្នា | https:// លើ clear web និងលើ mirror។ http:// លើអាសយដ្ឋាន .onion និង .b32.i2p ដែលបណ្តាញខ្លួនឯងអ៊ិនគ្រីបការតភ្ជាប់ពីចុងដល់ចុង។ |
| Proxy | ខុសគ្នា | គ្មានលើ clear web។ SOCKS5 proxy សម្រាប់ Tor, HTTP proxy សម្រាប់ I2P។ ឈ្មោះត្រូវតែត្រូវបានដោះស្រាយដោយ proxy មិនមែនដោយម៉ាស៊ីនរបស់អ្នកទេ។ |
| ល្បឿន | ខុសគ្នា | បណ្តាញទាំងពីរបន្ថែមការពន្យារពេលដល់រាល់ byte។ I2P យឺតជាងក្នុងចំណោមទាំងពីរ។ |
សមតុល្យ និងដែនកំណត់ត្រូវបានពិពណ៌នានៅលើទំព័រផ្ទាល់ខ្លួន។ ដែនកំណត់ និងសមតុល្យ
cURL តាមរយៈ Tor
សូមដំណើរការ Tor client លើម៉ាស៊ីនរបស់អ្នក។ វាផ្តល់ SOCKS5 proxy នៅ 127.0.0.1:9050។ --socks5-hostname ប្រគល់ឈ្មោះ .onion ទៅ 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 តាមរយៈ I2P
សូមដំណើរការ I2P router លើម៉ាស៊ីនរបស់អ្នក។ វាផ្តល់ HTTP proxy នៅ 127.0.0.1:4444 ដែលទទួលឈ្មោះ .b32.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 របស់ SDK
SDK ត្រូវការការផ្លាស់ប្តូរពីរ៖ base URL នៃបណ្តាញ និង HTTP client ដែលឆ្លងកាត់ proxy។ ក្នុង Python SDK ផ្លូវការទាំងពីរទទួល httpx client។ សម្រាប់ SOCKS proxy សូមដំឡើង 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) Streaming និង keep-alive លើតំណភ្ជាប់យឺត
Streaming ដំណើរការលើបណ្តាញទាំងពីរ។ ខណៈពេល stream បើក ហើយម៉ូដែលមិនទាន់មានអ្វីត្រូវផ្ញើ API ផ្ញើ keep-alive ដូច្នេះការតភ្ជាប់មិនមើលទៅដូចជាស្លាប់ចំពោះ proxy ឬ client របស់អ្នកទេ។
| Endpoint | Keep-alive នៅលើ stream ដែលកំពុងបើក | ផ្ញើសម្រាប់ |
|---|---|---|
/v1/chat/completions | បន្ទាត់ comment (ចាប់ផ្តើមដោយ :) រៀងរាល់ 15 វិនាទី។ | គ្រប់ម៉ូដែល |
/v1/messages | event: ping ឬបន្ទាត់ comment រៀងរាល់ 15 វិនាទី។ | គ្រប់ម៉ូដែល |
/v1/responses | បន្ទាត់ comment រៀងរាល់ 15 វិនាទី។ | ម៉ូដែល open-weight ដែលបង្ហោះ |
- សូមផ្ញើ
"stream": true។ ចម្លើយដែល stream ចាប់ផ្តើមមកដល់ភ្លាមៗដែលម៉ូដែលសរសេរ ហើយ keep-alive បង្ហាញថា request នៅតែកំពុងត្រូវបានដំណើរការ។ ចម្លើយដែលមិន stream មិនផ្ញើអ្វីទេ រហូតដល់ចម្លើយទាំងមូលរួចរាល់។ - សូមផ្តល់ read timeout វែងដល់ client។ គំរូប្រើ 600 វិនាទី។ timeout ខ្លីជាង 15 វិនាទីអាចបញ្ចប់ stream រវាង keep-alive ពីរ។
- សូមឱ្យ SSE reader របស់អ្នករំលងបន្ទាត់ comment និង event
ping។ SDK ធ្វើដូច្នេះរួចហើយ។ - កុំផ្ញើ request ម្តងទៀតភ្លាមៗនៅពេលការតភ្ជាប់ដាច់។ request ដែលបានទៅដល់ API ដំណើរការដល់ចុង ហើយត្រូវបានរាប់ ទោះការតភ្ជាប់បាត់ក៏ដោយ។
- សូមសាកល្បងផ្លូវដោយ
GET /v1/modelsជាមុនសិន។ វាមិនត្រូវការ key ហើយត្រឡប់បញ្ជី JSON ខ្លី។
បញ្ហាការតភ្ជាប់
| រោគសញ្ញា | មូលហេតុ និងដំណោះស្រាយ |
|---|---|
ការតភ្ជាប់ទៅ 127.0.0.1:9050 ឬ 127.0.0.1:4444 ត្រូវបានបដិសេធ | គ្មាន Tor client ឬ I2P router កំពុងដំណើរការលើម៉ាស៊ីនរបស់អ្នកទេ ឬវាស្តាប់នៅ port ផ្សេង។ Tor Browser ផ្តល់ SOCKS proxy របស់វានៅ port 9150។ |
Could not resolve host សម្រាប់ឈ្មោះ .onion | client បានព្យាយាមដោះស្រាយឈ្មោះដោយខ្លួនឯង។ សូមប្រើ --socks5-hostname ក្នុង cURL និង socks5h:// ក្នុង proxy URL ដើម្បីឱ្យ Tor client ដោះស្រាយវា។ |
| I2P proxy ឆ្លើយដោយទំព័រ error ផ្ទាល់ខ្លួនរបស់វា | router មិនទាន់រកឃើញអាសយដ្ឋានទេ។ router ត្រូវការពីរបីនាទីបន្ទាប់ពីវាចាប់ផ្តើម។ សូមព្យាយាមម្តងទៀត។ |
401 ជាមួយ Missing authentication | request មកដល់ដោយគ្មាន key។ សូមផ្ញើ header ដូចគ្នានឹងលើ clear web។ |
កំហុសផ្សេងទៀតទាំងអស់ដូចគ្នានឹងលើ clear web។ ការគ្រប់គ្រងកំហុស
key របស់អ្នកដោយគ្មាន JavaScript
Shannon ក៏មានគេហទំព័រដែលគ្មាន JavaScript ដែលអាចចូលបានលើ clear web ជា onion service និងជា eepsite។ ទំព័រ /keys របស់វាបង្ហាញ API key របស់អ្នក ហើយអនុញ្ញាតឱ្យអ្នកប្តូរវា ដូច្នេះអ្នកអាចទទួលបាន key ដោយមិនចាំបាច់ចាកចេញពី Tor ឬ I2P។ encrypted.shannon-ai.com/keys
អាសយដ្ឋាននៃគេហទំព័រនោះលើបណ្តាញទាំងបីត្រូវបានរាយនៅទីនេះ៖ ការចូលប្រើដែលបានអ៊ិនគ្រីប