
Kuinka rakentaa tekoälytyönkulkuja n8n:n ja LangChainin avulla
n8n ja LangChain ratkaisevat yhdessä ongelman, johon useimmat tiimit törmäävät ennemmin tai myöhemmin: haluat tekoälyagentteja, jotka yhdistyvät todellisiin tietoihin ja käynnistävät todellisia toimintoja, mutta LangChainin kytkeminen Pythonissa tarkoittaa koko sovelluspinon ylläpitoa. n8n:n natiivit LangChain-solmut mahdollistavat agenttien, ketjujen, muistin ja vektoritietokantojen raahaamisen visuaalisiin työnkulkuhin ja niiden liittämisen yli 400 integraatioon ilman SDK-koodin kirjoittamista.
Mitä saat: n8n:n LangChain-solmukirjasto
n8n:ssä on yli 70 tekoälysolmua, jotka toteuttavat LangChain-konseptit visuaalisina rakennuspalikoina. Sen sijaan, että importtaisit langchain-kirjaston Pythonissa ja liimaisit moduuleja yhteen, yhdistät solmut kankaalla. Tässä täydellinen erittely:
| Solmun luokka | Mitä se tekee | Keskeiset solmut |
|---|---|---|
| Juurisolmut | Ydin-teknoälylogiikka ("aivot") | AI Agent, Basic LLM Chain, Q&A Chain, Summarization Chain |
| Keskustelumallit | LLM-yhteydet | OpenAI, Anthropic Claude, Google Gemini, Ollama, Groq, Mistral, DeepSeek |
| Muisti | Keskustelun pysyvyys | Simple Memory, Redis, Postgres, MongoDB, Zep |
| Vektoritietokannat | Asiakirjojen tallennus + haku | Pinecone, Qdrant, Supabase, Chroma, Weaviate, PGVector, In-Memory |
| Upotukset (Embeddings) | Tekstin muuntaminen vektoreiksi | OpenAI, Cohere, HuggingFace, Ollama, AWS Bedrock |
| Työkalut | Ulkoiset ominaisuudet agenteille | Calculator, SerpAPI, Wikipedia, Custom Code, MCP Client, Workflow Tool |
| Tulosteen jäsentimet | Jäsennellyn vastauksen muotoilu | Auto-fixing, Structured, Item List |
| Tekstin jakajat | Asiakirjojen pilkkominen | Character, Recursive Character, Token |
Arkkitehtuuri käyttää sitä, mitä n8n kutsuu klusterisolmuiksi: juurisolmu (kuten AI Agent) yhdistyy alisolmuihin (keskustelumalli, muisti, työkalut), jotka laajentavat sen kykyjä. Ajattele tätä LangChainin moduulijärjestelmänä, mutta visuaalisena.
Miten n8n kartoittaa LangChain-konsepteja
Jos olet käyttänyt LangChainia koodissa, n8n:n kartoitus on suoraviivaista:
| LangChain-konsepti | n8n-vastaavuus | Milloin käyttää |
|---|---|---|
ChatOpenAI() | OpenAI Chat Model -alisolmu | Mikä tahansa työnkulku, joka tarvitsee LLM:n |
ConversationBufferMemory() | Simple Memory / Redis Memory | Monivaiheiset keskustelut |
RetrievalQA.from_chain_type() | Q&A Chain + Vector Store Retriever | Asiakirjojen kysely-vastaus |
AgentExecutor työkaluilla | AI Agent -solmu (Tools Agent -tyyppi) | Dynaaminen työkalujen valinta |
RecursiveCharacterTextSplitter() | Recursive Character Text Splitter -alisolmu | Asiakirjojen pilkkominen RAG:iin |
FAISS.from_documents() | Simple Vector Store (Insert Documents) | Upotusten tallentaminen paikallisesti |
Kriittinen ero? Koodissa kirjoitat 50–100 riviä näiden yhteen kytkemiseksi. n8n:ssä yhdistät 4–6 solmua kankaalla ja määrität ne pudotusvalikoiden kautta.
Asiakirjojen kysely-vastausputken (RAG) rakentaminen
Rakennetaan jotain konkreettista. Tämä työnkulku lataa PDF-asiakirjat, tallentaa ne vektoritietokantaan ja vastaa kysymyksiin niiden sisällöstä. Se on klassinen RAG (Retrieval-Augmented Generation) -malli, hyödyllisin LangChain-työnkulku liiketiimeille.
Vaihe 1: Tietojen lataustyönkulun asetukset
Luo uusi työnkulku asiakirjojen lataamista varten. Suorita tämä aina, kun sinulla on uusia lisättäviä asiakirjoja.
Lisättävät solmut:
- Manual Trigger, Klikkaa suorittaaksesi latauksen
- Google Drive -solmu (tai HTTP Request, Read Binary File), Hakee lähdeasiakirjasi
- Simple Vector Store, Aseta operaatioksi Insert Documents
- OpenAI Embeddings -alisolmu, Yhdistetään vektoritietokantaan, muuntaa tekstin vektoreiksi
- Default Data Loader -alisolmu, Jäsentää asiakirjan sisällön paloiksi
- Recursive Character Text Splitter -alisolmu, Pilkkoo sisällön noin 500 tokenin paloihin, joissa on 50 tokenin päällekkäisyys
Vektoritietokannan määritystiedot:
- Operaatio:
Insert Documents - Muistiavain: Anna sille kuvaava nimi, kuten
company-docs(näin viittaat siihen myöhemmin) - Data Loader yhdistyy alisolmuna ja käsittelee PDF/tekstin jäsentämisen automaattisesti
Tekstin jakajan määritykset:
- Palan koko: 500 (tokenia)
- Palan päällekkäisyys: 50 (varmistaa, ettei konteksti katoa rajoilla)
- Jakamismenetelmä: Recursive Character (käsittelee Markdownia, HTML:ää ja pelkkää tekstiä älykkäästi)
Vaihe 2: Kysely-vastausagentin työnkulun rakentaminen
Luo nyt toinen työnkulku, tämä on se, jonka kanssa käyttäjät ovat vuorovaikutuksessa.
Lisättävät solmut:
- Chat Trigger, Tarjoaa keskustelukäyttöliittymän kysymyksille
- AI Agent (Tools Agent -tyyppi), Aivot, jotka päättävät mitä tehdä
- OpenAI Chat Model -alisolmu, Yhdistä GPT-4o tai GPT-4o-mini
- Simple Memory -alisolmu, Muistaa keskustelukontekstin
- Vector Store Tool -alisolmu, Antaa agentille pääsyn asiakirjoihisi
AI Agent -solmun määritykset:
- Agentin tyyppi: Tools Agent (joustavin vaihtoehto, se päättää milloin ja miten työkaluja käytetään)
- Järjestelmäkehote:
Olet avulias assistentti, joka vastaa kysymyksiin yrityksemme asiakirjojen perusteella. Mainitse aina, mistä asiakirjasta löysit vastauksen. Jos tietoa ei ole asiakirjoissa, kerro siitä selkeästi.
Vector Store Tool -määritykset:
- Nimi:
search_documents - Kuvaus:
Hae yrityksen tietokannasta relevanttia tietoa. Käytä tätä työkalua, kun käyttäjä kysyy yrityksen käytännöistä, prosesseista tai dokumentaatiosta. - Vektoritietokanta: Valitse Simple Vector Store -tietokantasi
- Upotusmalli: Sama OpenAI Embeddings -malli, jota käytit latausvaiheessa
- Top K: 4 (haettavien relevanttien palojen määrä)
Tuo kuvaus on tärkeämpi kuin luuletkaan. Agentti käyttää sitä päättääkseen, milloin kutsua työkalua versus vastata omasta tiedostaan. Ole spesifi.
Vaihe 3: Testaus ja hienosäätö
Klikkaa Chat alapaneelissa avataksesi n8n:n sisäänrakennetun keskustelukäyttöliittymän. Kysy kysymys asiakirjoistasi. Tarkkaile suoritusjäljitystä; n8n näyttää tarkalleen, mitkä solmut aktivoituivat, mikä oli agentin päättely ja mitkä asiakirjapalat haettiin.
Tässä vaiheessa yleisiä ongelmia:
- Agentti ei käytä työkalua: Työkalusi kuvaus on liian epämääräinen. Tee siitä spesifi siitä, mitä tietoa työkalu sisältää.
- Hakee irrelevanteja paloja: Lisää palan päällekkäisyyttä tai pienennä palan kokoa. Kokeile 300 tokenia 100:n päällekkäisyydellä.
- Hitaat vastaukset: Vaihda keskustelumalliksi GPT-4o-mini. Se on 10 kertaa edullisempi ja tarpeeksi nopea useimpiin kysely-vastaustehtäviin.
Työkaluja kutsuvan agentin rakentaminen
Yllä oleva kysely-vastausputki on loistava asiakirjoille. Mutta entä agentti, joka voi etsiä verkosta, suorittaa laskutoimituksia, kysellä tietokantoja JA vastata asiakirjoista? Siinä Tools Agent todella loistaa.
Työnkulun asetukset
- Chat Trigger, Käyttäjän syöte
- AI Agent (Tools Agent), Ohjaa oikeaan työkaluun
- OpenAI Chat Model, GPT-4o monimutkaiseen päättelyyn
- Simple Memory, Keskusteluhistoria
- Useita yhdistettyjä työkaluja:
- SerpAPI Tool, Verkkohakukyky
- Calculator Tool, Matemaattiset operaatiot
- Vector Store Tool, Asiakirjatietokantasi
- Custom Code Tool, Mikä tahansa kirjoittamasi JavaScript-funktio
- Workflow Tool, Käynnistää toisen n8n-työnkulun työkaluna
Workflow Tool on n8n:n salainen ase. Se mahdollistaa minkä tahansa n8n-työnkulun käärimisen työkaluksi, jota agentti voi kutsua. Onko sinulla työnkulku, joka tarkistaa varastotilanteen? Tee siitä työkalu. Sellainen, joka lähettää Slack-viestejä? Työkalu. Sellainen, joka kysely CRM:stäsi? Työkalu. Tässä n8n:n yli 400 integraatiosolmua tulevat saataville tekoälyagentillesi.
Järjestelmäkehote monityökaluagenteille
Järjestelmäkehotteesi tulee kertoa agentille sen kyvyistä:
You are a research assistant with access to the following tools:
- search_documents: Search our internal knowledge base
- web_search: Search the internet for current information
- calculator: Perform mathematical calculations
- send_notification: Send a Slack message to the team
For factual questions about our company, always check search_documents first.
For current events or external data, use web_search.
Show your reasoning before giving a final answer.Tämä kehotemalli ohjaa suoraan sitä, miten agentti reitittää pyyntöjä työkalujen välillä. Epämääräiset kehotteet johtavat siihen, että agentit käyttävät verkkohakua, vaikka niiden pitäisi ensin tarkistaa asiakirjasi.
Oikean agenttityypin valinta
n8n tarjoaa kuusi agenttityyppiä. Tässä milloin kukin kannattaa valita:
| Agentin tyyppi | Parhaiten sopii | Tukee työkaluja? | Huomioita |
|---|---|---|---|
| Tools Agent | Useimmat käyttötapaukset | Kyllä | Oletusvalinta, joustava, luotettava |
| Conversational Agent | Yksinkertaiset chatbotit | Kyllä | Vähemmän kyvykäs, mutta kevyempi |
| ReAct Agent | Monimutkaiset päättelyketjut | Kyllä | Näyttää eksplisiittiset päättelyvaiheet |
| OpenAI Functions Agent | OpenAI-spesifit ominaisuudet | Kyllä | Käyttää OpenAI:n function calling -API:a |
| Plan and Execute Agent | Monivaiheiset tehtävät | Kyllä | Suunnittelee ensin, sitten suorittaa, hyvä monimutkaisiin työnkulkuihin |
| SQL Agent | Tietokantakyselyt | Rajallinen | Generoi ja suorittaa SQL-kyselyjä tietokantaasi vastaan |
Useimmille tiimeille Tools Agent on oikea lähtökohta. Se käsittelee monityökalureititystä hyvin, toimii minkä tahansa LLM-palveluntarjoajan kanssa, ja voit aina vaihtaa myöhemmin. Jos vertaat tätä agenttien rakentamiseen koodilla kehysjärjestelmillä kuten LangGraph tai CrewAI, etuna on nolla käyttöönoton kuorma, agenttisi ajaa n8n:n infrastruktuurissa.
Pysyvän muistin lisääminen
Oletusarvoisesti Simple Memory -alisolmu pitää keskusteluhistorian muistissa, ja se katoaa, kun työnkulku käynnistyy uudelleen. Tuotantokäyttöön haluat pysyvän muistin.
Vaihtoehtosi:
| Muistin tyyppi | Pysyvyys | Asennusvaiva | Parhaiten sopii |
|---|---|---|---|
| Simple Memory | Vain istunto | Ei lainkaan | Testaus, prototypointi |
| Redis Chat Memory | Pysyvä, nopea | Keskitaso (tarvitsee Redisin) | Tuotantochatbotit |
| Postgres Chat Memory | Pysyvä, kyseltävä | Keskitaso (tarvitsee Postgresin) | Kun haluat analysoida keskusteluja |
| MongoDB Chat Memory | Pysyvä, joustava | Keskitaso (tarvitsee MongoDB:n) | Dokumenttipohjainen tallennus |
| Zep Memory | Pysyvä + tiivistys | Keskitaso (tarvitsee Zepin) | Pitkät keskustelut, jotka ylittävät kontekstiikkunan |
Zep on syytä nostaa esiin, jos rakennat jotain, jossa on pitkiä keskusteluhistorioita. Se tiivistää automaattisesti vanhemmat viestit, jotta agenttisi ei kuluta koko kontekstiikkunaa keskustelun 50. kierroksella.
Lisätäksesi pysyvän muistin, vaihda vain Simple Memory -alisolmu Redis-/Postgres-/Zep-solmuun. Loput työnkulustasi pysyvät identtisinä.
Yhdistäminen eri LLM-palveluntarjoajiin
Jokainen juurisolmu, joka tarvitsee LLM:n, hyväksyy Chat Model -alisolmun. Palveluntarjoajan vaihtaminen on yhden solmun muutos:
| Palveluntarjoaja | Solmun nimi | Saatavilla olevat mallit | Huomioita |
|---|---|---|---|
| OpenAI | OpenAI Chat Model | GPT-4o, GPT-4o-mini, o1, o3-mini | Laajimmin testattu n8n:n kanssa |
| Anthropic | Anthropic Chat Model | Claude 3.5 Sonnet, Claude 3 Opus | Vahva analyysissä ja pitkässä kontekstissa |
| Google Gemini Chat Model | Gemini 1.5 Pro, Gemini Flash | Hyvä ilmainen taso | |
| Ollama | Ollama Chat Model | Llama 3, Mistral, Phi-3 | Täysin paikallinen, ei API-kuluja |
| Groq | Groq Chat Model | Llama 3, Mixtral | Erittäin nopea inferenssi |
| AWS Bedrock | AWS Bedrock Chat Model | Claude, Titan, Llama | Yritystason AWS-integraatio |
Paikalliseen kehittämiseen ja testaukseen Ollama on nollakustannusvaihtoehto; aja malleja koneellasi ja yhdistä n8n osoitteeseen localhost:11434. Tuotannossa useimmat tiimit käyttävät OpenAI:tä tai Anthropicia tehtävän mukaan.
Todellisen maailman työnkulkureseptit
Tässä on kolme tuotantovalmista mallia, jotka voit rakentaa alle 30 minuutissa:
Resepti 1: Automaattinen tukipyyntöjen luokittelu
Liipaisin: Saapuva uusi sähköposti (Gmail/Outlook-solmu) Ketju: Basic LLM Chain luokittelukehotteella Tulos: Reitittää eri Slack-kanaviin kategorian perusteella
Kehote tekee raskaan työn: Luokittele tämä tukisähköposti tarkalleen yhteen kategoriaan: billing, technical, feature_request tai other. Vastaa vain kategorian nimellä.
Resepti 2: Viikoittainen sisältökatsaus
Liipaisin: Aikataulu (joka maanantai klo 9.00) Agentti: Tools Agent SerpAPI:n + Custom Code Toolin kanssa Muisti: Ei tarvita (yhden laukaisun tehtävä) Tulos: Tiivistetty raportti lähetetään Slackiin/sähköpostiin
Agentti etsii alan uutisia, tiivistää 5 tärkeintä artikkelia ja muotoilee katsauksen. Custom Code Tool käsittelee muotoilulogiikan, joka on helpompaa JavaScriptissä kuin kehotteessa.
Resepti 3: Asiakirjapohjainen Slack-botti
Liipaisin: Slack-viesti tietyssä kanavassa Agentti: Tools Agent Vector Store Toolin kanssa Muisti: Redis Chat Memory (avaimena Slack-säikeen ID) Tulos: Vastaus Slack-säikeeseen
Tämä on aiempi kysely-vastausputki, mutta liipaistuna Slackin eikä chat-käyttöliittymän kautta. Säikeeseen perustuva muistiavain tarkoittaa, että jokaisella Slack-keskustelulla on oma kontekstinsa.
Tiimeille, jotka tutkivat mitä RAG-työkaluja käyttää n8n:n rinnalla, vektoritietokannan valinta on vähemmän tärkeä kuin pilkkomisstrategia. Aloita Simple (In-Memory) Vector Storella prototypointiin, siirry sitten Pineconeen tai Qdrantiin tuotantoa varten.
Yleiset virheet ja niiden välttäminen
Rakennettuani kymmeniä n8n-tekoälytyönkulkuja, nämä ovat sudenkuopat, jotka kaatavat ihmisiä:
1. Järjestelmäkehotteen ohittaminen. AI Agent -solmu toimii ilman järjestelmäkehotetta, mutta huonosti. Määritä aina agentin rooli, saatavilla olevat työkalut ja haluttu käyttäytyminen. Kymmenen minuuttia kehotteeseen säästää tuntikausia outojen vastausten debuggausta.
2. Yhden jättimäisen työnkulun käyttäminen. Erota lataus ja kysely erillisiin työnkulkuihin. Lataustyönkulku ajoittuu harvoin (kun uusia dokumentteja saapuu). Kyselytyönkulku ajaa jatkuvasti. Niiden sekoittaminen luo suoritusristiriitoja.
3. Väärän palakoon valitseminen. Oletuspilkkominen (1000 merkkiä) toimii yleiseen sisältöön. Teknisille dokumenteille pudota 300–500 tokeniin. Lakiasiakirjoille kasvata 800–1000 tokeniin suuremmalla päällekkäisyydellä. Ei ole universaalia "oikeaa" palakokoa, testaa omilla dokumenteillasi.
4. Suorituslokin ignorointi. n8n näyttää täydellisen suoritusjäljityksen jokaiselle työnkulun ajolle. Kun agentti antaa väärän vastauksen, tarkista, mitä työkalua se kutsui (tai ei kutsunut), mitkä palat haettiin ja mitä päättelyä se näytti. Loki kertoo tarkalleen, missä asiat menivät pieleen.
5. GPT-4o:n maksaminen, kun sitä ei tarvita. Luokitteluun, tiivistämiseen ja yksinkertaiseen kysely-vastaukseen GPT-4o-mini on 90 % yhtä hyvä 10 %:n hinnalla. Säästä GPT-4o tai Claude monimutkaiseen monivaiheiseen päättelyyn.
Miten Techsy lähestyy n8n-tekoälyautomaatiota
Olemme rakentaneet n8n-tekoälytyönkulkuja asiakkaille 3 hengen startupista enterprise-tiimeihin. Prosessimme:
- Kartuta päätösvirta, Ennen n8n:n avaamista piirrämme jokaisen päätöspisteen ja tietolähteen
- Prototyypitä Simple Vector Storella, Saat ydinlogiikan toimimaan muistissa olevalla tallennuksella
- Testaa aidolla datalla aikaisin, Synteettinen testidata piilottaa pilkkomis- ja hakuongelmat
- Lisää muisti ja pysyvyys, Vasta kun ydin kysely-vastaus- tai agenttilogiikka on validoitu
- Seuraa ja iteroida, Seuraa, mitkä työkalukutsut onnistuvat, mitkä palat haetaan ja missä käyttäjät turhautuvat
Jos rakennat tekoälyagentteja liiketoiminnan työnkulkuihin ja haluat apua arkkitehtuurin suunnittelussa, ota yhteyttä ilmaiseen konsultaatioon.
Usein kysytyt kysymykset
Tarvitsenko LangChain-tuntemusta käyttääkseni n8n:n tekoälysolmuja?
Ei. n8n abstrahoi LangChainin visuaalisiksi solmuiksi pudotusvalikkomäärityksillä. LangChain-konseptien (agentit, ketjut, muisti, hakijat) ymmärtäminen auttaa tekemään parempia suunnittelupäätöksiä, mutta et koskaan kirjoita LangChain-koodia, ellet valitse käyttää LangChain Code -solmua.
Voinko käyttää paikallisia LLM-malleja n8n:ssä OpenAI:n sijaan?
Kyllä. Yhdistä Ollama Chat Model -alisolmu mihin tahansa koneellasi ajettavaan malliin (Llama 3, Mistral, Phi-3 jne.). Ohjaa se osoitteeseen http://localhost:11434 ja sinulla on täysin yksityinen, kuluton tekoälytyönkulku. Groq on toinen vaihtoehto nopeaan inferenssiin ilman oman laitteiston hallintaa.
Mikä on ero Ketjun ja Agentin välillä n8n:ssä?
Ketju seuraa kiinteää sekvenssiä; syöte kulkee vaiheen A, sitten B, sitten C kautta. Agentti päättää dynaamisesti, mitä työkaluja kutsua syötteen perusteella. Käytä ketjuja ennustettaviin tehtäviin (tiivistäminen, luokittelu). Käytä agentteja, kun työnkulun täytyy tehdä päätöksiä siitä, mitä tehdä seuraavaksi.
Kuinka monta asiakirjaa Simple Vector Store pystyy käsittelemään?
Simple (In-Memory) Vector Store toimii hyvin prototypoinnissa muutaman sadan asiakirjan kanssa. Tuotantokäyttöön tuhansilla asiakirjoilla vaihda Pineconeen, Qdrantiin, Supabaseen tai Chromaan. Työnkulku pysyy samana, vaihdat vain vektoritietokantasolmun.
Voinko liipaista n8n-tekoälytyönkulkuja ulkoisista sovelluksista?
Kyllä. Käytä Webhook Trigger -solmua paljastaaksesi tekoälytyönkulkusi API-päätepisteenä. Mikä tahansa sovellus, joka voi tehdä HTTP-pyyntöjä, voi lähettää dataa agentillesi ja saada vastauksen. Näin integroit n8n-tekoälytyönkulut olemassa oleviin tuotteisiin.
Onko n8n ilmainen tekoälytyönkulkuihin?
n8n Community Edition on täysin avointa lähdekoodia ja ilmainen itse isännöitäväksi. Kaikki LangChain-solmut sisältyvät. Cloud-suunnitelmat alkavat 24 $/kk, jos et halua hallinnoida infrastruktuuria. LLM-API-kulut (OpenAI, Anthropic jne.) ovat erillisiä ja laskutetaan palveluntarjoajan toimesta.
Miten n8n käsittelee virheitä tekoälyagenttityönkuluissa?
n8n:ssä on sisäänrakennettu virheenkäsittely solmutasolla. Voit asettaa uudelleenyrityslogiikan, varapolkuja ja virhetyönkulkuja. Tekoälyspesifeihin ongelmiin (kuten LLM-aikakatkaisut tai nopeusrajoitukset) lisää uudelleenyritys eksponentiaalisella backoffilla Chat Model -alisolmuun. Suoritusloki näyttää tarkalleen, missä virheet tapahtuvat.
Voinko käyttää n8n:n tekoälytyönkulkuja omilla API-avaimillani?
Kyllä. Jokainen LLM-solmu vaatii luomaan tunnistetiedot omalla API-avaimellasi. n8n tallentaa tunnistetiedot salattuna. Jos isännöit itse, avaimet eivät koskaan poistu infrastruktuuristasi.
Mihin LangChain Code -solmua käytetään?
LangChain Code -solmu mahdollistaa mukautetun JavaScriptin kirjoittamisen, joka käyttää LangChain-moduuleja suoraan. Se on hätäpoistumistie silloin, kun n8n:n visuaaliset solmut eivät kata tarkkaa käyttötapaustasi; ehkä tarvitset mukautetun hakijan, tietyn kehotemallin tai LangChain-moduulin, jota n8n ei ole vielä kietonut solmuksi.
Miten jaan n8n-tekoälytyönkulkuja tiimini kanssa?
Vie työnkulku JSON-muodossa (Ctrl+Shift+E) ja jaa tiedosto. Kuka tahansa voi tuoda sen omaan n8n-instanssiinsa. Tiimiyhteistyöhön n8n Cloud sisältää jaetut työtilat versiohistorialla. Voit myös commitoida työnkulun JSON-tiedostot Gitiin versionhallintaa varten.