Skip to content

Agenttisilmukka ja arkkitehtuuri

Opi agenttisilmukan rakenne: Observe → Plan → Act → Evaluate → Store, ja ymmärrä miten agentin komponentit toimivat yhdessä.

AI Builders
Advanced
30 min

Agenttisilmukka ja arkkitehtuuri

Jokainen AI-agentti perustuu samaan perussilmukkaan: havainnoi, suunnittele, toimi, arvioi ja tallenna. Tämä oppitunti pureutuu silmukan rakenteeseen ja agentin arkkitehtuuriin.

Agenttisilmukka: OPAES

Agenttisilmukka (Agent Loop)

Agenttisilmukka on agentin ydinprosessi: Observe (havainnoi konteksti) → Plan (suunnittele seuraava askel) → Act (suorita työkalu) → Evaluate (arvioi tulos) → Store (tallenna opittu). Silmukkaa toistetaan kunnes tavoite saavutetaan tai pysähtymisehto täyttyy.

Agenttisilmukkatext
Tavoite
→ Havainnoi konteksti (Observe)
→ Suunnittele seuraava askel (Plan)
→ Suorita työkalu (Act)
→ Arvioi tulos (Evaluate)
→ Tallenna muistiin (Store)
→ Jatka tai lopeta

1. Observe — Havainnoi

Agentti kerää tietoa ympäristöstään:

  • Lukee tiedostoja
  • Tarkistaa aikaisemmat tulokset
  • Hakee relevanttia kontekstia muistista
  • Tarkistaa rajoitteet (AGENTS.md)

2. Plan — Suunnittele

Agentti päättää seuraavan toiminnon:

  • Mikä työkalu on sopivin?
  • Mitä parametreja käytetään?
  • Mitä riskejä on?

3. Act — Toimi

Agentti suorittaa suunnitellun toiminnon:

  • Kutsuu työkalua (CLI, API, tiedosto-operaatio)
  • Vastaanottaa tuloksen

4. Evaluate — Arvioi

Agentti arvioi tuloksen:

  • Onnistuiko toiminto?
  • Edenikö tavoitteen suuntaan?
  • Tarvitaanko korjaavia toimenpiteitä?

5. Store — Tallenna

Agentti tallentaa oleellisen tiedon:

  • Päivittää työmuistia
  • Tallentaa pitkäkestoiseen muistiin tarvittaessa

Agentin arkkitehtuurikomponentit

Agentin perusarkkitehtuuripython
class Agent:
  """Yksinkertainen agentin perusrakenne."""

  def __init__(self, model, tools, system_prompt, max_iterations=10):
      self.model = model          # LLM-malli
      self.tools = tools          # Käytettävissä olevat työkalut
      self.system_prompt = system_prompt  # Persoonallisuus ja säännöt
      self.max_iterations = max_iterations
      self.memory = []            # Työmuisti

  async def run(self, goal: str) -> str:
      """Suorita agenttisilmukka."""
      for i in range(self.max_iterations):
          # Observe: kokoa konteksti
          context = self.observe(goal)

          # Plan + Act: LLM päättää ja suorittaa
          response = await self.model.generate(
              system=self.system_prompt,
              messages=self.memory + [context],
              tools=self.tools,
          )

          # Evaluate: tarkista tulos
          if response.is_complete:
              return response.final_answer

          # Store: tallenna muistiin
          self.memory.append(response)

          # Act: suorita työkalukutsut
          for tool_call in response.tool_calls:
              result = await self.execute_tool(tool_call)
              self.memory.append(result)

      return "Max iterations reached"

Pysähtymisehdot

Agentti tarvitsee selkeät pysähtymisehdot:

EhtoKuvausToimenpide
Tavoite saavutettuKaikki AC:t täyttyvätPalauta tulos
IteraatiorajaMax kierrokset ylitettyRaportoi tila
VirheKriittinen virhe toiminnossaPysähdy ja raportoi
Käyttäjän keskeytysIhminen pysäyttääTallenna tila
Blocked3 yrityksen sääntöPyydä ihmisen ohjausta

Pro-vinkki

Suunnitteluperiaate: jokaisen silmukan iteraation pitää olla auditoitava. Jos et voi selittää miksi agentti teki tietyn toiminnon, agentti ei ole tuotantovalmis. Kirjaa jokainen Observe → Plan → Act → Evaluate -sykli lokiin.

Agentti käytännössä: gemini_agent.py

Alla on yksinkertaistettu versio todellisesta agentista:

Agentin pääsilmukkapython
async def run_chat_loop(model, tools, system_prompt):
  """Agentin interaktiivinen silmukka."""
  history = []

  while True:
      user_input = input("You: ")
      if user_input.lower() in ["exit", "quit"]:
          break

      history.append({"role": "user", "content": user_input})

      # Agentti voi käyttää useita työkaluja per kierros
      while True:
          response = await model.generate(
              system=system_prompt,
              messages=history,
              tools=tools,
          )

          if response.text and not response.tool_calls:
              # Agentti on valmis vastaamaan
              print(f"Agent: {response.text}")
              history.append({
                  "role": "assistant",
                  "content": response.text
              })
              break

          # Suorita työkalukutsut
          for call in response.tool_calls:
              result = execute_tool(call.name, call.args)
              history.append({
                  "role": "tool",
                  "name": call.name,
                  "content": result
              })
              print(f"  [Tool: {call.name}] → {result[:100]}...")

Arkkitehtuurin komponenttijako

KomponenttiFunktioTarkoitus
System promptbuild_system_prompt()Agentin persoonallisuus ja säännöt
Työkalurekisteribuild_tool_declarations()Mitä työkaluja on käytettävissä
Silmukkakontrollerirun_chat_loop()Observe-plan-act-sykli
PysähtymisehdotIteraatioraja, exit-komentoMilloin lopettaa
Tietovisa

Mikä on agenttisilmukan Evaluate-vaiheen tärkein tehtävä?

Piirrä agenttisilmukka

Piirrä (paperille tai digitaalisesti) agenttisilmukkakaavio todelliselle tehtävälle, esim. 'Korjaa failaavat testit'. Merkitse jokainen vaihe (Observe → Plan → Act → Evaluate → Store) ja näytä 2–3 iteraatiota. Tunnista pysähtymisehdot.

Yhteenveto

  • Agenttisilmukka: Observe → Plan → Act → Evaluate → Store
  • Pysähtymisehdot ovat kriittiset: tavoite, iteraatioraja, virhe, blocked
  • Jokainen iteraatio pitää olla auditoitava
  • Arkkitehtuuri koostuu: system prompt, työkalut, silmukka, pysäytys
  • Seuraavaksi vertaamme CLI- ja MCP-työkaluja agenteille

Sign in to track your progress

Questions & Answers

Log in to participate in the discussion