THEZYZSTUDIO commited on
Commit
ff98e1f
·
verified ·
1 Parent(s): d1df857

Create z_teacher2.js

Browse files
Files changed (1) hide show
  1. z_teacher2.js +90 -0
z_teacher2.js ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // ملف z_teacher2.js المطوّر - نظام البحث الذكي (RAG) اللحظي
2
+ (async function() {
3
+ let knowledgeChunks =[]; // مصفوفة لتخزين فقرات المعلومات
4
+
5
+ try {
6
+ // جلبنا الملف بالاسم الجديد training_data2.txt
7
+ const response = await fetch('/static/training_data2.txt');
8
+ if (response.ok) {
9
+ const rawText = await response.text();
10
+ // تقطيع النص الضخم إلى فقرات منفصلة بناءً على الفراغات المزدوجة (Enter مرتين)
11
+ knowledgeChunks = rawText.split(/\n\s*\n/).map(chunk => chunk.trim()).filter(chunk => chunk.length > 10);
12
+ console.log("✅[Z Teacher 2]: تم تحميل وتقطيع المعرفة إلى", knowledgeChunks.length, "فقرة.");
13
+ } else {
14
+ console.warn("⚠️ [Z Teacher 2]: لم يتم العثور على ملف training_data2.txt");
15
+ }
16
+ } catch (e) {
17
+ console.error("❌[Z Teacher 2]: خطأ في قراءة ملف المعرفة", e);
18
+ }
19
+
20
+ // دالة للبحث عن الفقرات التي لها علاقة بسؤال المستخدم
21
+ function findRelevantKnowledge(userQuery) {
22
+ if (!userQuery || knowledgeChunks.length === 0) return "";
23
+
24
+ // تحويل السؤال إلى كلمات مفتاحية (وتجاهل الكلمات القصيرة)
25
+ let keywords = userQuery.toLowerCase().split(/\s+/).filter(w => w.length > 3);
26
+
27
+ if (keywords.length === 0) return "";
28
+
29
+ // إعطاء تنقيط لكل فقرة بناءً على عدد الكلمات المفتاحية الموجودة فيها
30
+ let scoredChunks = knowledgeChunks.map(chunk => {
31
+ let score = 0;
32
+ let lowerChunk = chunk.toLowerCase();
33
+ keywords.forEach(kw => {
34
+ if (lowerChunk.includes(kw)) score++;
35
+ });
36
+ return { chunk, score };
37
+ });
38
+
39
+ // ترتيب الفقرات من الأعلى نقاطاً إلى الأقل، وأخذ أفضل 3 فقرات فقط
40
+ let topChunks = scoredChunks
41
+ .filter(item => item.score > 0)
42
+ .sort((a, b) => b.score - a.score)
43
+ .slice(0, 3) // يمكنك تغيير الرقم إذا أردت إرسال معلومات أكثر
44
+ .map(item => item.chunk);
45
+
46
+ if (topChunks.length === 0) return "";
47
+
48
+ return topChunks.join("\n\n---\n\n");
49
+ }
50
+
51
+ // اعتراض الطلب الذاهب للذكاء الاصطناعي
52
+ const originalGroqFetch = window.groqFetch;
53
+
54
+ window.groqFetch = async function(url, options) {
55
+ try {
56
+ if (options && options.body && knowledgeChunks.length > 0) {
57
+ let bodyObj = JSON.parse(options.body);
58
+
59
+ if (bodyObj && bodyObj.messages) {
60
+ // العثور على آخر رسالة كتبها المستخدم
61
+ let lastUserMsg = bodyObj.messages.slice().reverse().find(m => m.role === 'user');
62
+
63
+ if (lastUserMsg && lastUserMsg.content) {
64
+ // استخراج المعلومات ذات الصلة
65
+ let relevantInfo = findRelevantKnowledge(lastUserMsg.content);
66
+
67
+ if (relevantInfo !== "") {
68
+ console.log("🔍 [Z Teacher 2]: تم العثور على معلومات مفيدة وحقنها!");
69
+
70
+ let sysMsg = bodyObj.messages.find(m => m.role === 'system');
71
+ let injection = `\n\n══════════════════════════════════════════\n⚠️ قاعدة بيانات (Z TEACHER 2) - معلومات مستخرجة خصيصاً للموقف الحالي:\nاستخدم هذه المعلومات للإجابة على سؤال المستخدم بدقة إذا كانت تفيده:\n${relevantInfo}\n══════════════════════════════════════════\n`;
72
+
73
+ if (sysMsg) {
74
+ sysMsg.content += injection;
75
+ } else {
76
+ bodyObj.messages.unshift({ role: 'system', content: injection });
77
+ }
78
+ }
79
+ }
80
+ options.body = JSON.stringify(bodyObj);
81
+ }
82
+ }
83
+ } catch (e) {
84
+ console.error("[Z Teacher 2]: خطأ أثناء محاولة البحث والحقن", e);
85
+ }
86
+
87
+ // إرسال الطلب بشكل طبيعي بعد التعديل الخفي
88
+ return originalGroqFetch.apply(this, arguments);
89
+ };
90
+ })();