Skip to content

Muistimallit ja RAG agenteille

Opi agentin muistimallien tasot (työmuisti, episodinen, tieto) ja miten RAG (Retrieval-Augmented Generation) muuttaa agentin pitkäkestoiseksi oppijasta.

AI Builders
Advanced
35 min

Muistimallit ja RAG agenteille

Edellisessä oppitunnissa rakensimme agentin joka toimii yhden session ajan. Nyt opimme antamaan agentille muistin — kyvyn oppia, muistaa ja hakea tietoa pitkäkestoisesti.

Muistin kolme tasoa

Agentin muistitasot

AI-agentin muisti jakautuu kolmeen tasoon: Työmuisti (nykyinen tehtävä ja havainnot), Episodinen muisti (aiemmat suoritukset ja opitut asiat) ja Tietomuisti (indeksoidut dokumentit ja data). Kukin taso palvelee eri tarkoitusta ja vaatii erilaisen toteutuksen.

MuistityyppiLaajuusTyypillinen käyttö
TyömuistiNykyinen tehtävä/sessioPidä välitulokset ja suunnitelma
Episodinen muistiAiemmat suorituksetKäytä uudelleen onnistuneet strategiat
TietomuistiIndeksoidut dokumentitVastaa perustellusti (RAG)

Työmuisti

Työmuisti on agentin "RAM" — mitä se tietää juuri nyt:

Työmuistipython
class WorkingMemory:
  """Agentin lyhytkestoinen muisti."""

  def __init__(self):
      self.messages = []       # Keskusteluhistoria
      self.plan = []           # Nykyinen suunnitelma
      self.observations = []   # Havainnot ympäristöstä
      self.tool_results = []   # Työkalujen tulokset

  def add_observation(self, obs: str):
      self.observations.append(obs)
      # Pidä muisti hallittavana
      if len(self.observations) > 50:
          self.observations = self.observations[-30:]

Episodinen muisti

Episodinen muisti tallentaa aiempia kokemuksia:

Episodinen muistipython
class EpisodicMemory:
  """Pitkäkestoinen kokemusmuisti."""

  def __init__(self, path="memory/episodes.json"):
      self.path = path
      self.episodes = self._load()

  def remember(self, task: str, outcome: str, strategy: str):
      """Tallenna kokemus."""
      self.episodes.append({
          "task": task,
          "outcome": outcome,  # "success" | "failure"
          "strategy": strategy,
          "timestamp": datetime.now().isoformat(),
      })
      self._save()

  def recall(self, query: str, limit=3) -> list:
      """Hae relevantit kokemukset."""
      # Yksinkertainen: etsi samankaltaisia tehtäviä
      relevant = [e for e in self.episodes
                  if any(word in e["task"].lower()
                         for word in query.lower().split())]
      return relevant[-limit:]

Tietomuisti (RAG)

Tietomuisti perustuu Retrieval-Augmented Generation -arkkitehtuuriin.

RAG agenteille

RAG (Retrieval-Augmented Generation)

RAG on arkkitehtuuri jossa LLM:n vastauksia rikastetaan hakemalla relevanttia tietoa ulkoisesta tietolähteestä. Prosessi: Dokumentit → Pilko → Upota (embeddings) → Tallenna (vektoritietokanta) → Hae → Rikasta promptia → LLM päättelee perustellusti.

RAG-pipeline

RAG-prosessitext
Dokumentit → Pilkominen → Upotus → Tallennus (ChromaDB)
                                      ↓
Kysely → Haku (top-K) → Promptin rikastus → Agentti päättelee → Perusteltu vastaus

Toteuttaminen ChromaDB:llä

RAG ChromaDB:lläpython
import chromadb

# 1. Luo tietokanta
client = chromadb.Client()
collection = client.create_collection("project_docs")

# 2. Indeksoi dokumentit
def index_document(doc_path: str):
  """Lue, pilko ja indeksoi dokumentti."""
  with open(doc_path) as f:
      content = f.read()

  # Pilko kappaleisiin
  chunks = split_into_chunks(content, max_size=500)

  for i, chunk in enumerate(chunks):
      collection.add(
          documents=[chunk],
          metadatas=[{"source": doc_path, "chunk": i}],
          ids=[f"{doc_path}_{i}"],
      )

# 3. Hae relevantti tieto
def retrieve(query: str, top_k: int = 5) -> list:
  """Hae relevantit kappaleet."""
  results = collection.query(
      query_texts=[query],
      n_results=top_k,
  )
  return results["documents"][0]

# 4. Rikasta agentin promptia
def augmented_prompt(query: str) -> str:
  """Luo RAG-rikastettu prompt."""
  context = retrieve(query)
  return f"""Answer based on the following context:

{chr(10).join(context)}

Question: {query}
"""

RAG agentin työkaluna

Kun RAG on osa agenttia, haku muuttuu työkalukutsuksi agentin suunnitelmassa:

Agentti + RAGtext
Käyttäjä: "Miten autentikointi toimii tässä projektissa?"

Agentti:
→ Plan: Tarvitsen tietoa autentikoinnista → käytän RAG-hakua
→ Act: retrieve("authentication flow")
→ Observe: Sain 5 relevanttia kappaletta
→ Plan: Yhdistän tiedon vastaukseksi
→ Act: Vastaan perustellusti viitaten lähteisiin

Mikä muuttuu kun RAG on agentin sisällä?

LähestymistapaOminaisuudet
Pelkkä LLMSaattaa hallusinoida, käyttää koulutusdataa
RAG-hakuPerusteltu indeksoidulla sisällöllä
Agentti + RAGPäättää milloin hakea, yhdistää useita lähteitä, käyttää muita työkaluja rinnalla

Pro-vinkki

RAG on parhaimmillaan faktakysymyksissä ("miten X toimii tässä projektissa?"). Se ei korvaa agentin päättelykykyä — se täydentää sitä. Agentti päättää milloin hakea ja mitä tehdä tuloksilla.

Muistin suunnitteluperiaatteet

1. Pidä työmuisti kevyenä

Älä tallenna kaikkea — poista vanhat, irrelevantit havainnot.

2. Tallenna vain arvokkaat kokemukset

Episodiseen muistiin vain onnistumiset, merkittävät epäonnistumiset ja oivallukset.

3. Merkitse lähde ja aika

Jokainen muistimerkintä sisältää lähteen ja aikaleiman — vanhentunut tieto on vaarallista.

4. Erottele haku ja muisti

RAG (tietomuisti) vastaa faktoihin, episodinen muisti strategioihin. Älä sekoita niitä.

Tietovisa

Mikä muuttuu kun RAG on osa agenttia eikä itsenäinen haku?

Lisää RAG-haku agenttiisi

Lisää RAG-kyvykkyys edellisessä tunnissa rakentamaasi agenttiin: 1) Asenna ChromaDB, 2) Indeksoi projektin README ja docs-kansio, 3) Lisää 'search_docs' työkalu agenttiin, 4) Testaa kysymyksellä joka vaatii haettua tietoa vs. kysymyksellä joka ei vaadi. Vertaa tuloksia.

Moduulin yhteenveto

AI-agentit -moduulissa opit:

  1. Mikä on AI-agentti? — LLM-silmukka + suunnittelu + työkalut + muisti
  2. Agenttisilmukka — Observe → Plan → Act → Evaluate → Store
  3. CLI vs. MCP — Valitse oikea työkalu oikeaan tarpeeseen
  4. Oman agentin rakentaminen — System prompt, työkalut, guardrails, testaus
  5. Muisti ja RAG — Kolme muistitasoa + RAG pitkäkestoisena tietomuistina

Seuraavassa moduulissa siirrymme ohjelmistotehtaisiin: miten yksittäisistä agenteista rakennetaan toistettavia toimitusputkia ja tiimitason järjestelmiä.

Sign in to track your progress

Questions & Answers

Log in to participate in the discussion