TĂ€ydellinen opas agenttien system promptien kirjoittamiseen — Oppeja Claude Coden takaisinmallintamisesta

Dekompiloin Claude Coden system promptin, tutkin DeepAgentsin lÀhdekoodia ja rakensin oman tekoÀlyagenttini alusta asti. Suurin osa promptausoppaista on pelkkÀÀ mutua.

Feng Liu
Feng Liu
20.3.2026·22 min lukuaika
TĂ€ydellinen opas agenttien system promptien kirjoittamiseen — Oppeja Claude Coden takaisinmallintamisesta

TekoÀlymaailmassa on juuri nyt kÀynnissÀ massiivinen joukkoharha.

Jokainen tutoriaali kĂ€skee sinua kirjoittamaan system prompteja ikÀÀn kuin laatisit loitsuja — kunhan vain löydĂ€t oikean taikasanan, malli tottelee. "Olet ÄÄRIMMÄISEN LAHJAKAS senior-koodari, jolla on 20 vuoden kokemus..." Kuulostaako tutulta?

Olen viettÀnyt viime kuukaudet rakentaen VibeComia, tekoÀlypohjaista startup-neuvonantajaa, joka tekee syvÀllistÀ markkinatutkimusta ja tuottaa VC-tason analyysejÀ. Matkan varrella olen takaisinmallintanut (reverse-engineer) Claude Coden system promptin, kahlannut lÀpi DeepAgentsin middleware-lÀhdekoodia ja polttanut enemmÀn API-krediittejÀ kuin kehtaan myöntÀÀ. Suurin opetus? Suurimmalla osalla asioista, joiden ihmiset luulevat merkitsevÀn system prompteissa, ei ole mitÀÀn vÀliÀ. Ja niistÀ asioista, joilla oikeasti on vÀliÀ, ei puhu juuri kukaan.

TĂ€mĂ€ postaus on se tĂ€ydellinen pelikirja — ei mikÀÀn 5 minuutin pintaraapaisu, vaan kaikki se, mitĂ€ olisin toivonut jonkun kertovan minulle ennen kuin aloitin. Nappaa kuppi kahvia.


1. Suunnittelufilosofia: Luota malliin

"An agent is a model. Not a framework. Not a prompt chain." — shareAI-lab/learn-claude-code

TĂ€mĂ€ ajatus muutti minulle kaiken. LLM osaa jo valmiiksi pÀÀtellĂ€, suunnitella ja toteuttaa. System promptisi tehtĂ€vĂ€ ei ole opettaa sitĂ€ ajattelemaan — sen tehtĂ€vĂ€ on luoda ympĂ€ristö, jossa se voi työskennellĂ€.

Mieti sitÀ kuin palkkaisit senior-kehittÀjÀn. Et anna hÀnelle 20 vaiheen tarkistuslistaa jokaista tehtÀvÀÀ varten. Sanot hÀnelle: tÀssÀ on se keitÀ me olemme, tÀssÀ ovat rajat, ja tÀltÀ nÀyttÀÀ hyvÀ lopputulos. Sitten siirryt pois tieltÀ.

System promptillasi on tasan neljÀ tehtÀvÀÀ:

  • Kerro sille, kuka se on — rooli ja identiteetti
  • Kerro sille, missĂ€ seinĂ€t tulevat vastaan — turvallisuusrajat
  • Kerro sille, miltĂ€ hyvĂ€ nĂ€yttÀÀ — laatustandardit
  • Anna sille työkalut — kyvykkyydet ja tieto

SiinÀ kaikki. Kaikki muu on kohinaa.

Harness-ajattelutapa

Harness = Tools + Knowledge + Observation + Action Interfaces + Permissions

System promptisi on nĂ€iden valjaiden (harness) kĂ€yttöohje. Et ole suunnittelemassa jĂ€ykkÀÀ liukuhihnaa — olet suunnittelemassa ympĂ€ristöÀ, jossa malli voi tehdĂ€ parasta työtÀÀn autonomisesti.

ÄlĂ€ kirjoita system promptiasi kuin vuokaaviota. Malli pÀÀttÀÀ suoritusjĂ€rjestyksen itse.


2. Promptin rakenne ja osioiden jÀrjestys

Suositeltu asettelu (Takaisinmallinnettu Claude Code v2.0.14:stÀ)

┌─────────────────────────────────────────────┐
│ 1. Identity                                  │  ← Read first, anchors behavior
│ 2. Security & Safety                         │  ← IMPORTANT markers, non-negotiable
│ 3. Tone & Style                              │  ← Controls output format
│ 4. Core Workflow                             │  ← How to do the work
│ 5. Tool Usage Policy                         │  ← Tool selection priorities
│ 6. Domain Knowledge                          │  ← On-demand, not pre-loaded
│ 7. Environment Info                          │  ← Runtime context, dynamically injected
│ 8. Reminders                                 │  ← Re-state critical rules
├──────────────────────────────────────────────
│ [Tool Definitions — system-injected]         │  ← Not editable, usually very long
├──────────────────────────────────────────────
│ [User Message]                               │
└─────────────────────────────────────────────┘

Miksi tÀllÀ jÀrjestyksellÀ on vÀliÀ

LLM:illĂ€ on U-kirjaimen muotoinen huomiokĂ€yrĂ€ — ne kiinnittĂ€vĂ€t eniten huomiota promptisi alkuun ja loppuun, ja kadottavat fokuksen keskikohdassa. TĂ€mĂ€ on hyvin dokumentoitu "Lost in the Middle" -ilmiö.

  • Identiteetti + Turvallisuus ylhÀÀllĂ€: Malli sisĂ€istÀÀ roolin ja rajat ensimmĂ€isenĂ€ (alkuefekti eli primacy effect).
  • Ydin-workflow ylĂ€keskivaiheilla: TĂ€rkein osiosi — miten agentti tekee työnsĂ€.
  • TyökalumÀÀrittelyt injektoidaan jĂ€rjestelmĂ€n toimesta promptisi jĂ€lkeen: Claude Coden työkalumÀÀrittelyt syövĂ€t ~11 438 tokenia. TĂ€mĂ€ tarkoittaa, ettĂ€ oma kustomoitu sisĂ€ltösi pÀÀtyy oikeastaan lĂ€hemmĂ€s alkua kuin uskoisitkaan — mikĂ€ auttaa ohjeiden noudattamisessa.
  • Muistutukset pohjalla: HyödynnĂ€ Ă€skeisyysefektiĂ€ (recency bias) kriittisten sÀÀntöjen vahvistamiseksi.

3. Osioiden kirjoittaminen

3.1 Identiteetti — Kuka tĂ€mĂ€ agentti on?

Tavoite: Ankkuroi mallin rooli 1-3 lauseella.

You are Claude Code, Anthropic's official CLI for Claude.
You are an interactive agent that helps users with software engineering tasks.

Suuntaviivat:

  • PidĂ€ se ytimekkÀÀnĂ€ — max 1-3 lausetta.
  • NimeĂ€ rooli eksplisiittisesti (auttaa mallia erottamaan kontekstit).
  • Kerro ydinvastuu ("auttaa asiassa X"), vĂ€ltĂ€ epĂ€mÀÀrĂ€istĂ€ "olet avulias assistentti" -jargonia.
  • Mainitse SDK/alusta, jos se on oleellista ("built on Anthropic's Claude Agent SDK").

Anti-patternit:

  • "Olet avulias, harmiton ja rehellinen tekoĂ€lyassistentti" — liian geneerinen, ei ankkuroi roolia.
  • Kokonainen kappale taustatarinaa ja lorea — haaskaa tokeneita, malli ei tarvitse hahmonkehitystĂ€.

3.2 Turvallisuus ja rajat — Ehdottomat sÀÀnnöt

Tavoite: Aseta rikkoutumattomat kÀyttÀytymisrajat.

IMPORTANT: Assist with defensive security tasks only.
Refuse to create, modify, or improve code that may be used maliciously.
IMPORTANT: You must NEVER generate or guess URLs for the user.

Suuntaviivat:

  • KĂ€ytĂ€ IMPORTANT: -etuliitettĂ€ — Clauden kĂ€skyhierarkiakoulutus antaa tĂ€lle lisĂ€painoarvoa.
  • KĂ€ytĂ€ ehdotonta kieltĂ€: NEVER, MUST NOT, Refuse to.
  • Kerro sekĂ€ se mikĂ€ on sallittua ETTÄ se mikĂ€ on kiellettyĂ€ (kaksisuuntaiset rajoitteet ovat selkeĂ€mpiĂ€).
  • Sijoita aivan alkuun, Ă€lĂ€ hautaa keskelle.
  • Toista kriittiset turvallisuussÀÀnnöt lopussa — Claude Code tekee juuri nĂ€in.

Miksi toistaa? Alkuefekti (alku) + Äskeisyysefekti (loppu) = tuplavahvistus. Claude Coden turvallisuusjulistus esiintyy sekĂ€ promptin alussa ettĂ€ lopussa. Ei siksi, ettĂ€ insinöörit olisivat olleet hajamielisiĂ€ — vaan siksi, ettĂ€ he ymmĂ€rtĂ€vĂ€t U-kirjaimen muotoisen huomiokĂ€yrĂ€n.

3.3 SĂ€vy ja tyyli — Tulosteen hallinta

Tavoite: Hallitse tulosteen formaattia ja ÀÀnensÀvyÀ.

## Tone and style

- Your responses should be short and concise.
- Only use emojis if the user explicitly requests it.
- Use Github-flavored markdown for formatting.
- NEVER create files unless absolutely necessary.

Suuntaviivat:

  • Listaa spesifejĂ€ kĂ€yttĂ€ytymismalleja, ei epĂ€mÀÀrĂ€istĂ€ "ole ammattimainen" -ohjeistusta.
  • Jokaisen sÀÀnnön tulisi olla testattavissa tosi/epĂ€tosi-akselilla ("lyhyt ja ytimekĂ€s" vs. "yritĂ€ olla lyhytsanainen").
  • SisĂ€llytĂ€ tulosteen formaattivaatimukset (markdown? JSON? pelkkĂ€ teksti?).
  • SisĂ€llytĂ€ se, mitĂ€ EI saa tehdĂ€ — monet tyyliongelmat ratkeavat kieltĂ€mĂ€llĂ€ tietty kĂ€ytös.

Claude Coden helmi — Ammatillinen objektiivisuus:

Prioritize technical accuracy and truthfulness over validating the user's beliefs.
Focus on facts and problem-solving, providing direct, objective technical info
without any unnecessary superlatives, praise, or emotional validation.

TÀmÀ kappale on elintÀrkeÀ: se estÀÀ mallin taipumuksen miellyttÀmiseen (jees-mies-syndrooma). Jos agenttisi tÀytyy antaa objektiivisia arvioita (koodikatselmointi, ideoiden validointi, arkkitehtuuripÀÀtökset), tarvitset ehdottomasti vastaavan lausekkeen.

3.4 Ydin-workflow — Se kaikkein tĂ€rkein osio

Tavoite: Opettaa mallille miten työskennellĂ€ — metodologiaa, ei jĂ€ykkiĂ€ proseduureja.

TÀmÀ on vaikein osio kirjoittaa hyvin, ja sillÀ on suurin vaikutus, kun saat sen osumaan kohdalleen.

Ydinperiaate: anna periaatteita, ÀlÀ proseduureja.

Kerro LLM:lle miltĂ€ hyvĂ€ tuloste nĂ€yttÀÀ ja miksi se on hyvĂ€ — anna sen itse keksiĂ€, miten sinne pÀÀstÀÀn. VĂ€ltĂ€ mÀÀrÀÀmĂ€stĂ€ tarkkoja kenttien mÀÀriĂ€, askelsarjoja tai formaatteja, ellei tulostetta syötetĂ€ suoraan koneiden luettavaksi myöhemmĂ€ssĂ€ vaiheessa.

Claude Coden lÀhestymistapa:

## Doing tasks

The user will primarily request software engineering tasks.
For these tasks the following steps are recommended:

- Use the TodoWrite tool to plan the task if required

Huomaa sana "recommended" (suositeltu) — ei "sinun on noudatettava nĂ€itĂ€ tarkkoja askeleita". Tuo yksi sanavalinta antaa mallille tilaa sopeutua.

HyvÀ workflow-mÀÀrittely:

1. Understand first — read existing code before modifying it
2. Plan first — break complex tasks into steps before executing
3. Minimal changes — only change what's necessary, don't "refactor while you're in there"
4. Verify — confirm your changes work (run tests, lint, etc.)

Jokaisessa sÀÀnnössĂ€ on implisiittinen "miksi" — malli pystyy ymmĂ€rtĂ€mÀÀn tarkoituksen ja yleistĂ€mÀÀn sen uusiin skenaarioihin.

Anti-patternit:

  • JĂ€ykkĂ€ 20 askeleen proseduuri — malli suorittaa sen mekaanisesti ja jÀÀtyy odottamattomien syötteiden edessĂ€.
  • "Tee ensin A, sitten B, sitten C" — tuo on prompt-ketju, ei agentti-prompt.
  • Yliohjeistaminen asioissa, joissa LLM on jo valmiiksi hyvĂ€ — haaskaa tokeneita.

Opin tÀmÀn kantapÀÀn kautta VibeComin kanssa. Varhaisissa versioissa oli 10 askeleen tutkimus-workflow. Malli suoritti kuuliaisesti kaikki 10 askelta, vaikka askel 3 olisi jo vastannut kÀyttÀjÀn kysymykseen. Kun vaihdoin periaatteisiin ("tutki kunnes sinulla on riittÀvÀsti todisteita, syntetisoi sitten"), laatu parani ja token-kustannukset laskivat.

Poikkeus: Kun tuloste menee koneiden luettavaksi (agenttien vÀlinen kommunikaatio, API-vastausformaatit), sinun pitÀÀ mÀÀritellÀ tiukat formaatit. Periaatteet ovat kÀyttÀytymistÀ varten; skeemat ovat rajapintoja varten.

3.5 Työkalujen kĂ€yttöpolitiikka — EpĂ€selvyyksien ratkaiseminen

Tavoite: Kun useampi työkalu voi tehdÀ saman asian, kerro mallille kumpaa suosia.

## Tool usage policy

- Use specialized tools instead of bash commands:
  - Read for reading files instead of cat/head/tail
  - Edit for editing instead of sed/awk
  - Grep for searching instead of grep/rg
- You can call multiple tools in a single response. If independent, call in parallel.
- Use the Task tool for file search to reduce context usage.

Suuntaviivat:

  • KĂ€ytĂ€ "instead of" (sijaan) ilmaisemaan prioriteettia (A mieluummin kuin B).
  • SelitĂ€ miksi tiettyjĂ€ työkaluja tulisi suosia ("tarjoaa paremman kĂ€yttökokemuksen", "vĂ€hentÀÀ kontekstin kĂ€yttöÀ").
  • MÀÀrittele rinnakkaissuoritusstrategia (riippumattomat → rinnakkain, riippuvaiset → perĂ€kkĂ€in).
  • Listaa turvallisuusrajoitteet työkalujen kĂ€ytölle (polkujen validointi, oikeuksien tarkistukset).

Kriittinen suhde työkalujen ja promptien vÀlillÀ:

TyökalumÀÀrittelyt injektoidaan yleensÀ jÀrjestelmÀn toimesta, etkÀ voi muokata niitÀ suoraan. Claude Coden työkalumÀÀrittelyt ovat ~11 438 tokenia. TÀmÀ tarkoittaa:

  • ÄlĂ€ toista tietoa, joka on jo työkalumÀÀrittelyissĂ€.
  • KĂ€ytĂ€ system promptia strategiseen ohjaukseen: milloin kĂ€yttÀÀ mitĂ€kin työkalua, miksi suosia yhtĂ€ toisen yli, prioriteettijĂ€rjestys.
  • TyökalumÀÀrittelyjen laatu vaikuttaa suoraan agentin tehokkuuteen — jos rakennat omaa agenttia, investoi aikaa erinomaisten työkalukuvausten kirjoittamiseen.

3.6 Domain-tieto — Lataa tarvittaessa, ei etukĂ€teen

Tavoite: Tarjoa erikoistunutta tietoa, joka mallin opetusdatasta saattaa puuttua.

Ydinperiaate: asteittainen paljastaminen (progressive disclosure), ei tietodumppeja.

❌ LiitĂ€ kaikki 200 API-endpointtia system promptiin → token-rĂ€jĂ€hdys
✅ Anna mallille työkalu asioiden etsimiseen → "Lataa tietoa kun tarvitset sitĂ€"

TÀmÀn strategian jakavat sekÀ Claude Coden Skills-jÀrjestelmÀ ettÀ DeepAgentsin Progressive Disclosure -middleware. Molemmat lataavat tietoa tarpeen mukaan työkalukutsujen kautta sen sijaan, ettÀ kaikki ladattaisiin etukÀteen.

Toteutustavat:

  1. Laita osoittimet system promptiin: "KÀytÀ get_api_docs-työkalua hakeaksesi dokumentaatiota tarvittaessa"
  2. KĂ€ytĂ€ CLAUDE.md / AGENTS.md -tiedostoja projektin kontekstiin — ladataan ajonaikaisesti, ei kovakoodattuna
  3. KĂ€ytĂ€ Skills / SKILL.md -tiedostoja kyvykkyyksien löytĂ€miseen — malli nĂ€kee valikon saatavilla olevista taidoista ja hakee tĂ€ydet speksit tarvittaessa

3.7 YmpĂ€ristötiedot — Ajonaikainen konteksti

Tavoite: Anna mallille tietoisuus sen suoritusympÀristöstÀ.

<env>
Working directory: /Users/fengliu/Desktop/tfm/vibecom
Is directory a git repo: true
Platform: darwin
Today's date: 2026-03-21
</env>
You are powered by the model named Claude Opus 4.6.

Suuntaviivat:

  • Generoi dynaamisesti, Ă€lĂ€ koskaan kovakoodaa.
  • SisĂ€llytĂ€: työhakemisto, alusta, pĂ€ivĂ€mÀÀrĂ€, mallin nimi, git-status.
  • KĂ€ytĂ€ rakenteellista formaattia (XML-tĂ€git tai koodilohkot) helppoa jĂ€sentĂ€mistĂ€ varten.
  • PĂ€ivĂ€mÀÀrĂ€llĂ€ on vĂ€liĂ€ — mallin tĂ€ytyy tietÀÀ mikĂ€ on "nyt" voidakseen arvioida tiedon tuoreutta.

3.8 Muistutukset — Viimeinen vahvistus

Tavoite: Toista kaikkein kriittisimmÀt sÀÀnnöt promptin lopussa.

Claude Code toistaa turvallisuusrajoitteensa ja TodoWrite-vaatimuksensa pohjalla:

IMPORTANT: Assist with defensive security tasks only. [repeated]
IMPORTANT: Always use the TodoWrite tool to plan and track tasks. [repeated]

Suuntaviivat:

  • Toista vain 2-3 kaikkein kriittisintĂ€ sÀÀntöÀ — Ă€lĂ€ duplikoi kaikkea.
  • HyödynnĂ€ Ă€skeisyysefektiĂ€ — malli muistaa tuoreen sisĂ€llön vahvemmin.
  • Parhaat ehdokkaat: turvallisuusrajat, useimmin rikotut sÀÀnnöt, ydin-workflow'n muistutukset.

4. Token-budjetti ja kontekstin hallinta

Budjetin allokoinnin viitekehys

OsioSuositellut tokenitHuomiot
Identiteetti + Turvallisuus200-500YtimekÀs mutta ehdoton
SÀvy ja tyyli300-800SÀÀntöjen pitÀÀ olla tarkkoja, mutta ÀlÀ jaarittele
Ydin-workflow500-2 000TĂ€rkein osio, investoinnin arvoinen
Työkalujen kÀyttöpolitiikka300-1 000Riippuu työkalujen mÀÀrÀstÀ
Domain-tieto0-1 000Tarpeen mukaan lataaminen suositeltavaa
YmpÀristötiedot100-300Generoidaan dynaamisesti
Muistutukset100-300Toista vain olennaisin
Sinun osuutesi yhteensÀ1 500-6 000
TyökalumÀÀrittelyt (jÀrjestelmÀ)5 000-15 000Ei sinun hallinnassasi

Kontekstin rappeutumiskÀyrÀ

Yhteisön testaus (Reddit u/CodeMonke_) on kartoittanut todellisen maailman ohjeiden noudattamisen rappeutumista:

  • < 80K tokenia: Promptin noudattaminen pysyy vakaana
  • 80K - 120K tokenia: Ohjeiden seuraaminen alkaa heikentyĂ€
  • > 120K tokenia: MerkittĂ€vĂ€ rappeutuminen — malli "unohtaa" varhaiset ohjeet
  • > 180K tokenia: Vakava rappeutuminen

Sinun 200K konteksti-ikkunasi ≠ 200K tehokasta kontekstia. Suunnittele sen mukaisesti.

Lievennysstrategiat:

  • PidĂ€ system promptisi kevyenĂ€ (< 6 000 tokenia omalta osaltasi)
  • KĂ€ytĂ€ tiivistĂ€mistĂ€ (summarization) keskusteluhistorian pakkaamiseen (DeepAgents laukaisee tĂ€mĂ€n ~80K merkin kohdalla)
  • Sijoita kriittiset sÀÀnnöt promptin molempiin pĂ€ihin (U-kirjaimen muotoinen huomio)
  • Injektoi <system-reminder> -tĂ€gejĂ€ kesken keskustelun (lisÀÀ tĂ€stĂ€ osiossa 8)

5. Kirjoittamisen periaatteet

5.1 Anna periaatteita, ÀlÀ proseduureja

❌ "Step 1: Read the file. Step 2: Find the bug. Step 3: Fix it. Step 4: Run tests."
✅ "Always understand existing code before modifying it. Verify your changes work."

Periaatteet yleistyvÀt. Proseduureja voi seurata vain mekaanisesti. Kun malli kohtaa tilanteen, jota et osannut ennakoida, periaatteet ohjaavat oikeaan pÀÀtökseen. Proseduurit eivÀt.

Poikkeus: Kun tuloste menee koneiden luettavaksi (agenttien vÀlinen kommunikaatio, API-formaatit), mÀÀrittele tiukat skeemat.

5.2 KÀytÀ ehdotonta kieltÀ tiukoissa rajoitteissa

VahvuusKieliKÀyttökohde
Ehdoton kieltoNEVER, MUST NOTTurvallisuus, peruuttamattomat toiminnot
Vahva vaatimusALWAYS, MUSTYdin-workflow'n sÀÀnnöt
Suositusrecommended, preferParhaat kÀytÀnnöt poikkeuksineen
Ehdotusconsider, you mayValinnaiset optimoinnit

Claude Coden esimerkkejÀ:

  • NEVER update the git config — ehdoton kielto
  • ALWAYS prefer editing an existing file — vahva, mutta poikkeuksia on
  • The following steps are recommended — suositeltu workflow

5.3 KÀytÀ esimerkkejÀ selitysten sijaan

## Code References

When referencing specific functions or pieces of code include
the pattern `file_path:line_number`.

<example>
user: Where are errors from the client handled?
assistant: Clients are marked as failed in the `connectToServer`
function in src/services/process.ts:712.
</example>

Yksi esimerkki opettaa enemmÀn kuin 100 sanaa selitystÀ:

  • Mallit oppivat kaavoja esimerkeistĂ€ luotettavammin kuin abstrakteista kuvauksista
  • KÀÀri <example> -tĂ€geihin erottaaksesi ne sÀÀnnöistĂ€
  • Tarjoa sekĂ€ positiivisia ("tee nĂ€in") ettĂ€ negatiivisia ("Ă€lĂ€ tee nĂ€in") esimerkkejĂ€
  • KĂ€ytĂ€ aitoja, spesifejĂ€ esimerkkejĂ€ — ei "foo/bar" -paikkamerkkejĂ€

5.4 Kaksisuuntaiset rajoitteet

✅ "Use dedicated tools: Read for reading files, Edit for editing files."
✅ "Do NOT use bash for file operations (cat, head, tail, sed, awk)."

Jos sanot vain "tee nĂ€in" → malli ei tiedĂ€ milloin EI pitĂ€isi tehdĂ€ niin. Jos sanot vain "Ă€lĂ€ tee nĂ€in" → malli ei tiedĂ€ vaihtoehtoa. Kaksisuuntainen → selkeĂ€ ja yksiselitteinen.

5.5 SelitÀ miksi, ÀlÀ vain mitÀ

❌ "Don't use git commit --amend."
✅ "Avoid git commit --amend. ONLY use --amend when either
   (1) user explicitly requested amend OR
   (2) adding edits from pre-commit hook.
   Reason: amending may overwrite others' commits."

Miksi-kysymyksen selittĂ€minen antaa mallille kyvyn tehdĂ€ oikeita pÀÀtöksiĂ€ rajatapauksissa. Claude Coden git-turvallisuusprotokolla on mestariluokan suoritus — jokainen sÀÀntö sisĂ€ltÀÀ perustelunsa.

5.6 Rakenne voittaa proosan

  • Markdown-otsikot (##, ###) — mallit tunnistavat hierarkian
  • Luettelomerkit kappaleiden sijaan — jokainen sÀÀntö on itsenĂ€isesti testattavissa
  • XML-tĂ€git erikoissisĂ€llölle: <example>, <env>, <system-reminder>
  • Taulukot vertailuihin ja mĂ€ppĂ€yksiin
  • ÄlĂ€ koskaan dumppaa rakenteetonta tekstiĂ€ — rakenteelliset promptit voittavat luonnollisen kielen proosan sÀÀnnönmukaisesti noudattamistesteissĂ€

6. Anti-patternit, jotka haaskaavat tokeneitasi

Agentiksi naamioidut prompt-ketjut

"First call tool A to get data.
Then call tool B with the result.
Then format the output as JSON.
Then save to file."

TĂ€mĂ€ ei ole agentti-prompt — se on liukuhihnaskripti. Malli suorittaa sen mekaanisesti ja menettÀÀ autonomisen suunnittelukykynsĂ€.

Ratkaisu: Kerro mallille tavoite ja rajoitteet. Anna sen pÀÀttÀÀ askeleet.

Mielistely-promptaus (Flattery Engineering)

"You are an EXTREMELY TALENTED and INCREDIBLY EXPERIENCED
senior software engineer with 20 years of experience..."

Kohteliaisuudet ja superlatiivit eivÀt paranna tulosteen laatua. Mallilla ei ole egoa, jota pitÀisi pönkittÀÀ. SÀÀstÀ nuo 15 tokenia oikeaan sÀÀntöön.

Tietodumpit

"Here is the complete API documentation for our 200 endpoints..."

TÀmÀ ahmii konteksti-ikkunasi ja kiihdyttÀÀ kontekstin rappeutumista. Korvaa tarpeen mukaan lataamisella:

"Use the get_api_docs tool to retrieve API documentation when needed."

Työkalukuvausten toistaminen

Jos työkalumÀÀrittely sanoo jo "Read tool reads a file from the filesystem", Ă€lĂ€ sano sitĂ€ uudestaan system promptissasi. LisÀÀ vain strategista ohjausta, jota työkalumÀÀrittely ei kata — milloin kĂ€yttÀÀ sitĂ€, miksi suosia sitĂ€, prioriteettijĂ€rjestys.

Puuttuva virheenkÀsittely

Ilman eksplisiittistÀ ohjausta mallit yrittÀvÀt epÀonnistuneita työkalukutsuja uudelleen ikuisessa luupissa. SisÀllytÀ aina:

"If a tool call is denied, do not re-attempt the exact same call.
Think about why it was denied and adjust your approach."

Konteksti-ikkunan rappeutumisen sivuuttaminen

200K konteksti-ikkuna ≠ 200K tehokasta kontekstia. Todellisen maailman testaus osoittaa rappeutumisen alkavan 80K kohdalla. Tarvitset tiivistĂ€misstrategian.


7. Injektiopisteet ja prioriteetit

Claude Coden kolme kustomointimetodia

MetodiKorvaaSijaintiParas kÀyttökohde
Output Styles"Tone and style" + "Doing tasks" -osiotJuuri ennen työkalumÀÀrittelyjÀVuorovaikutustyylin muuttaminen
--append-system-promptEi mitÀÀn (lisÀÀvÀ)Output stylen jÀlkeen, ennen työkalujaSpesifien kÀytösten lisÀÀminen
--system-promptKoko system promptinSÀilyttÀÀ työkalut + yhden identiteettirivinTÀysi kustomointi (jÀrein ase)

Jos kĂ€ytĂ€t useampaa: Output Style → Append Prompt → Tool Definitions

KĂ€skyhierarkia

Claude on erityisesti koulutettu kÀskyhierarkialla:

1. User's explicit instructions (CLAUDE.md, direct requests)  ← Highest priority
2. Custom system prompt additions                               ← High
3. Default system prompt                                        ← Medium
4. Tool definitions                                             ← Reference level

TÀmÀ tarkoittaa:

  • CLAUDE.md-sÀÀnnöt ajavat oletus-system promptin yli
  • KĂ€yttĂ€jĂ€n suorat pyynnöt ajavat kaiken yli
  • Sinun kustomoitu promptisi ajaa oletuspromptin yli

Dynaamiset injektiomekanismit

  • <system-reminder> — injektoi mihin tahansa viestiin kesken keskustelun muistuttaaksesi mallia kriittisistĂ€ sÀÀnnöistĂ€
  • CLAUDE.md / AGENTS.md — ladataan ajonaikaisesti tiedostoista, lisĂ€tÀÀn system promptin perÀÀn
  • Skills / SKILL.md — ladataan tarpeen mukaan työkalukutsuilla, nolla jalanjĂ€lkeĂ€ system promptissa

8. Injektio kesken keskustelun — Salainen ase

System prompt esiintyy vain kerran, aivan viestitaulukon (messages array) alussa. Mutta LLM:t ottavat koko viestitaulukon (vuorotellen user / assistant / tool -viestejÀ) syötteenÀ, ja voit injektoida prompteja myös kÀyttÀjÀn viesteihin ja työkalujen tuloksiin. Claude Code kÀyttÀÀ tÀtÀ tekniikkaa raskaasti tuotannossa.

Miksi se on vÀlttÀmÀtöntÀ

Kontekstin mÀtÀnemistÀ vastaan taisteleminen. Kun keskustelut pitenevÀt, mallin kyky noudattaa system promptin ohjeita heikkenee (huomattavasti 80K+ tokenin kohdalla). Muistutusten injektointi kesken keskustelun = sÀÀntöjen virkistÀminen Àskeisyysefektin avulla.

Mentaalimalli:

  • System prompt = perustuslaki (asetetaan kerran, pitkĂ€aikainen auktoriteetti)
  • KĂ€yttĂ€jĂ€n viestien muistutukset = muistiot (lĂ€hetetÀÀn sÀÀnnöllisesti, yllĂ€pitĂ€vĂ€t toimeenpanoa)

Kolme injektiopistettÀ viestitaulukossa

Messages Array:
┌─────────────────────────────────────┐
│ System Prompt                       │ ← Appears once, primacy effect
│   (identity, safety, workflow...)   │
├──────────────────────────────────────
│ User Message 1                      │
│ Assistant Message 1                 │
│ User Message 2 + <system-reminder>  │ ← Mid-conversation injection
│ Assistant Message 2                 │
│ Tool Result + <system-reminder>     │ ← Can inject into tool results too
│ ...                                 │
│ User Message N + <system-reminder>  │ ← Latest message, strongest recency
└─────────────────────────────────────┘
SijaintiEtuHaitta
System promptAlkuefekti, luetaan ensinEsiintyy kerran, "unohtuu" pitkissÀ keskusteluissa
KĂ€yttĂ€jĂ€n viestin injektioÄskeisyysefekti, sÀÀnnöllinen pĂ€ivitysJokainen injektio maksaa tokeneita
Työkalun tuloksen injektioLuonnollisin injektiopisteToimii vain kun työkaluja kutsutaan

Miten Claude Code oikeasti kÀyttÀÀ tÀtÀ

Edellytys — esittele tĂ€git system promptissa:

Tool results and user messages may include <system-reminder> tags.
<system-reminder> tags contain useful information and reminders.
They are automatically added by the system, and bear no direct
relation to the specific tool results or user messages in which they appear.

TÀmÀ askel on kriittinen: se kertoo mallille, ettÀ nÀmÀ tÀgit ovat jÀrjestelmÀn injektoimia, eivÀt kÀyttÀjÀn puhetta.

KÀyttötapaus 1: KÀyttÀytymismuistutukset (sÀÀnnöllinen sÀÀntöjen virkistys)

<system-reminder>
The task tools haven't been used recently. If you're working on tasks
that would benefit from tracking progress, consider using TaskCreate...
</system-reminder>

Claude Code kĂ€yttÀÀ tĂ€tĂ€ muistuttaakseen mallia suunnittelemaan TodoWriten avulla — koska malleilla on tapana "unohtaa" suunnittelu ja vain aloittaa koodaaminen.

KÀyttötapaus 2: Tilan vaihtaminen (Plan Mode)

<system-reminder>
Plan mode is active. The user indicated that they do not want you to
execute yet -- you MUST NOT make any edits, run any non-readonly tools,
or otherwise make any changes to the system.
</system-reminder>

Plan modea ei ole toteutettu system promptissa. Se on tÀgi, joka injektoidaan seuraavaan kÀyttÀjÀn viestiin. TÀmÀ antaa sinun vaihdella tiloja dynaamisesti muokkaamatta system promptia. Nerokasta.

KÀyttötapaus 3: Tiedostojen muutosilmoitukset

<system-reminder>
Note: /path/to/file.ts was modified, either by the user or by a linter.
This change was intentional, so make sure to take it into account.
</system-reminder>

Kun ulkoinen prosessi (linter, formater, manuaalinen muokkaus) muokkaa tiedostoa, jĂ€rjestelmĂ€ ilmoittaa mallille muistutuksen kautta — estĂ€en pÀÀtökset, jotka perustuvat vanhentuneeseen tiedostosisĂ€ltöön.

KÀyttötapaus 4: Dynaaminen konteksti (pÀivÀmÀÀrÀt, projektin sÀÀnnöt)

<system-reminder>
Today's date is 2026-03-21.
Current branch: dev
claudeMd: [CLAUDE.md content injected here]
</system-reminder>

Ajonaikainen konteksti (pÀivÀmÀÀrÀ, git-status, projektin sÀÀnnöt) injektoidaan kÀyttÀjÀn viestien kautta, ei kovakoodattuna system promptiin.

Kirjoitusohjeet muistutuksille

  • KÀÀri XML-tĂ€geihin (<system-reminder>) — malli osaa erottaa jĂ€rjestelmĂ€n injektion kĂ€yttĂ€jĂ€n puheesta.
  • Esittele tĂ€git etukĂ€teen system promptissa — muuten malli saattaa yrittÀÀ vastata muistutukseen.
  • ÄlĂ€ injektoi jokaiseen viestiin — jokainen injektio maksaa tokeneita, injektoi vain tarvittaessa.
  • PidĂ€ se lyhyenĂ€ — muistutus ei ole toinen system prompt, vain 1-2 kriittistĂ€ sÀÀntöÀ.
  • ÄlĂ€ ole ristiriidassa system promptin kanssa — muistutukset tĂ€ydentĂ€vĂ€t ja vahvistavat, ne eivĂ€t aja yli.
  • KĂ€ytĂ€ dynaamisiin vaihtoihin — plan mode, readonly mode, feature flagit.

Milloin kÀyttÀÀ System Promptia vs. KÀyttÀjÀn viestin muistutusta

SkenaarioSystem PromptKÀyttÀjÀn viestin muistutus
Roolin mÀÀrittely✅❌
Turvallisuusrajat✅ EnsimmĂ€inen julistus✅ SÀÀnnöllinen toisto
Workflow-metodologia✅❌
Tilan vaihtaminen (plan mode)❌✅
Tiedostojen muutosilmoitukset❌✅
PĂ€ivĂ€mÀÀrĂ€ / ympĂ€ristötiedot✅ AlkuperĂ€inen arvo✅ PĂ€ivitetty arvo
KĂ€yttĂ€ytymisen korjaaminen❌✅
Työkalujen kĂ€ytön muistutukset✅ SÀÀnnön mÀÀrittely✅ Suorituksen tönĂ€isyt

9. Prompt Cache — SÀÀstĂ€ 90 % toistuvista tokeneista

Anthropicin prompt-vĂ€limuisti (prompt caching) antaa sinun vĂ€limuistittaa viestitaulukkosi staattisen etuliitteen (prefix). Kun seuraavat pyynnöt jakavat saman etuliitteen, ne osuvat vĂ€limuistiin — sÀÀstĂ€en rahaa ja vĂ€hentĂ€en latenssia.

Agenttien kohdalla tÀllÀ on valtavasti vÀliÀ: lÀhetÀt system promptin + työkalumÀÀrittelyt uudelleen jokaisella LLM-kutsulla keskustelun sisÀllÀ.

Avainluvut

MittariArvo
VÀlimuistiosuman hinta10 % normaalihinnasta (90 % sÀÀstö)
VĂ€limuistiin kirjoituksen hinta125 % normaalihinnasta (25 % preemio ekalla kerralla)
VÀlimuistin TTL5 minuuttia (vanhenee jos ei pyyntöjÀ)
Minimi vÀlimuistipituus1 024 tokenia (Claude 3.5+)
VĂ€limuistin granulaarisuusEtuliitteen tĂ€smĂ€ys — alusta merkittyyn katkoskohtaan
MaksimimÀÀrÀ katkoskohtia4

Miten tÀmÀ muuttaa promptien suunnittelua

Ydinperiaate: staattinen sisÀltö ensin, dynaaminen sisÀltö viimeisenÀ.

✅ VĂ€limuistiystĂ€vĂ€llinen asettelu:
  System prompt (staattinen)      ← VĂ€limuistin katkoskohta 1
  Tool definitions (staattinen)   ← VĂ€limuistin katkoskohta 2
  CLAUDE.md / project rules   ← VĂ€limuistin katkoskohta 3 (muuttuu satunnaisesti)
  Conversation history         ← Katkoskohta 4 rullaavalle ikkunalle

❌ VĂ€limuistin tuhoava asettelu:
  System prompt
  DYNAMIC TIMESTAMP            ← Muuttuu joka pyynnöllĂ€, kaikki tĂ€mĂ€n jĂ€lkeen = vĂ€limuistihuti
  Tool definitions
  Conversation history

Ansa, josta kukaan ei varoita: Jos laitat dynaamisen aikaleiman keskelle system promptiasi, kaikesta sen jÀlkeisestÀ tulee vÀlimuistihuti (cache miss). Joka. IkinisellÀ. PyynnöllÀ. Yksi aikaleima vÀÀrÀssÀ paikassa ja maksat tÀyden hinnan tuhansista tokeneista.

API:n kÀyttö

const response = await anthropic.messages.create({
  model: "claude-sonnet-4-6",
  system: [
    {
      type: "text",
      text: "You are a startup advisor...",
      cache_control: { type: "ephemeral" }  // ← merkitsee vĂ€limuistin katkoskohdan
    }
  ],
  messages: [...]
});

Monen katkoskohdan strategia

Katkoskohta 1: System prompt           ← Ei muutu juuri koskaan
Katkoskohta 2: Tool definitions         ← Ei muutu juuri koskaan
Katkoskohta 3: Project rules / CLAUDE.md ← Muuttuu satunnaisesti
Katkoskohta 4: First N history messages  ← Rullaavan ikkunan vĂ€limuisti

Vaikka keskusteluhistoria muuttuu, ensimmÀiset 3 katkoskohtaa osuvat silti vÀlimuistiin. 10 vuoron keskustelu sÀÀstÀÀ karkeasti 40-60 % syötetokenien kustannuksista.

Suunnittelusuositukset

  • Ei korkean taajuuden dynaamisia arvoja system promptiin — pĂ€ivĂ€mÀÀrĂ€ on ok (muuttuu pĂ€ivittĂ€in), tarkat aikaleimat eivĂ€t ole
  • Laita dynaaminen konteksti (git-status jne.) kĂ€yttĂ€jĂ€n viestien injektioihin — ei system promptiin, tai tuhoat vĂ€limuistin
  • PidĂ€ työkalumÀÀrittelyt vakaina — Ă€lĂ€ lisÀÀ/poista työkaluja dynaamisesti ajon aikana
  • KĂ€ytĂ€ rullaavaa ikkunaa keskusteluhistorialle — vĂ€limuistita ensimmĂ€iset N viestiĂ€, vain uusin viesti on vĂ€limuistihuti

10. Tarkistuslista

Kun olet kirjoittanut system promptisi, kÀy se lÀpi tÀmÀn tarkistuslistan avulla:

Rakenne

  • Identiteetti on aivan ylhÀÀllĂ€?
  • Turvallisuusrajat on merkitty IMPORTANT-sanalla ja toistettu lopussa?
  • SelkeĂ€ osioiden erottelu otsikoilla?
  • Esimerkit on kÀÀritty <example> -tĂ€geihin?

Token-budjetti

  • Oma osuutesi < 6 000 tokenia?
  • Et toista tietoa, joka on jo työkalumÀÀrittelyissĂ€?
  • Domain-tieto ladataan tarpeen mukaan, ei etukĂ€teen?
  • Ei monisanaista lorea tai hahmon taustatarinaa?

SÀÀntöjen laatu

  • Jokainen sÀÀntö on testattavissa tosi/epĂ€tosi-akselilla?
  • Tiukat rajoitteet kĂ€yttĂ€vĂ€t ehdotonta kieltĂ€ (NEVER/MUST)?
  • PehmeĂ€t ehdotukset kĂ€yttĂ€vĂ€t suosituskieltĂ€ (recommended/prefer)?
  • Kriittiset sÀÀnnöt selittĂ€vĂ€t miksi, eivĂ€t vain mitĂ€?
  • Kaksisuuntaiset rajoitteet (tee nĂ€in + Ă€lĂ€ tee nĂ€in)?

Agentin kÀyttÀytyminen

  • Annettu periaatteita, ei jĂ€ykkiĂ€ askel-askeleelta proseduureja?
  • KĂ€sitelty "työkalukutsu evĂ€tty" -skenaario?
  • KĂ€sitelty "este kohdattu" -strategia (Ă€lĂ€ yritĂ€ vĂ€kisin uudelleen)?
  • Kontekstin hallintastrategia paikallaan (tiivistĂ€misen kynnysarvo)?

MitÀ EI saa tehdÀ

  • Ei mielistelyĂ€ tai superlatiiveja?
  • Ei turhia "olet avulias tekoĂ€ly" -julistuksia?
  • Ei kirjoitettu prompt-ketjuksi?
  • Ei ylisuunnittelua (ominaisuuksia, joita kukaan ei pyytĂ€nyt)?

Jos aloittaisin tÀnÀÀn alusta

TÀssÀ on tarkalleen mitÀ tekisin:

  1. Aloita identiteetillÀ + turvallisuudella ensimmÀisellÀ 3 rivillÀ. Kaksi lausetta siitÀ, kuka agentti on. Tiukat rajat NEVER/MUST-sanoilla. Toista turvallisuussÀÀnnöt lopussa.

  2. Kirjoita ydin-workflow'si periaatteina, ei askeleina. Max 4-5 luettelomerkkiÀ. KÀytÀ "recommended" ja "prefer" pehmeille sÀÀnnöille, "NEVER" ja "MUST" tiukoille.

  3. Budjetoi 1 500-6 000 tokenia omalle osallesi. TyökalumÀÀrittelyt lisÀÀvÀt 5 000-15 000 lisÀÀ. Jos olet yli 6K:n, dumppaat todennÀköisesti tietoa, joka pitÀisi ladata tarpeen mukaan.

  4. KÀytÀ rakennetta kaikkialla. Markdown-otsikot, luettelomerkit, XML-tÀgit esimerkeille. Rakenteellinen prompt voittaa luonnollisen kielen proosan joka kerta.

  5. Rakenna muistutukset kesken keskustelun sisÀÀn heti ensimmÀisenÀ pÀivÀnÀ. Esittele <system-reminder> system promptissasi. Injektoi muistutuksia kriittisistÀ sÀÀnnöistÀ, tilan vaihdoista ja kontekstipÀivityksistÀ.

  6. Suunnittele vĂ€limuistia varten. Staattinen sisĂ€ltö ensin, dynaaminen sisĂ€ltö viimeisenĂ€. ÄlĂ€ koskaan laita muuttuvia arvoja system promptisi runkoon.


Kaiken tÀmÀn työn ironia? Parhaat system promptit ovat lyhyitÀ. Claude Coden kustomoidut ohjeet (ilman työkalumÀÀrittelyjÀ) ovat yllÀttÀvÀn ytimekkÀitÀ. Jokainen rivi ansaitsee paikkansa.

Aiemmin ajattelin, ettĂ€ prompt engineeringissĂ€ on kyse ovelien kikkakolmosten löytĂ€misestĂ€. Nyt ajattelen, ettĂ€ siinĂ€ on kyse kurinalaisuudesta — sanotaan vĂ€hemmĂ€n, sanotaan se tarkasti, ja luotetaan siihen, ettĂ€ malli keksii loput. Malli on fiksumpi kuin promptisi. Suunnittele ympĂ€ristö, Ă€lĂ€ kĂ€yttĂ€ytymistĂ€.


LĂ€hteet

LĂ€hdeAvainoivallus
Claude Code v2.0.14 System PromptTĂ€ysi tuotantoagentin prompt-rakenteen referenssi
Reddit: Understanding Claude Code's 3 System Prompt MethodsOutput Styles / --append / --system-prompt syvÀsukellus, kontekstin mÀtÀnemisen data
shareAI-lab/learn-claude-code"Malli on agentti" -filosofia, harness-suunnittelumetodologia
Anthropic Prompt Engineering DocsViralliset promptien parhaat kÀytÀnnöt
DeepAgents FrameworkTiivistÀmis-middleware, taitojen asteittainen paljastaminen
ai agent system promptsprompt engineering guideclaude code system promptbuilding ai agentsllm prompt optimization

Jaa tÀmÀ

Feng Liu

Kirjoittanut Feng Liu

shenjian8628@gmail.com

TĂ€ydellinen opas agenttien system promptien kirjoittamiseen — Oppeja Claude Coden takaisinmallintamisesta | Feng Liu