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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user