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.

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:
- Laita osoittimet system promptiin: "KÀytÀ get_api_docs-työkalua hakeaksesi dokumentaatiota tarvittaessa"
- KĂ€ytĂ€ CLAUDE.md / AGENTS.md -tiedostoja projektin kontekstiin â ladataan ajonaikaisesti, ei kovakoodattuna
- 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
| Osio | Suositellut tokenit | Huomiot |
|---|---|---|
| Identiteetti + Turvallisuus | 200-500 | YtimekÀs mutta ehdoton |
| SÀvy ja tyyli | 300-800 | SÀÀntöjen pitÀÀ olla tarkkoja, mutta ÀlÀ jaarittele |
| Ydin-workflow | 500-2 000 | TĂ€rkein osio, investoinnin arvoinen |
| Työkalujen kÀyttöpolitiikka | 300-1 000 | Riippuu työkalujen mÀÀrÀstÀ |
| Domain-tieto | 0-1 000 | Tarpeen mukaan lataaminen suositeltavaa |
| YmpÀristötiedot | 100-300 | Generoidaan dynaamisesti |
| Muistutukset | 100-300 | Toista vain olennaisin |
| Sinun osuutesi yhteensÀ | 1 500-6 000 | |
| TyökalumÀÀrittelyt (jÀrjestelmÀ) | 5 000-15 000 | Ei 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
| Vahvuus | Kieli | KÀyttökohde |
|---|---|---|
| Ehdoton kielto | NEVER, MUST NOT | Turvallisuus, peruuttamattomat toiminnot |
| Vahva vaatimus | ALWAYS, MUST | Ydin-workflow'n sÀÀnnöt |
| Suositus | recommended, prefer | Parhaat kÀytÀnnöt poikkeuksineen |
| Ehdotus | consider, you may | Valinnaiset optimoinnit |
Claude Coden esimerkkejÀ:
NEVER update the git configâ ehdoton kieltoALWAYS prefer editing an existing fileâ vahva, mutta poikkeuksia onThe 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
| Metodi | Korvaa | Sijainti | Paras kÀyttökohde |
|---|---|---|---|
| Output Styles | "Tone and style" + "Doing tasks" -osiot | Juuri ennen työkalumÀÀrittelyjÀ | Vuorovaikutustyylin muuttaminen |
| --append-system-prompt | Ei mitÀÀn (lisÀÀvÀ) | Output stylen jÀlkeen, ennen työkaluja | Spesifien kÀytösten lisÀÀminen |
| --system-prompt | Koko system promptin | SÀilyttÀÀ työkalut + yhden identiteettirivin | TÀ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
âââââââââââââââââââââââââââââââââââââââ
| Sijainti | Etu | Haitta |
|---|---|---|
| System prompt | Alkuefekti, luetaan ensin | Esiintyy kerran, "unohtuu" pitkissÀ keskusteluissa |
| KĂ€yttĂ€jĂ€n viestin injektio | Ăskeisyysefekti, sÀÀnnöllinen pĂ€ivitys | Jokainen injektio maksaa tokeneita |
| Työkalun tuloksen injektio | Luonnollisin injektiopiste | Toimii 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
| Skenaario | System Prompt | KÀ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
| Mittari | Arvo |
|---|---|
| VÀlimuistiosuman hinta | 10 % normaalihinnasta (90 % sÀÀstö) |
| VĂ€limuistiin kirjoituksen hinta | 125 % normaalihinnasta (25 % preemio ekalla kerralla) |
| VÀlimuistin TTL | 5 minuuttia (vanhenee jos ei pyyntöjÀ) |
| Minimi vÀlimuistipituus | 1 024 tokenia (Claude 3.5+) |
| VĂ€limuistin granulaarisuus | Etuliitteen tĂ€smĂ€ys â alusta merkittyyn katkoskohtaan |
| MaksimimÀÀrÀ katkoskohtia | 4 |
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:
-
Aloita identiteetillÀ + turvallisuudella ensimmÀisellÀ 3 rivillÀ. Kaksi lausetta siitÀ, kuka agentti on. Tiukat rajat NEVER/MUST-sanoilla. Toista turvallisuussÀÀnnöt lopussa.
-
Kirjoita ydin-workflow'si periaatteina, ei askeleina. Max 4-5 luettelomerkkiÀ. KÀytÀ "recommended" ja "prefer" pehmeille sÀÀnnöille, "NEVER" ja "MUST" tiukoille.
-
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.
-
KÀytÀ rakennetta kaikkialla. Markdown-otsikot, luettelomerkit, XML-tÀgit esimerkeille. Rakenteellinen prompt voittaa luonnollisen kielen proosan joka kerta.
-
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À. -
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Ă€hde | Avainoivallus |
|---|---|
| Claude Code v2.0.14 System Prompt | TĂ€ysi tuotantoagentin prompt-rakenteen referenssi |
| Reddit: Understanding Claude Code's 3 System Prompt Methods | Output 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 Docs | Viralliset promptien parhaat kÀytÀnnöt |
| DeepAgents Framework | TiivistÀmis-middleware, taitojen asteittainen paljastaminen |
Jaa tÀmÀ

Kirjoittanut Feng Liu
shenjian8628@gmail.com