هذه الواجهة قيد الإهمال لصالح واجهة /chat/send-chat-message API،
وستتم إزالتها بحلول نهاية يناير 2026.
تدفق المحادثة البسيط
واجهة إرسال الرسالة البسيطة هي أسرع طريقة للتفاعل مع Gorbit برمجيًا. تحتوي نقطة النهاية هذه على معلمات مطلوبة أقل وتعيد حمولة JSON مختصرة موصوفة بواسطةChatBasicResponse.
يجب تحديد إما
chat_session_id أو persona_id في طلبك.import requests
API_BASE_URL = "https://cloud.gorbit.app/api" # أو نطاقك الخاص
API_KEY = "YOUR_KEY_HERE"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
'''
- لإنشاء جلسة محادثة، راجع دليل تدفق المحادثة الكامل أدناه.
- للعثور على persona_id الخاص بك، راجع نقطة نهاية قائمة الوكلاء في مرجع واجهة برمجة تطبيقات الوكلاء.
'''
response = requests.post(
f"{API_BASE_URL}/chat/send-message-simple-api",
headers=headers,
json={
"message": "ما هو Gorbit؟",
"persona_id": 0 # وكيل بحث Gorbit الافتراضي (int)
}
)
data = response.json()
answer = data.get("answer")
answer_citationless = data.get("answer_citationless")
message_id = data.get("message_id")
docs = data.get("top_documents") or []
top_documents = [
{
"id": doc.get("document_id"),
"title": doc.get("semantic_identifier"),
"link": doc.get("link")
} for doc in docs
]
cited_docs_map = data.get("cited_documents") or {}
print(f"الإجابة: {answer}")
print(f"الإجابة (بدون استشهادات): {answer_citationless}")
print(f"معرف الرسالة: {message_id}")
print(f"أهم المستندات: {top_documents[:5]}") # طباعة أهم 5 مستندات
print(f"خريطة الاستشهادات: {cited_docs_map}")
#!/bin/bash
API_BASE_URL="https://cloud.gorbit.app/api"
API_KEY="YOUR_KEY_HERE"
echo "جارٍ إرسال رسالة إلى Gorbit..."
RESPONSE=$(curl -s -X POST "${API_BASE_URL}/chat/send-message-simple-api" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"message": "ما هو Gorbit؟",
"persona_id": 0
}'
)
echo "الإجابة:"
echo $RESPONSE | jq -r '.answer'
echo -e "\nالإجابة (بدون استشهادات):"
echo $RESPONSE | jq -r '.answer_citationless'
echo -e "\nمعرف الرسالة:"
echo $RESPONSE | jq -r '.message_id'
echo -e "\nأهم المستندات:"
echo $RESPONSE | jq '.top_documents | .[] | {id: .document_id, title: .semantic_identifier, link: .link}'
تدفق المحادثة المتقدم
نقطة النهاية/send-message هي ما تستخدمه واجهة Gorbit الأمامية لإرسال واستلام الرسائل.
يتم بث الردود في حزم من كائنات JSON.
لفهم تنسيق الاستجابة، راجع توثيق المفاهيم الأساسية.
1
تحضير طلبك
import requests
API_BASE_URL = "https://cloud.gorbit.app/api" # أو نطاقك الخاص
API_KEY = "YOUR_KEY_HERE"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
API_BASE_URL="https://cloud.gorbit.app/api"
API_KEY="YOUR_KEY_HERE"
2
إنشاء جلسة محادثة
session_response = requests.post(
f"{API_BASE_URL}/chat/create-chat-session",
headers=headers,
json={
"persona_id": 0, # وكيل بحث Gorbit الافتراضي
"description": "جلسة محادثة دليل Gorbit API"
}
)
chat_session_id = session_response.json()["chat_session_id"]
CHAT_SESSION_RESPONSE=$(curl -s -X POST "${API_BASE_URL}/chat/create-chat-session" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"persona_id": 0,
"description": "جلسة محادثة دليل Gorbit API"
}'
)
# استخراج معرف جلسة المحادثة (يتطلب jq لتحليل JSON)
CHAT_SESSION_ID=$(echo $CHAT_SESSION_RESPONSE | jq -r '.chat_session_id')
3
إرسال رسالة
payload = {
"chat_session_id": chat_session_id,
"parent_message_id": None,
"message": "ما هو Gorbit؟",
"file_descriptors": [],
"search_doc_ids": [],
"retrieval_options": {}
}
# استهلاك الحزم المبثوثة بالكامل ثم طباعة ملخص
# ملاحظة: الحزمة الأولى تحتوي دائمًا على معرفات الرسائل:
# {"user_message_id": int, "reserved_assistant_message_id": int}
with requests.post(
f"{API_BASE_URL}/chat/send-message",
headers=headers,
json=payload,
stream=True,
) as resp:
resp.raise_for_status()
full_text = []
docs_raw = None
citations_map = {}
user_message_id = None
reserved_assistant_message_id = None
# كل سطر هو حزمة JSON: { ind: int, obj: { type: "...", ... } }
for line in resp.iter_lines(decode_unicode=True):
if not line:
continue
try:
packet = json.loads(line)
except Exception:
continue
# الحزمة الأولى: معرفات الرسائل
if "user_message_id" in packet and "reserved_assistant_message_id" in packet:
user_message_id = packet.get("user_message_id")
reserved_assistant_message_id = packet.get("reserved_assistant_message_id")
continue
obj = packet.get("obj", {})
ptype = obj.get("type")
if ptype == "message_start":
# تتضمن مستندات البحث النهائية حسب مواصفات API
docs_raw = obj.get("final_documents") or docs_raw
elif ptype == "message_delta":
delta = obj.get("content", "")
full_text.append(delta)
elif ptype == "citation_delta":
# تحديث خريطة الاستشهادات باستخدام أزواج citation_num -> document_id
if isinstance(obj.get("citations"), list):
for c in obj["citations"]:
cnum = c.get("citation_num")
did = c.get("document_id")
if cnum is not None and did is not None:
citations_map[str(cnum)] = str(did)
elif ptype == "stop":
break
# تحضير المستندات (id/title/link) إذا كانت موجودة
top_documents = []
if isinstance(docs_raw, list):
for d in docs_raw:
top_documents.append(
{
"id": d.get("document_id") or d.get("id"),
"title": d.get("semantic_identifier") or d.get("title"),
"link": d.get("link") or d.get("url"),
}
)
print("الإجابة النهائية:\n" + "".join(full_text))
if user_message_id is not None:
print(f"\nمعرف رسالة المستخدم: {user_message_id}")
if reserved_assistant_message_id is not None:
print(f"معرف رسالة المساعد المحجوز: {reserved_assistant_message_id}")
print("\nأهم المستندات:")
print(json.dumps(top_documents, indent=2))
print("\nخريطة الاستشهادات (citation_num -> document_id):")
print(json.dumps(citations_map, indent=2))
# قراءة الاستجابة المبثوثة حتى الاكتمال (بدون عرض الرموز المميزة المباشر)
curl -s -N -X POST "${API_BASE_URL}/chat/send-message" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d "{
\"chat_session_id\": \"${CHAT_SESSION_ID}\",
\"parent_message_id\": null,
\"message\": \"ما هو Gorbit؟\",
\"file_descriptors\": [],
\"search_doc_ids\": [],
\"retrieval_options\": {}
}" \
| (
TEXT=""
DOCS_JSON=""
CITS_JSON='{}'
USER_MSG_ID=""
RESERVED_ASST_ID=""
while IFS= read -r line; do
[ -z "$line" ] && continue
# الحزمة الأولى تحتوي على معرفات الرسائل
uid=$(echo "$line" | jq -r '.user_message_id // empty')
rid=$(echo "$line" | jq -r '.reserved_assistant_message_id // empty')
if [ -n "$uid" ] || [ -n "$rid" ]; then
[ -n "$uid" ] && USER_MSG_ID="$uid"
[ -n "$rid" ] && RESERVED_ASST_ID="$rid"
continue
fi
type=$(echo "$line" | jq -r '.obj.type // empty')
if [ "$type" = "message_start" ]; then
docs=$(echo "$line" | jq -c '(.obj.final_documents) // empty')
if [ -n "$docs" ] && [ -z "$DOCS_JSON" ]; then
DOCS_JSON="$docs"
fi
elif [ "$type" = "message_delta" ]; then
delta=$(echo "$line" | jq -r '.obj.content // empty')
TEXT+="$delta"
elif [ "$type" = "citation_delta" ]; then
newmap=$(echo "$line" | jq -c '
if (.obj.citations // empty) then
(reduce (.obj.citations // [])[] as $c ({}; .[($c.citation_num|tostring)] = ($c.document_id|tostring)))
else
{}
end')
CITS_JSON=$(jq -c --argjson A "$CITS_JSON" --argjson B "$newmap" '$A * $B' <<< '{}')
elif [ "$type" = "stop" ]; then
break
fi
done
echo "الإجابة النهائية:"
printf "%s\n" "$TEXT"
echo
if [ -n "$USER_MSG_ID" ]; then
echo "معرف رسالة المستخدم: $USER_MSG_ID"
fi
if [ -n "$RESERVED_ASST_ID" ]; then
echo "معرف رسالة المساعد المحجوز: $RESERVED_ASST_ID"
fi
echo
echo "أهم المستندات:"
if [ -z "$DOCS_JSON" ]; then
echo "[]"
else
echo "$DOCS_JSON" | jq -c '[.[] | {id: (.document_id // .id), title: (.semantic_identifier // .title), link: (.link // .url)}]'
fi
echo
echo "خريطة الاستشهادات (citation_num -> document_id):"
echo "$CITS_JSON" | jq '.'
)
الخطوات التالية
الدليل: استخدام واجهة الاستيعاب
استخدم واجهة الاستيعاب الخفيفة لفهرسة المستندات
الدليل: إنشاء موصل
تعلم كيفية إنشاء وتكوين الموصلات برمجيًا