تخطَّ إلى المحتوى
نقاط نهاية مشفّرة وعبر Tor وI2P

نقاط نهاية مشفّرة وعبر Tor وI2P

تُنشر API أيضاً كخدمة onion على Tor وكموقع eepsite على I2P. المسارات نفسها والمفتاح نفسه؛ ولا يتغير إلا base URL والوسيط.

عناوين Base URL

أربعة عناوين تؤدي إلى API نفسها. استخدم العنوان الذي يناسب شبكتك، بمفتاح API نفسه والطلبات نفسها.

الشبكة Base URL كيف تصل إليه
الويب العادي https://api.shannon-ai.com/v1 مباشرة، عبر HTTPS.
نسخة مرآة مشفّرة https://api-encrypted.shannon-ai.com/v1 مباشرة، عبر HTTPS. اسم مضيف ثانٍ لـ API نفسها.
Tor (خدمة onion) http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 عبر عميل Tor: وسيط SOCKS5، يكون افتراضياً على 127.0.0.1:9050.
I2P (eepsite) http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 عبر موجّه I2P: وسيط HTTP، يكون افتراضياً على 127.0.0.1:4444.
  • يقبل OpenAI SDK عنوان base URL كما هو معروض، مع /v1. ويقبله Anthropic SDK بدون /v1.
  • للتحقق من عنوان، اقرأ ترويسات الرد من https://api.shannon-ai.com: تحمل Onion-Location عنوان onion، وتحمل X-I2P-Location عنوان I2P. ويبدأ عنوان onion بـ shannon.

أي المسارات تعمل

كل مسار /v1 يجيب على العناوين الأربعة كلها:

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

GET /v1/models لا يحتاج إلى مفتاح، فهو اختبار سريع لمعرفة أن وسيطك يصل إلى API.

ما الذي يتشابه وما الذي يختلف

العنصر هل هو نفسه؟ التفصيل
المسارات وحقول الطلب والردود والأخطاء نفسه هي نفسها على كل عنوان. ولا يتصرف أي مسار بشكل مختلف حسب اسم المضيف.
مفتاح API نفسه مفتاح واحد يعمل على كل عنوان، باسم Authorization: Bearer أو x-api-key. ولا تُقرأ ملفات تعريف الارتباط (cookies) أبداً على /v1.
الرصيد والحدود نفسه الرصيد نفسه وحد الـ 120 طلباً في الدقيقة نفسه. وكلاهما يُحتسب لكل حساب، لا لكل عنوان.
حجم الطلب نفسه حتى 32 MiB لنص الطلب الواحد.
المخطط (Scheme) يختلف https:// على الويب العادي وعلى النسخة المرآة. وhttp:// على عنواني .onion و.b32.i2p، حيث تشفّر الشبكة نفسها الاتصال من طرف إلى طرف.
الوسيط (Proxy) يختلف لا وسيط على الويب العادي. وسيط SOCKS5 لـ Tor، ووسيط HTTP لـ I2P. ويجب أن يحلّ الوسيط الاسم، لا جهازك.
السرعة يختلف كلتا الشبكتين تضيفان تأخيراً لكل بايت. وI2P هي الأبطأ بينهما.

الرصيد والحدود موصوفان في صفحتهما الخاصة. الحدود والرصيد

cURL عبر Tor

شغّل عميل Tor على جهازك. يوفّر وسيط SOCKS5 على 127.0.0.1:9050. ويمرّر --socks5-hostname الاسم .onion إلى ذلك الوسيط.

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 عبر I2P

شغّل موجّه I2P على جهازك. يوفّر وسيط HTTP على 127.0.0.1:4444، يقبل الاسم .b32.i2p كما هو.

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"}]
  }'

Base URL في SDK

يحتاج SDK إلى تغييرين: base URL الخاص بالشبكة، وعميل HTTP يمر عبر الوسيط. في Python يقبل SDK الرسميان كلاهما عميل httpx. ولوسيط SOCKS ثبّت 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)

يعمل البث على الشبكتين كلتيهما. وبينما يكون البث مفتوحاً وليس لدى النموذج ما يرسله بعد، ترسل API رسالة keep-alive، حتى لا يبدو الاتصال ميتاً للوسيط أو لعميلك.

نقطة النهاية Keep-alive على بث مفتوح يُرسل لـ
/v1/chat/completions سطر تعليق (يبدأ بـ :) كل 15 ثانية. كل النماذج
/v1/messages حدث event: ping، أو سطر تعليق، كل 15 ثانية. كل النماذج
/v1/responses سطر تعليق كل 15 ثانية. النماذج المفتوحة الأوزان المستضافة
  • أرسل "stream": true. يبدأ الرد المبثوث بالوصول فور كتابة النموذج، ويدل keep-alive على أن الطلب ما زال قيد المعالجة. أما الرد غير المبثوث فلا يرسل شيئاً حتى تكتمل الإجابة كلها.
  • أعطِ العميل مهلة قراءة طويلة. تستخدم الأمثلة 600 ثانية. والمهلة الأقصر من 15 ثانية قد تنهي البث بين رسالتي keep-alive.
  • اجعل قارئ SSE لديك يتخطى أسطر التعليق وأحداث ping. وSDKs تفعل ذلك أصلاً.
  • لا تعد إرسال الطلب لحظة انقطاع الاتصال. فالطلب الذي وصل إلى API يعمل حتى نهايته ويُحتسب، حتى لو زال الاتصال.
  • اختبر المسار أولاً بـ GET /v1/models. فهو لا يحتاج إلى مفتاح ويعيد قائمة JSON قصيرة.

مشكلات الاتصال

العَرَض السبب والحل
رُفض الاتصال بـ 127.0.0.1:9050 أو 127.0.0.1:4444 لا يعمل عميل Tor أو موجّه I2P على جهازك، أو أنه يستمع على منفذ آخر. يوفّر Tor Browser وسيط SOCKS الخاص به على المنفذ 9150.
Could not resolve host للاسم .onion حاول العميل حلّ الاسم بنفسه. استخدم --socks5-hostname في cURL وsocks5h:// في عنوان الوسيط، ليحلّه عميل Tor.
يجيب وسيط I2P بصفحة الخطأ الخاصة به لم يعثر الموجّه على العنوان بعد. يحتاج الموجّه إلى بضع دقائق بعد بدء تشغيله. حاول مرة أخرى.
401 مع Missing authentication وصل الطلب بدون مفتاح. أرسل الترويسة نفسها المستخدمة على الويب العادي.

كل خطأ آخر هو نفسه كما على الويب العادي. معالجة الأخطاء

مفتاحك بدون JavaScript

لدى Shannon أيضاً موقع بدون JavaScript، يمكن الوصول إليه على الويب العادي، وكخدمة onion، وكموقع eepsite. وتعرض صفحته /keys مفتاح API الخاص بك وتتيح لك تدويره، فيمكنك الحصول على مفتاح دون مغادرة Tor أو I2P. encrypted.shannon-ai.com/keys

عناوين ذلك الموقع على الشبكات الثلاث كلها مسرودة هنا: الوصول المشفّر