البنية التقنية (دليل المطور المبدع)
نظرة معمقة على خط أنابيب RAG للمطورين الذين يريدون فهم آلية العمل.
نظرة عامة على خط أنابيب RAG
يستخدم LaunchChat تقنية التوليد المعزز بالاسترجاع (RAG) للإجابة على الأسئلة بناءً على مستنداتك.
1. الاستيعاب
تحليل ← تجزئة ← تضمين ← تخزين
2. الاسترجاع
استعلام ← بحث متجهي ← ترتيب
3. التوليد
سياق ← LLM ← إجابة + اقتباسات
خط أنابيب الاستيعاب
1. التحليل
يتم تحليل المحتوى من مصادر مختلفة إلى نص عادي:
- Notion: تحليل كتلة بكتلة مع الحفاظ على التسلسل الهرمي
- DOCX: استخراج عبر mammoth.js
- Markdown: تحليل باستخدام remark/unified
- Website: موقع إلكتروني: فحص وتنظيف من عناصر التنقل والتذييل
2. التجزئة
يتم تقسيم النص إلى أجزاء متداخلة للاسترجاع الأمثل:
{
targetSize: 400, // tokens per chunk
overlap: 50, // token overlap between chunks
preserveHeadings: true, // keep heading context
minChunkSize: 100 // minimum viable chunk
}كل جزء يحتفظ بتسلسل العناوين الأصلية للسياق.
3. التضمين
يتم تحويل الأجزاء إلى متجهات بـ 1536 بُعداً:
Model: text-embedding-3-small
Dimensions: 1536
Provider: OpenAI (via OpenRouter)4. التخزين
تُخزَّن المتجهات في PostgreSQL مع إضافة pgvector:
-- content_chunks table
id: uuid
knowledge_base_id: uuid
page_id: string
page_title: string
content: text
embedding: vector(1536)
parent_heading: stringاستراتيجية الاسترجاع
البحث الهجين
نستخدم عملية استرجاع من مرحلتين:
- Vector Search: البحث المتجهي: تشابه جيب التمام باستخدام عامل <=> في pgvector
- Keyword Fallback: الرجوع للكلمات المفتاحية: إذا كانت نتائج المتجهات ذات تشابه منخفض، نضيف أجزاء مطابقة بالكلمات المفتاحية
تسجيل التشابه
-- Vector similarity query
SELECT *, 1 - (embedding <=> query_embedding) as similarity
FROM content_chunks
WHERE knowledge_base_id = $1
ORDER BY embedding <=> query_embedding
LIMIT 5توليد الإجابة
تسجيل الثقة
قبل التوليد، نحسب درجة الثقة:
confidence = bestSimilarity + (hasMultipleChunks ? 0.1 : 0) + 0.2
// Capped at 1.0
if (confidence < threshold) {
return refusalMessage; // Don't hallucinate
}استخراج الاقتباسات
يُوجَّه LLM لاستخدام تنسيق [Source N]. نحلل هذه الاقتباسات ونربطها بالصفحات الأصلية:
// Extract citations from answer
const citationPattern = /\[Source (\d+)\]/g;
const matches = answer.matchAll(citationPattern);
// Map to original pages
citations = matches.map(m => chunks[m[1] - 1])أفضل ممارسات التوثيق
نظّم مستنداتك للاسترجاع الأمثل بالذكاء الاصطناعي:
افعل
- استخدم عناوين واضحة ووصفية
- اجعل الأقسام مركزة على موضوع واحد
- أضف أمثلة ومقتطفات كود
- عرّف المصطلحات والاختصارات
- حدّث المستندات عند تغيير المميزات
تجنّب
- صفحات طويلة جداً بدون هيكلة
- محتوى مكرر عبر الصفحات
- معلومات قديمة أو متناقضة
- استخدام مكثف للصور بدون نص بديل
- صفحات التنقل فقط
قالب تعليمات الذكاء الاصطناعي
انسخ هذه التعليمات في Cursor أو Windsurf أو Claude Code للمساعدة في دمج LaunchChat:
I'm integrating LaunchChat, an AI-powered support widget.
Widget Setup:
1. Add to HTML: <script>window.LaunchChatConfig = {widgetId: "ID"}</script>
<script src="https://domain.com/widget.js" async></script>
2. For React/Next.js, create a client component that:
- Sets window.LaunchChatConfig
- Dynamically loads widget.js
- Cleans up on unmount
API Reference:
- window.LaunchChatWidget.open() - Open chat
- window.LaunchChatWidget.close() - Close chat
- window.LaunchChatWidget.on(event, callback) - Listen to events
- Events: 'open', 'close', 'message', 'escalate', 'feedback'
Help me integrate this into my [FRAMEWORK] app.