يدعم LLM Resayil الآن تنسيق واجهة رسائل Anthropic جنبًا إلى جنب مع نقطة النهاية المتوافقة مع OpenAI.
استخدم POST /v1/messages بنفس مفاتيح API ونفس الرصيد ونفس النماذج.
إذا كنت تستخدم بالفعل Anthropic SDK، فما عليك سوى توجيهه إلى عنوان URL الأساسي الخاص بنا وبدء الطلبات فورًا.
واجهة رسائل Anthropic هي تنسيق بديل للطلب والاستجابة للتفاعل مع نماذج LLM Resayil.
بينما تظل نقطة النهاية المتوافقة مع OpenAI /v1/chat/completions مدعومة بالكامل،
توفر واجهة الرسائل واجهة مألوفة للمطورين الذين يستخدمون بالفعل منظومة Anthropic.
message_start، content_block_delta، إلخ).ملاحظة: لا تحتاج إلى مفاتيح API منفصلة لواجهة الرسائل. تعمل مفاتيح LLM Resayil الحالية
مع كلٍّ من /v1/chat/completions و /v1/messages.
تقبل واجهة الرسائل نفس طرق المصادقة لجميع نقاط نهاية LLM Resayil.
يمكنك استخدام الترويسة القياسية Authorization: Bearer أو ترويسة x-api-key بأسلوب Anthropic.
Authorization: Bearer YOUR_API_KEY
x-api-key: YOUR_API_KEY
كلتا الطريقتين متكافئتان. ترويسة x-api-key مدعومة للتوافق مع Anthropic SDK الرسمي
الذي يرسل بيانات الاعتماد بهذه الطريقة افتراضيًا.
مستخدمو Anthropic SDK: يرسل SDK ترويسة x-api-key تلقائيًا. تحتاج فقط إلى
تهيئة base_url وتوفير مفتاح LLM Resayil API كمعامل api_key.
أرسل طلب POST إلى /v1/messages مع جسم JSON
يحتوي على اختيار النموذج والرسائل.
POST https://llmapi.resayil.io/v1/messages
curl -X POST https://llmapi.resayil.io/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "mistral",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "What is the capital of France?"}
]
}'
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "The capital of France is Paris."
}
],
"model": "mistral",
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 14,
"output_tokens": 9
}
}
مواصفات جسم الطلب الكاملة لـ POST /v1/messages.
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
model |
string | نعم | النموذج المستخدم (مثال: "mistral"، "llama3.1"). راجع النماذج المتاحة. |
messages |
array | نعم | مصفوفة من كائنات الرسائل مع حقلَي role و content. |
max_tokens |
integer | نعم | الحد الأقصى لعدد الرموز المولَّدة. يجب أن يكون أكبر من 0. |
system |
string | لا | رسالة النظام. في تنسيق Anthropic، رسالة النظام هي حقل في المستوى الأعلى، وليست جزءًا من مصفوفة الرسائل. |
temperature |
float | لا | درجة حرارة أخذ العينات بين 0.0 و 1.0. الافتراضي: يعتمد على النموذج. |
top_p |
float | لا | معامل أخذ عينات النواة. الافتراضي: يعتمد على النموذج. |
top_k |
integer | لا | معامل أخذ عينات Top-K. يأخذ عينات فقط من الرموز K الأكثر احتمالاً. |
stop_sequences |
array | لا | مصفوفة من السلاسل التي تُوقف توليد النموذج عند مواجهتها. |
stream |
boolean | لا | اضبط على true للاستجابات المتدفقة عبر SSE. الافتراضي: false. |
tools |
array | لا | مصفوفة تعريفات الأدوات لاستدعاء الوظائف. راجع استدعاء الأدوات. |
tool_choice |
object | لا | يتحكم في اختيار الأداة: {"type": "auto"}، {"type": "any"}، أو {"type": "tool", "name": "..."}. |
على عكس تنسيق OpenAI حيث تكون رسالة النظام برسالة ذات "role": "system"،
يستخدم تنسيق Anthropic حقل system في المستوى الأعلى:
{
"model": "mistral",
"max_tokens": 1024,
"system": "You are a helpful assistant who speaks formally.",
"messages": [
{"role": "user", "content": "Greet me."}
]
}
{
"model": "llama3.1",
"max_tokens": 2048,
"messages": [
{"role": "user", "content": "What is machine learning?"},
{"role": "assistant", "content": "Machine learning is a subset of AI..."},
{"role": "user", "content": "Can you give me a practical example?"}
]
}
تُعيد الاستجابات غير المتدفقة كائن رسالة كاملاً.
| الحقل | النوع | الوصف |
|---|---|---|
id |
string | معرّف الرسالة الفريد (يبدأ بـ msg_). |
type |
string | دائمًا "message". |
role |
string | دائمًا "assistant". |
content |
array | مصفوفة من كتل المحتوى. كل كتلة لها حقل type ("text" أو "tool_use"). |
model |
string | النموذج الذي أنشأ الاستجابة. |
stop_reason |
string | سبب توقف التوليد: "end_turn"، "max_tokens"، "stop_sequence"، أو "tool_use". |
stop_sequence |
string|null | تسلسل الإيقاف الذي أثار التوقف، إن وُجد. |
usage |
object | استخدام الرموز: input_tokens و output_tokens. |
{
"id": "msg_01A2B3C4D5E6F7G8H9I0J1K2",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Here is a Python function that calculates factorial:\n\n```python\ndef factorial(n):\n if n <= 1:\n return 1\n return n * factorial(n - 1)\n```"
}
],
"model": "mistral",
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 22,
"output_tokens": 48
}
}
اضبط "stream": true لاستلام الاستجابة كتدفق من أحداث مُرسَلة من الخادم (SSE).
كل حدث له نوع event وحمولة data.
curl -X POST https://llmapi.resayil.io/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "mistral",
"max_tokens": 1024,
"stream": true,
"messages": [
{"role": "user", "content": "Write a haiku about coding."}
]
}'
| الحدث | الوصف |
|---|---|
message_start |
الحدث الأولي الذي يحتوي على كائن الرسالة مع البيانات الوصفية (id، model، role، usage). |
content_block_start |
يشير إلى بدء كتلة محتوى جديدة. يحتوي على index و content_block مع نوعها. |
content_block_delta |
محتوى نصي تدريجي. يحتوي على delta.text مع مقطع النص الجديد. |
content_block_stop |
يشير إلى انتهاء كتلة المحتوى الحالية. |
message_delta |
تحديث البيانات الوصفية للرسالة النهائية. يحتوي على stop_reason و usage المُحدَّث. |
message_stop |
يُشير إلى نهاية الرسالة المتدفقة. |
ping |
حدث إبقاء الاتصال حيًّا. يمكن تجاهله بأمان. |
event: message_start
data: {"type":"message_start","message":{"id":"msg_01ABC","type":"message","role":"assistant","content":[],"model":"mistral","stop_reason":null,"usage":{"input_tokens":15,"output_tokens":0}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: ping
data: {"type":"ping"}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Lines"}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" of"}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" code"}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":12}}
event: message_stop
data: {"type":"message_stop"}
تدعم واجهة الرسائل استدعاء الأدوات (الوظائف) باستخدام تنسيق استخدام أدوات Anthropic.
عرِّف الأدوات في طلبك، وقد يستجيب النموذج بكتلة محتوى tool_use.
{
"model": "mistral",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "Get the current weather for a given location.",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City and country, e.g. London, UK"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Temperature unit"
}
},
"required": ["location"]
}
}
],
"messages": [
{"role": "user", "content": "What is the weather in Kuwait City?"}
]
}
عندما يقرر النموذج استخدام أداة، تتضمن الاستجابة كتلة محتوى tool_use:
{
"id": "msg_01XYZ",
"type": "message",
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_01ABC",
"name": "get_weather",
"input": {
"location": "Kuwait City, Kuwait",
"unit": "celsius"
}
}
],
"stop_reason": "tool_use",
"usage": {"input_tokens": 85, "output_tokens": 42}
}
نفِّذ الأداة من جانبك وأرسل النتيجة مرة أخرى:
{
"model": "mistral",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "What is the weather in Kuwait City?"},
{
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_01ABC",
"name": "get_weather",
"input": {"location": "Kuwait City, Kuwait", "unit": "celsius"}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01ABC",
"content": "Currently 38C and sunny in Kuwait City."
}
]
}
]
}
تتبع أخطاء واجهة الرسائل تنسيق أخطاء Anthropic:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "max_tokens: field required"
}
}
| حالة HTTP | نوع الخطأ | الوصف |
|---|---|---|
400 |
invalid_request_error |
جسم طلب مشوّه، أو حقول مطلوبة مفقودة، أو قيم معاملات غير صالحة. |
401 |
authentication_error |
مفتاح API مفقود أو غير صالح. |
403 |
permission_error |
مفتاح API الخاص بك لا يملك صلاحية للإجراء المطلوب. |
404 |
not_found_error |
النموذج المطلوب غير موجود أو غير متاح. |
429 |
rate_limit_error |
طلبات كثيرة جدًا. انتظر وأعد المحاولة مع التراجع الأسي. |
500 |
api_error |
خطأ داخلي في الخادم. أعد المحاولة أو تواصل مع الدعم. |
529 |
overloaded_error |
واجهة API محمّلة بشكل مؤقت. أعد المحاولة بعد انتظار قصير. |
استراتيجية إعادة المحاولة: للأخطاء 429 و 529، نفِّذ التراجع الأسي
بدءًا من ثانية واحدة. لأخطاء 500، أعد المحاولة حتى 3 مرات قبل الفشل.
كلتا نقطتَي النهاية موجودتان على نفس الخلفية. فيما يلي مقارنة جنبًا إلى جنب:
| الميزة | تنسيق OpenAI | تنسيق Anthropic |
|---|---|---|
| نقطة النهاية | /v1/chat/completions |
/v1/messages |
| طريقة HTTP | POST | POST |
| ترويسة المصادقة | Authorization: Bearer |
x-api-key أو Authorization: Bearer |
| رسالة النظام | في مصفوفة الرسائل: {"role": "system", ...} |
حقل "system" في المستوى الأعلى |
| max_tokens | اختياري | مطلوب |
| محتوى الاستجابة | choices[0].message.content (string) |
content[0].text (array of blocks) |
| سبب التوقف | finish_reason: "stop", "length" |
stop_reason: "end_turn", "max_tokens" |
| رموز الاستخدام | prompt_tokens / completion_tokens |
input_tokens / output_tokens |
| تنسيق البث | SSE مع أسطر data: {} |
SSE مع event: و data: مُصنَّفَين |
| استدعاء الأدوات | functions / tools parameter |
tools with input_schema |
| نظام الرصيد | نفس الرصيد | نفس الرصيد |
| مفاتيح API | نفس المفاتيح | نفس المفاتيح |
ثبِّت Anthropic SDK الرسمي ووجِّهه إلى LLM Resayil:
pip install anthropic
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://llmapi.resayil.io/v1"
)
message = client.messages.create(
model="mistral",
max_tokens=1024,
messages=[
{"role": "user", "content": "Explain quantum computing in simple terms."}
]
)
print(message.content[0].text)
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://llmapi.resayil.io/v1"
)
with client.messages.stream(
model="mistral",
max_tokens=1024,
messages=[
{"role": "user", "content": "Write a short story about AI."}
]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://llmapi.resayil.io/v1'
});
const message = await client.messages.create({
model: 'mistral',
max_tokens: 1024,
messages: [
{ role: 'user', content: 'What are the benefits of TypeScript?' }
]
});
console.log(message.content[0].text);
curl -X POST https://llmapi.resayil.io/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "llama3.1",
"max_tokens": 2048,
"system": "You are a senior software architect. Answer concisely.",
"messages": [
{"role": "user", "content": "When should I use microservices vs monolith?"}
]
}'
ما هو مدعوم حاليًا وما هو غير مدعوم في تطبيق واجهة الرسائل لدينا:
| الميزة | الحالة | ملاحظات |
|---|---|---|
| الرسائل النصية | مدعوم | دعم كامل للإدخال/الإخراج النصي. |
| رسالة النظام | مدعوم | حقل system في المستوى الأعلى. |
| المحادثات متعددة الأدوار | مدعوم | رسائل متناوبة بين المستخدم والمساعد. |
| البث (SSE) | مدعوم | جميع أنواع الأحداث القياسية. |
| استدعاء الأدوات | مدعوم | تعريفات الأدوات، استجابات tool_use، رسائل tool_result. |
| Temperature / top_p / top_k | مدعوم | معاملات أخذ العينات القياسية. |
| تسلسلات الإيقاف | مدعوم | سلاسل إيقاف مخصصة. |
| إدخال الصور (الرؤية) | غير مدعوم | كتل محتوى الصور غير مقبولة. استخدم رسائل نصية فقط. |
| إدخال PDF | غير مدعوم | كتل محتوى المستندات غير مقبولة. |
| تخزين الطلبات المؤقت | غير مدعوم | معامل cache_control يُتجاهَل. |
| Batch API | غير مدعوم | استخدم الطلبات الفردية. |
| التفكير الموسَّع | غير مدعوم | معامل thinking غير متاح. |
إذا كنت تستخدم بالفعل Anthropic SDK، فإن التبديل إلى LLM Resayil يتطلب تغييرات طفيفة.
اضبط متغيرات البيئة التالية لتطبيقك:
ANTHROPIC_BASE_URL=https://llmapi.resayil.io/v1
ANTHROPIC_API_KEY=sk-your-llm-resayil-api-key
يُخصَم الرصيد بطريقة متطابقة سواء استخدمت نقطة نهاية OpenAI أو Anthropic.
استخدام الرموز المُبلَّغ عنه في الاستجابة (input_tokens و output_tokens)
يُترجَم مباشرةً إلى استهلاك الرصيد بناءً على مستوى النموذج:
تحقق من رصيدك على لوحة التحكم أو عبر توثيق الرصيد.
إذا كنت تنقل مشروعك من Anthropic API الرسمي:
base_url إلى https://llmapi.resayil.io/v1.model لأحد النماذج المتاحة (مثال: "mistral"، "llama3.1").cache_control، كتل الصور).https://llmdev.resayil.io/v1.هذا كل شيء. كودك الحالي ومعالجة الأخطاء ومنطق البث يعملون دون تغيير. تنسيق الاستجابة مطابق لما يُعيده Anthropic API الرسمي.
| المشكلة | السبب | الحل |
|---|---|---|
| "max_tokens: field required" | حقل max_tokens مفقود في جسم الطلب |
أضف "max_tokens": 1024 (مطلوب لواجهة الرسائل، على عكس OpenAI). |
| 401 authentication_error | مفتاح API غير صالح أو مفقود | تأكد من ضبط x-api-key أو Authorization: Bearer بشكل صحيح. |
| "model not found" | استخدام اسم نموذج Anthropic مثل "claude-3-sonnet" |
استخدم أسماء نماذج LLM Resayil. راجع النماذج المتاحة. |
| محتوى استجابة فارغ | max_tokens منخفض جدًا |
زِد max_tokens لإعطاء النموذج مساحة للاستجابة. |
| البث لا يعمل | غياب "stream": true أو تحليل SSE غير صحيح |
تأكد أن stream قيمة منطقية (ليست نصًا). حلِّل أسطر event: و data:. |
| نتيجة الأداة غير مقبولة | tool_use_id غير متطابق |
يجب أن يتطابق tool_use_id في tool_result مع id من استجابة tool_use. |
نعم. نقطتا نهاية OpenAI /v1/chat/completions و Anthropic /v1/messages
متعايشتان بشكل مستقل. يمكنك استدعاء أيٍّ منهما باستخدام نفس مفتاح API. الرصيد مشترك بينهما.
لا. مفتاح LLM Resayil API الحالي يعمل مع كلتا نقطتَي النهاية. لا يلزم أي تهيئة إضافية.
جميع النماذج المتاحة على LLM Resayil تعمل مع كلتا نقطتَي النهاية. أسماء النماذج هي نفسها
(مثال: "mistral"، "llama3.1"). لاحظ أن أسماء نماذج Anthropic المحددة
مثل "claude-3-sonnet" غير متاحة.
لا. يُحسَب الرصيد بطريقة متطابقة بغض النظر عن نقطة النهاية المستخدمة. نفس النموذج مع نفس عدد الرموز يكلف نفس الرصيد.
ليس حاليًا. يُدعم فقط محتوى النصوص. سيُرفض إدخال الصور و PDF مع خطأ.
يُوصى بها لكنها ليست مطلوبة بالضرورة. إذا حُذفت، تستخدم واجهة API أحدث إصدار مدعوم.
للاستخدام الإنتاجي، ثبِّتها على 2023-06-01 لسلوك متسق.