feat: dinamik AI prompt yönetimi (ai_prompts tablosu + promptService)
20 AI system prompt'unu (chat/analiz/dilekçe/içtihat) koddan Supabase'e taşıyan promptService.ts eklendi — artık bir prompt metnini değiştirmek için redeploy gerekmiyor, admin panelden Supabase'e yazılıp 5dk içinde devreye giriyor (bkz. laawos/docs/DINAMIK_PROMPT_MIMARISI_VE_YONETIMI.md, laawos/sql/23_ai_prompts.sql — Supabase Studio'da elle çalıştırılmalı). Canlı kullanıcı olduğu için davranış değişikliği YOK: promptService'in fallback metinleri bugünkü hardcoded prompt'ların birebir kopyası (programatik script ile karakter karakter doğrulandı), Supabase migration çalıştırılmadan/erişilemezken sistem bugünkü gibi çalışmaya devam ediyor. Bilinçli olarak dokunulmayanlar: model seçimi (tek global AI_MODEL env), temperature (hiç gönderilmiyor), max_tokens (call-site'a göre değişiyor) — hiçbiri gerçek AI çağrısına yansıtılmıyor, sadece prompt METNİ dinamik. chat_intern iki farklı promptun (canlı sohbet vs. anlık soru-cevap) aynı chat_mode='intern' etiketini paylaştığı görüldüğü için chat_intern_live ve chat_intern_qa olarak ayrıştırıldı. Ayrıca kodda var olup dokümanda listelenmeyen doc_strategy, doc_mediation, legislation_keywords, chat_title ve chat_thread_general de tabloya eklendi.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { supabase } from './supabase';
|
||||
import { callOllama } from './aiClient';
|
||||
import * as promptService from './promptService';
|
||||
|
||||
export interface LegislationMatch {
|
||||
maddeNo: string;
|
||||
@@ -106,15 +107,13 @@ async function fetchByCitations(citations: Citation[]): Promise<LegislationMatch
|
||||
return matches;
|
||||
}
|
||||
|
||||
const KEYWORD_PROMPT = `Sen uzman bir Türk avukatısın. Sana verilen dava metnini, ilgili kanun maddelerini bulmak için Türkçe tam-metin aramada kullanılacak 2 ila 4 temel hukuki terime çevir.
|
||||
SADECE anahtar kelimeleri aralarına boşluk koyarak yaz. Noktalama işareti, açıklama veya ek kelime kullanma.`;
|
||||
|
||||
async function fetchByFullTextSearch(caseText: string): Promise<LegislationMatch[]> {
|
||||
let keywords = '';
|
||||
try {
|
||||
const keywordPrompt = await promptService.getPrompt('legislation_keywords');
|
||||
const aiContent = await callOllama(
|
||||
[
|
||||
{ role: 'system', content: KEYWORD_PROMPT },
|
||||
{ role: 'system', content: keywordPrompt },
|
||||
{ role: 'user', content: caseText.slice(0, 2000) },
|
||||
],
|
||||
{ numPredict: 40, timeoutMs: 20_000 }
|
||||
|
||||
Reference in New Issue
Block a user