Itsekorjaus ja reflektiivinen kehottaminen
Toteuttakaa reflektiovaihe, jossa agentti tarkistaa oman tulosteensa alkuperäistä tavoitetta vasten, tunnistaa puutteet tai virheet ja muodostaa korjatun suunnitelman ennen uutta yritystä.
Itsekorjaus ja reflektiivinen kehottaminen on ilmainen AI Engineering Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu AI Engineering Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. AI Engineering Academy-kurssilla on yhteensä 4 oppituntia.
Mitä reflektiivinen kehottaminen on
Reflektiivinen kehottaminen on tekniikka, jossa agenttia pyydetään arvioimaan oma tulosteensa ennen sen viimeistelyä. Sen sijaan että agentti tuottaisi vastauksen ja lopettaisi, se tarkistaa vastauksensa alkuperäistä tavoitetta vasten, tunnistaa puutteet tai virheet ja tuottaa korjatun version. Tämä jäljittelee tapaa, jolla ihmiset oikolukevat omaa työtään, ja parantaa merkittävästi tulosteiden laatua monimutkaisissa tehtävissä ilman erillistä kriitikkamallia.
Reflektoi ja korjaa -silmukka
Perustason reflektiivisessä silmukassa on kolme vaihetta: tuota alustava vastaus, kritiikoi vastausta selkeiden kriteerien perusteella ja korjaa vastausta kritiikin pohjalta. Silmukka voidaan suorittaa kerran tai useita kertoja. Jokainen iteraatio parantaa vastausta, kunnes kritiikki toteaa sen tyydyttäväksi tai korjausten enimmäismäärä saavutetaan. Kritiikkivaihe on itsessään LLM-kutsu, jolla on erityinen reflektiokehote.
async def reflect_and_revise(task: str, max_rounds: int = 2) -> str:
response = await generate_initial(task)
for round_num in range(max_rounds):
critique = await critique_response(task, response)
if critique.is_satisfactory:
break
response = await revise_response(task, response, critique.feedback)
return responseTehokkaan kritiikkikehotteen kirjoittaminen
Kritiikkikehotteessa on määriteltävä konkreettiset arviointikriteerit sen sijaan, että mallia pyydettäisiin vain ”parantamaan” vastausta. Luetelkaa tarkistettavat asiat: Onko jokainen väite totta? Vastataanko kaikkiin kysymyksen osiin? Puuttuuko jokin vaihe? Onko mukana tarpeetonta täytettä? Kritiikkikehote, jossa on selkeät tarkistuslistan kohdat, tuottaa käyttökelpoista palautetta, jota korjausvaihe voi hyödyntää suoraan.
CRITIQUE_PROMPT = '''
You are reviewing an AI-generated response to this task: {task}
Response to evaluate:
{response}
Check each criterion and provide specific feedback:
1. COMPLETENESS: Does it address all parts of the task?
2. ACCURACY: Are all factual claims correct?
3. CONCISENESS: Is there unnecessary padding or repetition?
4. FORMAT: Does it match the requested output format?
5. ACTIONABILITY: Can the user act on this response?
For each issue found, state exactly what to fix.
If the response is satisfactory on all criteria, say APPROVE.
'''Kritiikkivastauksen jäsentäminen
Jäsentäkää kritiikin tulos Pydantic-malliksi, jotta voitte päättää ohjelmallisesti, tarvitseeko vastausta muokata. is_satisfactory-kenttä määrittää silmukan lopettamisen. issues-lista kertoo muokkausvaiheelle täsmällisesti, mitä pitää korjata. severity-kentän avulla voitte ohittaa muokkauksen lievien tyyliseikkojen kohdalla ja tehdä muokkauksen aina asiavirheiden tapauksessa.
from pydantic import BaseModel
from typing import List, Literal
class Issue(BaseModel):
criterion: str
description: str
severity: Literal['critical', 'moderate', 'minor']
class Critique(BaseModel):
is_satisfactory: bool
issues: List[Issue]
overall_verdict: str
# is_satisfactory=True means no revision needed
# is_satisfactory=False means issues must be addressedMuokkauskehote
Muokkauskehote saa syötteenä alkuperäisen tehtävän, alkuperäisen vastauksen ja kritiikkipalautteen. Pyytäkää mallia tuottamaan parannettu versio, joka käsittelee erityisesti kaikki kritiikissä tunnistetut ongelmat ja säilyttää samalla alkuperäisen vastauksen oikeat osat. Sisällyttäkää aina sana 'only', jotta malli ei tee tarpeettomia muutoksia asioihin, jotka kritiikissä jo hyväksyttiin.
def build_revision_prompt(task: str, response: str, critique: Critique) -> str:
issues_text = '\n'.join(
f'- [{i.severity.upper()}] {i.criterion}: {i.description}'
for i in critique.issues
)
return f'''
Original task: {task}
Your previous response:
{response}
Issues to fix:
{issues_text}
Write an improved response that fixes ONLY the issues listed above.
Do not change parts that were not flagged as problems.
'''Itsensä korjaaminen koodin generoinnissa
Itsensä korjaaminen on erityisen tehokasta koodin generoinnissa. Kun koodi on generoitu, ajakaa sille linteri tai tyyppitarkistin, välittäkää virhetuloste takaisin mallille ja pyytäkää sitä korjaamaan virheet. Tämä suoritukseen perustuva reflektio on luotettavampaa kuin pelkkään kieleen perustuva kritiikki, koska palaute tulee objektiiviselta työkalulta eikä toisen LLM:n arviolta.
import subprocess
import sys
async def self_correct_code(task: str, max_rounds: int = 3) -> str:
code = await generate_code(task)
for _ in range(max_rounds):
# Write code to temp file and run mypy
with open('/tmp/agent_code.py', 'w') as f:
f.write(code)
result = subprocess.run(
[sys.executable, '-m', 'mypy', '/tmp/agent_code.py', '--ignore-missing-imports'],
capture_output=True, text=True
)
if result.returncode == 0:
break # No type errors
code = await fix_code(code, result.stdout + result.stderr)
return codeLiiallisen korjaamisen välttäminen
Reflektiivisten järjestelmien yleinen ongelma on liiallinen korjaaminen: malli pahentaa alkuperäistä ongelmaa yrittäessään korjata jotain muuta. Rajoittakaa muokkauksen laajuutta kirjoittamalla muokkauskehotteeseen nimenomaisesti: 'do not change anything that was not flagged.' Verratkaa muokattua vastausta myös alkuperäiseen diff-tarkistuksella — jos muokattu versio poikkeaa radikaalisti, jokin meni pieleen ja alkuperäinen kannattaa säilyttää.
from difflib import SequenceMatcher
def safe_revision(original: str, revised: str, max_change_ratio: float = 0.7) -> str:
similarity = SequenceMatcher(None, original, revised).ratio()
if similarity < (1 - max_change_ratio):
print(f'Revision changed too much (similarity: {similarity:.2f}). Keeping original.')
return original
return revisedReflektio monivaiheisissa agenttitehtävissä
Lisätkää monivaiheiseen agenttiin reflektiotarkistuspiste tietyn vaihejoukon suorittamisen jälkeen — esimerkiksi kaiken tutkimusaineiston keräämisen jälkeen mutta ennen loppuraportin kirjoittamista. Agentti tarkistaa keräämänsä tiedot, tunnistaa puutteet ja päättää, kerätäänkö lisää tietoa vai jatketaanko. Tehtävän aikainen reflektio estää agenttia siirtymästä synteesivaiheeseen puutteellisen tai ristiriitaisen näytön perusteella.
async def research_with_reflection(question: str) -> str:
# Phase 1: gather evidence
evidence = await gather_evidence(question)
# Reflection checkpoint
assessment = await assess_evidence_completeness(question, evidence)
if not assessment.is_complete:
for gap in assessment.gaps:
more_evidence = await targeted_search(gap.search_query)
evidence.extend(more_evidence)
# Phase 2: synthesize
return await synthesize_answer(question, evidence)Reflektion tulosten kirjaaminen
Kirjatkaa jokainen reflektiokierros: kritiikkipisteet, tunnistetut ongelmat ja se, ratkaistiinko ne muokkauksessa todella. Näistä tiedoista näette, ovatko reflektiokehotteet tehokkaita. Jos muokattu vastaus tuo jatkuvasti uudelleen esiin samoja ongelmia, jotka kritiikissä nostettiin esille, muokkauskehote ei ole riittävän täsmällinen. Jos useimmissa kritiikeissä lukee ensimmäisellä kierroksella 'APPROVE', alkuperäisen generoinnin laatu on jo korkea eikä reflektiosta koituva lisäkustannus välttämättä ole hyötynsä arvoinen.
import structlog
log = structlog.get_logger()
def log_reflection_round(task_id: str, round_num: int, critique: Critique, action: str):
log.info(
'reflection_round',
task_id=task_id,
round=round_num,
is_satisfactory=critique.is_satisfactory,
issue_count=len(critique.issues),
critical_issues=sum(1 for i in critique.issues if i.severity == 'critical'),
action=action # 'approved', 'revised', 'max_rounds_reached'
)Milloin reflektiota kannattaa käyttää
Reflektio lisää viivettä ja kustannuksia — kaksikierroksinen reflektio- ja muokkausprosessi vähintään kolminkertaistaa tehtävän LLM-kutsujen määrän. Käyttäkää reflektiota harkiten: aina suuririskisissä tuloksissa (esimerkiksi suoritettavassa koodissa ja merkittäviä liiketoimintapäätöksiä koskevissa vastauksissa), valinnaisesti käyttäjille näytettävissä vastauksissa ja ei koskaan sisäisissä välivaiheissa, jotka työkalu tarkistaa heti. Kustannus on perusteltu, kun laatu on nopeutta tärkeämpää.
# Reflection decision matrix:
# Task type: Use reflection?
# SQL query generation YES (run+verify)
# Final report writing YES (review before delivery)
# Tool argument prep NO (tool result verifies it)
# Short factual answer MAYBE (if accuracy is critical)
# Internal agent thought NO (intermediate, not final)
# Code generation YES (run linter/tests)
USE_REFLECTION = {'report', 'code', 'email', 'analysis'}Reflektion tehokkuuden mittaaminen
Seuratkaa, parantaako reflektio todella tuloksia, tekemällä A/B-testejä: käsitelkää 50 % tehtävistä satunnaisesti valittuna reflektion kanssa ja 50 % ilman reflektiota, ja arvioikaa sitten molemmat joukot LLM-arvioijalla. Jos reflektiota käyttävä ryhmä saa selvästi paremmat pisteet ja parannus ylittää lisäviiveen ja -kustannukset, reflektio kannattaa. Jos pisteet ovat samankaltaiset, alkuperäisen generoinnin laatu on jo riittävän korkea ja reflektio aiheuttaa vain lisäkustannuksia ilman hyötyä.
async def reflection_ab_test(tasks: list) -> dict:
import random
results = {'with_reflection': [], 'without_reflection': []}
for task in tasks:
if random.random() < 0.5:
response = await reflect_and_revise(task, max_rounds=2)
group = 'with_reflection'
else:
response = await generate_initial(task)
group = 'without_reflection'
score = await judge(task, response)
results[group].append(score.overall)
return {
'mean_with': sum(results['with_reflection']) / len(results['with_reflection']),
'mean_without': sum(results['without_reflection']) / len(results['without_reflection'])
}Pikatarkistus
Testatkaa, miten hyvin ymmärrätte agenttien itsensä korjaamisen ja reflektiiviset kehotteet.
Oppitunnin yhteenveto
Tässä oppitunnissa opitte, että reflektio- ja muokkaussilmukat parantavat tulosten laatua, koska agentti arvioi ja korjaa omat vastauksensa; konkreettiset kritiikkikriteerit tuottavat toimivaa palautetta epämääräisten parannusehdotusten sijaan; ja suoritukseen perustuva reflektio objektiivisten työkalujen, kuten linterien, avulla on erityisen tehokasta koodin generoinnissa. Seuraavaksi toteutamme agentin tarkistuspisteet ja tehtävän jatkamisen.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Itsekorjaus ja reflektiivinen kehottaminen” ilmainen?
Kyllä – oppitunnin ”Itsekorjaus ja reflektiivinen kehottaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko AI Engineering Academy-kurssin, päivitä CoddyKit PROhon. AI Engineering Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Itsekorjaus ja reflektiivinen kehottaminen”?
Toteuttakaa reflektiovaihe, jossa agentti tarkistaa oman tulosteensa alkuperäistä tavoitetta vasten, tunnistaa puutteet tai virheet ja muodostaa korjatun suunnitelman ennen uutta yritystä. Harjoittelet AI Engineering Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni AI Engineering Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin AI Engineering Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Itsekorjaus ja reflektiivinen kehottaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä AI Engineering Academy-oppitunnilla?
Kyllä. Jokainen AI Engineering Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Agentin virhetilanteiden luokittelu
- Itsekorjaus ja reflektiivinen kehottaminen
- Tarkistuspisteet ja tehtävän jatkaminen
- Ihmisen osallistumista edellyttävä eskalointi