109 lines
3.5 KiB
Markdown
109 lines
3.5 KiB
Markdown
# Krok 13 - Architektúra promptov a DAIAPI klient
|
|
|
|
## Kontext projektu
|
|
Systém využíva lokálne DAIAPI na generovanie textového obsahu (JSON content layer). AI nesmie generovať HTML, ale štruktúrované dáta podľa dodaného promptu.
|
|
|
|
## Pred implementáciou si preštuduj
|
|
- `docs/mvp.md` - Sekcia 7 (AI workflow).
|
|
- `docs/architecture.md` - Sekcia 10 (AI workflow).
|
|
|
|
## Cieľ
|
|
Implementovať klienta pre DAIAPI a vytvoriť generátor promptov, ktorý na základe `wizard_data` pripraví zadanie pre AI.
|
|
|
|
## Požadované zmeny
|
|
1. Vytvorenie triedy `App\Services\DAIClient` v `src/Services/DAIClient.php`:
|
|
- Metóda `sendRequest(string $prompt): ?string` (použitie `curl` alebo `file_get_contents` pre POST na lokalne API).
|
|
- Spracovanie odpovede a ošetrenie timeoutov.
|
|
2. Vytvorenie triedy `App\Prompts\ContentPrompt` v `src/Prompts/ContentPrompt.php`:
|
|
- Metóda `generate(array $wizardData): string`.
|
|
- Prompt musí obsahovať:
|
|
- Kontext projektu.
|
|
- Inštrukcie pre "Content Layer" (SEO, Hero, Služby, atď.).
|
|
- Striktný zákaz HTML výstupu.
|
|
- Príklad požadovaného JSON formátu.
|
|
- Vstupné fakty z `wizard_data`.
|
|
|
|
## Implementačné pravidlá
|
|
- Prompt musí byť v slovenskom jazyku (alebo podľa `wizard_data.language`).
|
|
- Klient musí logovať chyby komunikácie s API.
|
|
- Použi systémovú premennú alebo konfiguračný súbor pre URL DAIAPI.
|
|
|
|
## Súbory ktoré je potrebné vytvoriť
|
|
- `src/Services/DAIClient.php`
|
|
- `src/Prompts/ContentPrompt.php`
|
|
|
|
## Súbory ktoré je potrebné upraviť
|
|
Žiadne.
|
|
|
|
## API a dátové štruktúry
|
|
DAIAPI je proprietarne API, ktore sa da pouzivat volanim na VPN adresu 10.2.8.1 a port 9001, prakticka implementacia v PHP:
|
|
|
|
```php
|
|
function daiAPIrun(string $prompt): ?string
|
|
{
|
|
$url = "http://192.168.122.10:9001/run";
|
|
$payload = json_encode([
|
|
"prompt" => $prompt
|
|
]);
|
|
if ($payload === false) {
|
|
return null;
|
|
}
|
|
$ch = curl_init($url);
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_POST => true,
|
|
CURLOPT_HTTPHEADER => [
|
|
"Content-Type: application/json",
|
|
"Content-Length: " . strlen($payload)
|
|
],
|
|
CURLOPT_POSTFIELDS => $payload,
|
|
CURLOPT_TIMEOUT => 60,
|
|
]);
|
|
$response = curl_exec($ch);
|
|
if ($response === false) {
|
|
curl_close($ch);
|
|
return null;
|
|
}
|
|
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
if ($httpCode !== 200) {
|
|
return null;
|
|
}
|
|
$data = json_decode($response, true);
|
|
if (!is_array($data)) {
|
|
return null;
|
|
}
|
|
// očakávame: { "success": true, "answer": "...", ... }
|
|
if (empty($data["success"]) || !isset($data["answer"])) {
|
|
return null;
|
|
}
|
|
return $data["answer"];
|
|
}
|
|
```
|
|
|
|
|
|
## Frontend požiadavky
|
|
Nerelevantné.
|
|
|
|
## Backend požiadavky
|
|
- Povolené rozšírenie `curl` v PHP.
|
|
|
|
## Testovací scenár
|
|
1. Vytvor testovací skript, ktorý vygeneruje prompt pre mock `wizard_data`.
|
|
2. Over, či prompt obsahuje všetky kľúčové informácie (názov firmy, služby).
|
|
3. Skús (ak máš prístup k API) poslať testovací dopyt a over, či vráti validný JSON bez HTML.
|
|
|
|
## Definition of Done
|
|
- Klient pre AI je funkčný.
|
|
- Prompt je správne navrhnutý a generuje štruktúrované zadanie.
|
|
- Systém je pripravený na integráciu s workerom.
|
|
|
|
## Obmedzenia
|
|
- AI nesmie v žiadnom prípade generovať tagy ako `<div>`, `<h1>` a pod. v rámci content layer.
|
|
|
|
## Výstup
|
|
- zoznam vytvorených súborov
|
|
- zoznam upravených súborov
|
|
- stručné zhrnutie vykonaných zmien
|
|
- prípadné otvorené problémy
|