perf(liste): satır biçimi "id|gerekçe" — çıktı token'ı ~%27 az, gecikme p50 22,5 → ~14 sn [KARAR]
Gecikme çıktı token'ıyla orantılı (üst sağlayıcıya göre 25–115 token/sn);
çıktının ~%20'si satır başına yinelenen JSON anahtarlarıydı.
- Tel şeması: liste elemanı nesne ({"id","gerekce"}) yerine tek dizgi
"id|gerekçe"; satirCoz ayrıştırır, kimlik yine havuzda doğrulanır
(havuz-dışı koruması aynı).
- maxTokens 4000 → 2000 (ölçüm: 38 sağlıklı çağrıda çıktı 746–1.099 token).
reasoning'i kapatmayan üst sağlayıcıya düşen çağrı ~50 sn yerine ~25 sn'de
kesilir; ikinci deneme o sağlayıcı atlanarak yapılır.
Ölçüm: aynı 3 profilde (p05, a07, p13) çıktı 3.724 → 2.710 token.
40 profil: çağrı başına ortalama çıktı ~1.277 → ~940 token; gecikme p50
22,5 → 14,8 sn, p95 61,6 → 30,1 sn (p95 kazancının çoğu ikinci çağrının
kalkmasından — 3128b01). Maliyet 40 liste için 0,0285 → 0,0300 $ (değişmedi).
İzlenecek: son koşuda ham çıktıda 2 havuz-dışı kimlik görüldü (taban ve önceki
iki koşuda 0); ikisi de korumada atıldı, nihai listede havuz dışı 0.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -53,11 +53,20 @@ import { ILK_YIL } from "../veri-yillari";
|
||||
// Modele giden adlar (5 Eki 2026): üçüncü liste telde `guvenli`dir, iç anahtar
|
||||
// `garanti` kalır. Prompt'ta "garanti" alan adı ve dilim değeri olarak 10+ kez
|
||||
// geçince model sözcüğü adaya dönük metne taşıyordu (ölçüm: 19/888 gerekçe,
|
||||
// 14/37 üst metin). Program kimliği alanı kısa (`id`): çıktı token'ı.
|
||||
const AiTercihSchema = z.object({
|
||||
id: z.string(),
|
||||
gerekce: z.string(),
|
||||
});
|
||||
// 14/37 üst metin).
|
||||
//
|
||||
// Satır biçimi: nesne ({"id": …, "gerekce": …}) değil TEK DİZGİ, "id|gerekçe".
|
||||
// Çıktı token'ının ~%20'si satır başına yinelenen JSON anahtarlarıydı; gecikme
|
||||
// çıktı token'ıyla doğru orantılı (ölçüm aşağıda, raporUretAyrintili).
|
||||
const SATIR_AYRACI = "|";
|
||||
type AiSatir = { id: string; gerekce: string };
|
||||
/** "106510077|Gerekçe cümlesi." → { id, gerekce }; ayraç yoksa satırın tamamı kimlik sayılır. */
|
||||
function satirCoz(ham: string): AiSatir {
|
||||
const i = ham.indexOf(SATIR_AYRACI);
|
||||
if (i < 0) return { id: ham.trim(), gerekce: "" };
|
||||
return { id: ham.slice(0, i).trim(), gerekce: ham.slice(i + 1).trim() };
|
||||
}
|
||||
const AiTercihSchema = z.string();
|
||||
type TelListe = "hayal" | "dengeli" | "guvenli";
|
||||
const TEL_ADI: Record<Dilim, TelListe> = {
|
||||
hayal: "hayal",
|
||||
@@ -95,6 +104,9 @@ KURALLAR (kesin):
|
||||
- Havuz üç dizi hâlinde verilir: havuz.hayal, havuz.dengeli, havuz.guvenli.
|
||||
hayal listesine YALNIZCA havuz.hayal içindeki programları koy; dengeli ve
|
||||
guvenli için de aynısı. Bir programı başka dizinin listesine taşıma.
|
||||
- Listelerin her elemanı TEK dizgidir, biçimi: "id|gerekce" (ör.
|
||||
"123456789|Seçtiğin alanla eşleşen, kontenjanı geniş bir program."). id,
|
||||
havuzdaki programın id'sidir; dik çizgiden sonra gerekce gelir.
|
||||
- SADECE havuzdaki id'leri kullan; havuzda olmayan program ASLA önerme.
|
||||
Aynı id'yi birden fazla kez kullanma.
|
||||
- Seçerken adayın ilgi alanlarını ve illerini, kontenjan/yerleşen hareketini
|
||||
@@ -200,7 +212,8 @@ function secimiOnar(
|
||||
const gorulen = new Set<string>();
|
||||
if (parsed) {
|
||||
for (const d of DILIMLER) {
|
||||
for (const t of parsed[TEL_ADI[d]]) {
|
||||
for (const ham of parsed[TEL_ADI[d]]) {
|
||||
const t = satirCoz(ham);
|
||||
const p = havuzMap.get(t.id);
|
||||
if (!p) {
|
||||
onarim.havuzDisi++;
|
||||
@@ -577,9 +590,11 @@ export async function raporUretAyrintili(
|
||||
: `${kullaniciMesaji}\n\nÖNCEKİ DENEMENDE HATA VARDI: ${sonHata} Kurallara tam uy.`,
|
||||
sema: AiRaporGevsek,
|
||||
wireSema: aiSemaWire(hedef),
|
||||
// Küçük şema (24 satır × gerekce + genel + uyarılar) ~1-1.5k token;
|
||||
// reasoning kapalıyken 4000 rahat bir tavan, kaçak uzun üretimi de keser.
|
||||
maxTokens: 4000,
|
||||
// Ölçüm (5 Eki 2026, 38 sağlıklı çağrı): çıktı 746–1.099 token.
|
||||
// 2000 rahat bir tavan; reasoning'i kapatmayan üst sağlayıcıya düşen
|
||||
// çağrı da ~50 sn yerine ~25 sn'de kesilir ve ikinci deneme o
|
||||
// sağlayıcı atlanarak yapılır (bkz. cagri.ts).
|
||||
maxTokens: 2000,
|
||||
gozlem: (g) => cagrilar.push(g),
|
||||
});
|
||||
} catch (err) {
|
||||
|
||||
Reference in New Issue
Block a user