واجهة إرسال الرسالة البسيطة هي أسرع طريقة للتفاعل مع Gorbit برمجيًا.تحتوي نقطة النهاية هذه على معلمات مطلوبة أقل وتعيد حمولة JSON مختصرة موصوفة بواسطة ChatBasicResponse.
يجب تحديد إما chat_session_id أو persona_id في طلبك.
import requestsAPI_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}")
نقطة النهاية /send-message هي ما تستخدمه واجهة Gorbit الأمامية لإرسال واستلام الرسائل.
يتم بث الردود في حزم من كائنات JSON.لفهم تنسيق الاستجابة، راجع توثيق المفاهيم الأساسية.
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))