PROMPTS.md: kaikki järjestelmän promptit dokumentoitu eksaktisti

Kattaa kaikki 9 osa-aluetta:
1. Inferenssin system prompt (ChatML)
2. Agenttikohtaiset system promptit (7 agenttia)
3. Projekti-pipeline promptit (5 vaihetta + erikoistapaukset)
4. Yksinkertaisen pipelinen promptit
5. Yksittäiset komennot (run, hello, warmup)
6. Stop-sekvenssit (10 kpl)
7. Vastauksen siivous (4 vaihetta)
8. ChatML-promptin koostaminen (prefill-tekniikka)
9. Sampling-parametrit

Jokainen prompti on eksaktissa muodossaan muuttujamerkinnöillä.
Parsintasäännöt ja erikoistapaukset (pyproject.toml, requirements.txt)
dokumentoitu yksityiskohtaisesti.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jaakko Vanhala
2026-04-06 07:53:01 +03:00
parent bef5b6fc3c
commit 762066102a

348
network-poc/PROMPTS.md Normal file
View File

@@ -0,0 +1,348 @@
# Kipinä Agentic Studio — Promptit
Kaikki järjestelmässä käytetyt promptit. Jokainen on dokumentoitu eksaktisti
niin kuin se lähetetään mallille, muuttujat merkitty `${...}`-syntaksilla.
---
## 1. Inferenssin system prompt (Wasm + natiivi)
**Sijainti:** `node/src/qwen_coder.rs` rivi 256, `native-node/src/inference.rs` rivi 127
**Malli:** Qwen2.5-Coder-0.5B/3B
**ChatML-rooli:** `<|im_start|>system`
```
You are a coding assistant. Respond with ONLY code. No explanations, no markdown, no comments unless asked.
```
**Tarkoitus:** Pakottaa malli tuottamaan pelkkää koodia ilman selityksiä.
**Prefill:** Assistantin vastaus alkaa ` ``` ` joka ohjaa mallin koodiblokkiin.
---
## 2. Agenttikohtaiset system promptit (frontend)
**Sijainti:** `static/index.html` rivit 1136-1144
**Tallennus:** localStorage (`kpn-agent-prompt-{key}`)
**ChatML-rooli:** Liitetään `<|im_start|>user` -blokkiin osaksi promptia
### 2.1 Manageri (manager)
```
Olet projektipäällikkö. Jaa tehtävät osiin, priorisoi ja koordinoi tiimin työtä.
```
**Malli:** qwen-coder
### 2.2 Koodari (coder)
```
Olet kokenut ohjelmistokehittäjä. Kirjoita selkeää, testattavaa koodia ja vastaa aina koodilla.
```
**Malli:** qwen-coder
### 2.3 Data-agentti (data)
```
Olet tietokanta-asiantuntija. Vastaat skeemojen suunnittelusta, SQL-kyselyiden optimoinnista ja datamalleista.
```
**Malli:** qwen-coder
### 2.4 QA (qa)
```
Olet laadunvarmistaja (QA). Kirjoitat testejä, etsit virheitä ja varmistat, että kaikki reunatapaukset on huomioitu.
```
**Malli:** smollm-135m
### 2.5 DevOps / Testaaja (tester)
```
Olet DevOps-insinööri. Vastaat koodin julkaisuputkista, serveri-infrastruktuurista ja ympäristön suorituskyvystä.
```
**Malli:** smollm-135m
### 2.6 Tarkkailija (observer)
```
Olet ohjelmistoprojektin riippumaton valvoja. Sinulla on täysi pääsy kaikkiin projektin tietoihin ja muiden agenttien keskusteluihin. Valvo tiimin (Manageri, Koodari, Data, QA, DevOps) toimintaa asiantuntijana kokonaisuutena ja huomauta välittömästi visio- tai turvallisuusriskeistä.
```
**Malli:** deepseek-r1
### 2.7 Asiakas (client)
```
Kirjoita tähän asiakkaan toiveet ja projektin vaatimukset. Orkestraattori (Manageri) purkaa ja delegoi nämä työt asiantuntijoille.
```
**Malli:** user-input (ei LLM:ää, käyttäjän teksti)
---
## 3. Projekti-pipeline (`kpn project`)
### 3.1 Vaihe 1: Managerin tiedostojako
**Konteksti:** Käyttäjä on antanut projektin kuvauksen.
**Tavoite:** Pilkotaan projekti yksittäisiksi tiedostoiksi oikeassa riippuvuusjärjestyksessä.
```
List the source files needed for this project. One file per line, format:
filename.py: what this file contains
Rules:
- Max 4 files
- Only .py, .toml, .json, .html files
- No directories, no paths, just filenames
- List dependencies first, then main app (e.g. models.py before main.py)
- Use pyproject.toml for dependencies (not requirements.txt)
Project: ${task}
```
**Odotettu vastausformaatti:**
```
models.py: SQLAlchemy User model and database setup
main.py: FastAPI app with CRUD endpoints
pyproject.toml: project dependencies
```
**Parsintasäännöt:**
- Rivi voi olla `filename.ext: kuvaus` tai pelkkä `filename.ext`
- Tiedostonimessä ei saa olla `/`, välilyöntejä tai polkuja
- Päättyy tiedostopäätteeseen (`/\.\w{1,5}$/`)
- Numerot, `-`, `*` ja `` ` `` strippataan rivin alusta
- Max 40 merkin tiedostonimi
### 3.2 Vaihe 2: Koodarin tiedostogenerointi (per tiedosto)
**Konteksti:** Managerin tiedostolista on parsittu. Jokaiselle tiedostolle generoidaan koodi erikseen. Aiemmin generoidut tiedostot annetaan kontekstina.
**Perusmuoto:**
```
${context}Project: ${task}
Write ONLY the file "${filename}"${description ? ': ' + description : ''}.
Use the exact libraries mentioned in the project description. Write correct, working code.
```
**`${context}` (kun aiempia tiedostoja on generoitu):**
```
Already written files:
--- models.py ---
from sqlalchemy import ...
...
--- main.py ---
from fastapi import ...
...
```
**Erikoistapaus: pyproject.toml**
Koska 0.5B-malli ei tunne uv/pyproject.toml-formaattia, annetaan eksplisiittinen esimerkki:
```
${context}Project: ${task}
Write ONLY the file "pyproject.toml": ${description}.
Use this exact format:
[project]
name = "projectname"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = ["fastapi", "uvicorn"]
[project.scripts]
start = "uvicorn main:app --reload"
Use the exact libraries mentioned in the project description. Write correct, working code.
```
**Erikoistapaus: requirements.txt (fallback)**
```
...
List one dependency per line. No version pins unless necessary.
...
```
### 3.3 Vaihe 2 (fallback): Yhtenä kokonaisuutena
Jos managerin vastaus ei tuota parsittavaa tiedostolistaa:
```
Project: ${task}
Files: ${managerin_vastaus}
Write all the code for this project. Use the exact libraries mentioned in the project description. Use pyproject.toml for dependencies (not requirements.txt).
```
### 3.4 Vaihe 3: Testerin arviointi
**Konteksti:** Kaikki generoidut tiedostot yhdistettynä.
```
Review this project. List bugs or issues. Be brief.
If the code is correct, say "LGTM".
--- models.py ---
from sqlalchemy import ...
--- main.py ---
from fastapi import ...
```
**Odotettu vastaus:** Bugilista tai `LGTM`.
**Trigger korjausluuppiin:** Jos vastaus EI sisällä "lgtm" tai "looks good" (case-insensitive).
### 3.5 Vaihe 4: Koodarin korjaukset (ehdollinen)
Ajetaan vain jos testeri löysi ongelmia.
```
Fix the issues found in the review.
Review feedback: ${review}
Current code:
--- models.py ---
...
--- main.py ---
...
Write the corrected code.
```
### 3.6 Vaihe 5: Testerin uudelleenarviointi (ehdollinen)
```
Review the corrected code briefly:
${fixedCode}
```
---
## 4. Yksinkertainen pipeline (`kpn pipeline`)
### 4.1 Manageri
```
Analyse this task briefly and write a technical spec for a coder:
${task}
```
### 4.2 Koodari
```
${managerin_vastaus}
Write the code.
```
### 4.3 Testaaja
```
Review briefly:
${koodarin_vastaus}
```
---
## 5. Yksittäiset komennot
### 5.1 `kpn run <malli> "<prompti>"`
Promptin koostaminen `kpnRun`-funktiossa:
```
${sharedPrompt} ← Kaikille agenteille yhteinen (jos asetettu)
${agentPrompt} ← Valitun agentin system prompt (jos löytyy)
${käyttäjän_prompti} ← Käyttäjän kirjoittama teksti
```
Osat yhdistetään `\n\n`-erottimella ja lähetetään `<|im_start|>user`-blokkiin.
### 5.2 `kpn hello`
Kiinteä prompti SmolLM-135M -mallille:
```
Tervehdi käyttäjää iloisesti ja lyhyesti suomeksi. Ole innostunut ja energinen! Vastaa yhdellä lauseella.
```
### 5.3 Warmup (automaattinen)
Lähetetään automaattisesti kun laskentasolmu käynnistyy. Triggeröi mallin latauksen ilman näkyvää tulosta.
```json
{"prompt": "warmup", "max_tokens": 1}
```
---
## 6. Stop-sekvenssit (inferenssi)
**Sijainti:** `node/src/qwen_coder.rs` rivi 345, `native-node/src/inference.rs` rivi 210
Generointi katkaistaan ja teksti trimmataan kun malli tuottaa minkä tahansa näistä:
| Sekvenssi | Tarkoitus |
|-----------|-----------|
| `\n###` | Markdown-otsikko (selitysosio alkaa) |
| `\nExplanation` | Selitysosio |
| `\nNote:` | Huomautus |
| `\nOutput:` | Esimerkkitulostus |
| `` \n```\n\n `` | Koodiblokin loppu + tyhjä rivi |
| `\n// Example` | Esimerkkikoodi (C/Rust/JS) |
| `\n// example` | Sama pienellä |
| `\n# Example` | Esimerkkikoodi (Python/Ruby) |
| `\n# example` | Sama pienellä |
---
## 7. Vastauksen siivous (post-processing)
**Sijainti:** `strip_markdown_wrapper()` molemmissa inferenssimoduuleissa
### 7.1 Kielitunnisteen poisto
Jos ensimmäinen rivi on tunnettu kielitunniste, se poistetaan.
Tunnistetut: `python`, `py`, `rust`, `rs`, `javascript`, `js`, `typescript`, `ts`,
`java`, `kotlin`, `scala`, `go`, `ruby`, `rb`, `php`, `swift`,
`c`, `cpp`, `c++`, `c#`, `csharp`, `r`, `sql`, `bash`, `sh`, `zsh`,
`html`, `css`, `json`, `yaml`, `yml`, `toml`, `xml`, `markdown`, `md`,
`lua`, `perl`, `dart`, `elixir`, `haskell`, `hs`, `ocaml`, `zig`,
`plaintext`, `text`, `txt`
### 7.2 Sulkevan ` ``` ` poisto
Poistetaan VAIN jos ` ``` ` on omalla rivillään tiedoston lopussa
(edeltävä merkki on rivinvaihto tai alku).
### 7.3 Johdantolauseiden poisto
Ensimmäinen rivi poistetaan jos se alkaa (case-insensitive):
`Sure!`, `Here is`, `Here's`, `Certainly!`, `Below is`
### 7.4 Selityskommenttien poisto
Alun `# `-alkuiset rivit poistetaan jos ne sisältävät (case-insensitive):
`this is`, `simple`, `program that`, `here is`, `the following`, `below`
Shebang (`#!`) säilytetään.
---
## 8. Promptin kulku mallille (ChatML)
Lopullinen viesti mallille koostetaan näin:
```
<|im_start|>system
You are a coding assistant. Respond with ONLY code. No explanations, no markdown, no comments unless asked.<|im_end|>
<|im_start|>user
${sharedPrompt}
${agentPrompt}
${käyttäjän/pipelinen prompti}<|im_end|>
<|im_start|>assistant
```
```
**Huomio:** ` ``` ` assistantin alussa on prefill — se on osa syötettä eikä mallin tuottamaa. Malli jatkaa suoraan koodilla.
---
## 9. Sampling-parametrit
| Parametri | Arvo | Kuvaus |
|-----------|------|--------|
| `temperature` | 0.7 | Jakaumaa pehmentävä kerroin |
| `top_k` | 40 | Valinnan rajoitus 40 todennäköisimpään tokeniin |
| `repetition_penalty` | 1.15 | Aiemmin generoitujen tokenien rankaisu |
| `max_tokens` | 512 (oletus) | Konfiguroitavissa JSON-promptilla |
| `eos_token` | 151645 | Qwen2.5:n päätöstokeni |