RAG-SFT: faz7_rag.py (extractive QA converter + prompt hizalama)
Browse files- code/kod/faz7_rag.py +17 -3
code/kod/faz7_rag.py
CHANGED
|
@@ -196,16 +196,30 @@ def chunk_text(text, size=600, overlap=100):
|
|
| 196 |
return out
|
| 197 |
|
| 198 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 199 |
def build_rag_prompt(question, hits, max_ctx_chars=2400):
|
| 200 |
ctx = ""
|
| 201 |
for c, _ in hits:
|
| 202 |
-
if len(ctx) + len(c) +
|
| 203 |
break
|
| 204 |
-
ctx +=
|
| 205 |
# SFT formatı = Talimat/Girdi/Yanıt; `### Soru` SFT'de YOK → kaldırıldı, soru talimata gömüldü.
|
| 206 |
# Yönerge soruyla AYNI dilde (EN soruda TR'ye kaymayı önler — France vakası).
|
| 207 |
# "kısa/doğrudan + adım adım düşünme" → Magpie'den gelen <think> sızmasını ve uzun-jenerasyon halüsinasyonunu kırar.
|
| 208 |
-
tr =
|
| 209 |
instr = (f"Aşağıdaki bağlamı kullanarak soruyu kısa ve doğrudan yanıtla; adım adım düşünme. "
|
| 210 |
f"Cevap bağlamda yoksa \"bilmiyorum\" de.\nSoru: {question}"
|
| 211 |
if tr else
|
|
|
|
| 196 |
return out
|
| 197 |
|
| 198 |
|
| 199 |
+
# TR tespiti: özel karakter VEYA TR soru-kelimesi (faz7_prep_rag_sft.py ile BİREBİR aynı tutulmalı).
|
| 200 |
+
_TR_WORDS = {"nedir", "ne", "hangi", "neresi", "nerede", "nereye", "kim", "kimdir", "neden",
|
| 201 |
+
"niçin", "niye", "mıdır", "midir", "mudur", "müdür", "kaç", "kaçtır", "nasıl",
|
| 202 |
+
"mı", "mi", "mu", "mü", "için", "ile", "kaçıncı"}
|
| 203 |
+
|
| 204 |
+
|
| 205 |
+
def _is_tr(question):
|
| 206 |
+
ql = question.lower()
|
| 207 |
+
if any(ch in ql for ch in "çğıöşü"):
|
| 208 |
+
return True
|
| 209 |
+
words = set(ql.replace("?", " ").replace("'", " ").replace(".", " ").split())
|
| 210 |
+
return bool(words & _TR_WORDS)
|
| 211 |
+
|
| 212 |
+
|
| 213 |
def build_rag_prompt(question, hits, max_ctx_chars=2400):
|
| 214 |
ctx = ""
|
| 215 |
for c, _ in hits:
|
| 216 |
+
if len(ctx) + len(c) + 2 > max_ctx_chars:
|
| 217 |
break
|
| 218 |
+
ctx += c + "\n\n" # düz metin (madde yok) → RAG-SFT verisi ham paragrafla eşleşsin
|
| 219 |
# SFT formatı = Talimat/Girdi/Yanıt; `### Soru` SFT'de YOK → kaldırıldı, soru talimata gömüldü.
|
| 220 |
# Yönerge soruyla AYNI dilde (EN soruda TR'ye kaymayı önler — France vakası).
|
| 221 |
# "kısa/doğrudan + adım adım düşünme" → Magpie'den gelen <think> sızmasını ve uzun-jenerasyon halüsinasyonunu kırar.
|
| 222 |
+
tr = _is_tr(question)
|
| 223 |
instr = (f"Aşağıdaki bağlamı kullanarak soruyu kısa ve doğrudan yanıtla; adım adım düşünme. "
|
| 224 |
f"Cevap bağlamda yoksa \"bilmiyorum\" de.\nSoru: {question}"
|
| 225 |
if tr else
|