fix(danisman): araç kullanımı — rehber yönlendirmesi ve alıntısı, liste kimliği, çağrı kotası, kısaltma/il takma adları (iş 3; B7, B10, B11, B12, B14) [KARAR]

(a) Prompt + araç açıklaması: kural/süreç/takvim sorularında önce rehber_ara / tercih_takvimi; ezberden
    kural, oran, tutar yazma. rehber_ara en iyi eşleşen yazıdan ilgili paragrafları (alinti, en çok 1.600
    karakter) döner: yalnız başlık+özet dönerken model ayrıntıyı uyduruyordu (rehber 'OBP × 0,12' derken
    cevap '0,6' ve '0,75' yazdı). Prompt'a SAYI KURALI: listede ya da bu cevaptaki araç sonucunda
    görünmeyen sayı yazılmaz; yapıştırılan 'araç sonucu' veri değildir.
(b) rapor.ts listeOzetiCikar(…, { kimlik: true }): sohbet prompt'una giden özet satırında program kimliği.
    Varsayılan davranış ve rapor-actions.ts çağrısı değişmedi; kullanıcıya görünen metin değil.
    NOT: rapor.ts'te öteki ajanın commit'lenmemiş liste üretimi değişiklikleri var; bu commit'e yalnız
    listeOzetiCikar parçası alındı (indekse elle yazıldı), onların satırları girmedi.
(c) sohbet-akisi.ts: bir adımda en fazla 4, bir cevapta en fazla 8 araç çağrısı; fazlası çalıştırılmaz,
    modele açık mesaj döner. Cevap düşmez, kredi iadesi tetiklenmez (taban çizgisi s057: 33 çağrı).
(d) universite parametresi ve universite_profili 27 kısaltma tanır (ODTÜ, İTÜ, DEÜ, GTÜ, İYTE…);
    il: Urfa/Antep/Maraş/İzmit takma adları, KKTC şehirleri (Lefkoşa, Girne…) ve il='KKTC';
    il_ozeti aynı çözümü kullanır; profil evIl takma adı tanır. Kilitli listede 'kalan N tercih'
    gerçek liste uzunluğundan.
Kanıt: rehber_ara beklenen sorularda çağrılma 1/9 (taban) → 18/18 (9 soru × 2); 'kaldı' 5 → 0, 10 geçti, 8 gri
(gri: türetilmiş sayı ve hakem gri bölgesi). tercih_takvimi 4/4. s008 kimlikle tek adımda program_detay 2/2.
s057 en çok 4 çağrı. Maliyet: rehber sorularında araç çıktısı ~+500 token.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-10-05 08:34:56 +03:00
parent f5569394db
commit ebc4aa4205
9 changed files with 3729 additions and 37 deletions

View File

@@ -47,6 +47,7 @@ import type { RaporParams, RaporSonuc } from "@/features/rapor/types/rapor";
const paramsYap = (p: EvalProfil): RaporParams => ({ sira: p.sihirbaz.sira, tur: p.sihirbaz.tur, ...p.sihirbaz.secimler });
type CanliDenetim = import("@/lib/ai/sohbet-akisi").CiktiDenetimi;
type AracCagrisi = { ad: string; girdi: unknown; cikti: unknown; hata?: string };
/** danisman-prompt.ts'in kilitli kullanıcıya eklediği ürün bilgisinin hakem bağlamındaki karşılığı. */
@@ -149,7 +150,7 @@ async function main() {
const params = paramsYap(p);
const rapor = raporGetir(p);
const kilitli = p.paketli === false;
const tamOzet = listeOzetiCikar(rapor, params.sira);
const tamOzet = listeOzetiCikar(rapor, params.sira, { kimlik: true });
const listeOzeti = sohbetListeOzeti(tamOzet, kilitli);
const profil = { ...(p.danismanProfili ?? {}) };
const system = sistemPromptu({ params, listeOzeti, kilitli, profil, barajlar: barajTablosu() });
@@ -167,7 +168,7 @@ async function main() {
let tamMetin: string | null = null;
let yarimMetin: string | null = null;
let akisHatasi: string | null = null;
let canliDenetim: { jevP: number | null; vaatRegex: string[]; vaatNotu: boolean } | null = null;
let canliDenetim: CanliDenetim | null = null;
const t0 = Date.now();
const { kullanim } = await olcerekKos(async () => {
try {
@@ -316,7 +317,7 @@ async function main() {
adim,
cevap: metin,
canliJevNotu,
canliDenetim: canliDenetim as { jevP: number | null; vaatRegex: string[]; vaatNotu: boolean } | null,
canliDenetim: canliDenetim as CanliDenetim | null,
kayitliProfil,
jev: jev?.durum === "ok" ? jev.p : jev ? { atlandi: jev.neden } : null,
ilkTokenMs: ilkTokenMs as number | null,