Vaiheittaisen vianetsinnän tekniikat
Keskeytyskohtien ja välitulosteiden lisääminen sekä debuggerin käyttäminen agenttikoodissa
Vaiheittaisen vianetsinnän tekniikat on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 4/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 Tekoälyagentit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Agenttien virheenkorjaus eroaa funktioiden virheenkorjauksesta
Funktiolla on selkeä syöte ja tuloste. Agentilla on LLM-kutsuja, työkalujen suorituksia ja historian muutoksia sisältävä silmukka — ja kaikki nämä voivat mennä hienovaraisilla tavoilla pieleen.
Vaiheittainen virheenkorjaus antaa teidän pysäyttää suorituksen kussakin vaiheessa, tutkia agentin tilaa ja ymmärtää tarkalleen, mikä meni pieleen.
Pythonin sisäänrakennettu virheenkorjain: pdb
Pythonin virheenkorjaimella pdb voitte keskeyttää suorituksen, tarkastella muuttujia ja käydä koodia läpi rivi riviltä. Lisätkää import pdb; pdb.set_trace() mihin tahansa kohtaan agenttisilmukkaa siirtyäksenne vuorovaikutteiseen virheenkorjausistuntoon.
import pdb
def run_agent_loop(query: str):
history = []
for step in range(1, 21):
action = decide_action(query, history)
# Drop into debugger at step 3 to inspect state
if step == 3:
import pdb; pdb.set_trace()
# At this point you can:
# (Pdb) print(action) -- inspect current action
# (Pdb) print(history) -- inspect full history
# (Pdb) n -- next line
# (Pdb) c -- continue execution
# (Pdb) q -- quit
result = execute_tool(action['tool'], action['args'])
history.append({'tool': action['tool'], 'result': result})Python 3.7+: breakpoint()-funktio
Python 3.7+ sisältää sisäänrakennetun breakpoint()-funktion, joka on selkeämpi kuin import pdb; pdb.set_trace(). Se noudattaa myös PYTHONBREAKPOINT-ympäristömuuttujaa, jonka avulla voitte vaihtaa toiseen virheenkorjaimeen.
def run_agent_loop(query: str):
history = []
for step in range(1, 21):
action = decide_action(query, history)
breakpoint() # cleaner than pdb.set_trace()
result = execute_tool(action['tool'], action['args'])
history.append({'tool': action['tool'], 'result': result})
# Disable all breakpoints without changing code:
# PYTHONBREAKPOINT=0 python agent.py
# Use ipdb (better UI) instead:
# PYTHONBREAKPOINT=ipdb.set_trace python agent.py
# pip install ipdbpdb-komentojen viite
Tärkeimmät pdb-komennot agenttisilmukoiden virheenkorjaukseen:
n— seuraava rivi (step over)s— siirry funktion kutsuunc— jatka seuraavaan keskeytyskohtaan astip expr— tulosta lausekkeen arvopp expr— tulosta jäsennellysti (sanakirjoille ja listoille)l— listaa nykyisen rivin ympärillä oleva lähdekoodiq— lopeta virheenkorjain
# Typical pdb debugging session for an agent loop:
# (Pdb) p step -- print current step number: 3
# (Pdb) pp action -- pretty-print the action dict
# {'type': 'tool', 'tool': 'search_web', 'args': {'query': 'Python docs'}}
# (Pdb) pp history -- see full conversation so far
# (Pdb) p len(history) -- count messages: 6
# (Pdb) n -- execute next line
# (Pdb) p result -- see tool result
# (Pdb) c -- continue to next breakpoint
print('pdb lets you inspect agent state at any point in the loop')Ehdolliset keskeytyskohdat
Pysäyttäkää suoritus vain, kun tietty ehto täyttyy — esimerkiksi vain silloin, kun tietty työkalu valitaan tai askelten määrä on suuri. Näin vältätte pysähtymisen pitkän silmukan jokaisella iteraatiolla.
def run_agent_loop(query: str):
history = []
for step in range(1, 21):
action = decide_action(query, history)
# Break only if the agent picks the wrong tool
if action.get('tool') == 'calculate' and 'weather' in query.lower():
breakpoint() # This is suspicious — weather shouldn't use calculator
# Break only if we're near the step limit
if step >= 18:
breakpoint() # Why hasn't the agent concluded yet?
result = execute_tool(action['tool'], action['args'])
history.append({'tool': action['tool'], 'result': result})VS Coden virheenkorjain agenttikoodille
VS Coden Python-virheenkorjain tarjoaa visuaalisen vaiheittaisen suoritusnäkymän, muuttujien tarkastelupaneelit, kutsupinon ja tarkkailulausekkeet. Määrittäkää launch.json, jotta agentti voidaan suorittaa virheenkorjaustilassa.
# .vscode/launch.json
# {
# 'version': '0.2.0',
# 'configurations': [
# {
# 'name': 'Debug Agent',
# 'type': 'python',
# 'request': 'launch',
# 'program': 'agent_cli.py',
# 'args': ['--query', 'What is the weather in Paris?'],
# 'env': {
# 'OPENAI_API_KEY': 'your-key',
# 'LOG_LEVEL': 'DEBUG'
# },
# 'console': 'integratedTerminal'
# }
# ]
# }
# Set breakpoints by clicking the left margin in VS Code
# Press F5 to start debugging, F10 to step over, F11 to step into
print('VS Code debugger provides visual debugging with no code changes needed')--debug-lipun lisääminen CLI:hin
Lisätkää agentin CLI:hin --debug-lippu. Kun lippu on käytössä, se ottaa käyttöön yksityiskohtaisen lokituksen, tulostaa jokaisen vaiheen ja siirtyy haluttaessa pdb-virheenkorjaimeen virheiden yhteydessä. Näin voitte korjata virheitä muuttamatta lähdekoodia.
import argparse
import logging
parser = argparse.ArgumentParser()
parser.add_argument('--query', required=True)
parser.add_argument('--debug', action='store_true', help='Enable step-by-step debugging output')
parser.add_argument('--pdb-on-error', action='store_true', help='Drop into pdb on any exception')
args = parser.parse_args()
if args.debug:
logging.basicConfig(level=logging.DEBUG)
print('[DEBUG MODE] Step-by-step output enabled')
try:
result = run_agent(args.query, verbose=args.debug)
print(result['answer'])
except Exception as e:
if args.pdb_on_error:
import pdb; pdb.post_mortem() # debug the crash
else:
raiseVaiheittainen suoritus yksityiskohtaisessa tilassa
Yksityiskohtainen tila tulostaa jokaisesta vaiheesta tarkat tiedot stdout-tulosteeseen, joten voitte seurata agentin suoritusta ilman virheenkorjainta. Lisätkää agenttisilmukkaan verbose=True-lippu.
import json
def run_agent(query: str, verbose: bool = False) -> dict:
history = []
for step in range(1, 21):
action = decide_action(query, history)
if verbose:
print(f'\n--- Step {step} ---')
print(f'Action type: {action["type"]}')
if action['type'] == 'tool':
print(f'Tool: {action["tool"]}')
print(f'Args: {json.dumps(action["args"], indent=2)}')
if action['type'] == 'final_answer':
if verbose:
print(f'\nFinal answer: {action["answer"]}')
return {'status': 'ok', 'answer': action['answer']}
result = execute_tool(action['tool'], action['args'])
if verbose:
print(f'Result: {str(result)[:200]}')
history.append({'tool': action['tool'], 'result': result})
return {'status': 'max_steps', 'answer': None}Jälkikäteinen virheenkorjaus pdb.post_mortem()-funktion avulla
Kun agentti kaatuu poikkeukseen, pdb.post_mortem() avaa virheenkorjaimen täsmälleen siinä kohdassa, jossa virhe tapahtui, ja säilyttää kutsupinon. Tästä on paljon hyötyä kaatumisten ymmärtämisessä ilman, että niitä tarvitsee toistaa.
import pdb
import sys
import traceback
def run_agent_with_postmortem(query: str, debug: bool = False) -> dict:
try:
return run_agent(query)
except Exception as e:
if debug:
print(f'\nAgent crashed: {e}')
traceback.print_exc()
print('\nDropping into post-mortem debugger...')
pdb.post_mortem() # opens debugger at the crash site
return {'status': 'crashed', 'error': str(e)}
else:
raise
# Usage:
# python agent.py --query 'test' --pdb-on-errorViestihistorian tarkastelu virheenkorjaimessa
Hyödyllisin asia agentin virheenkorjauksen aikana tarkasteltavaksi on keskusteluhistoria. Tulostakaa se jäsennellysti pdb:n pp-komennolla tai käykää se läpi ymmärtääksenne, mitä agentti on tähän mennessä nähnyt.
# Inside a pdb session, common inspection commands:
# Print the full history:
# (Pdb) pp history
# Print only user and assistant messages:
# (Pdb) pp [m for m in history if m['role'] in ('user', 'assistant')]
# Count messages:
# (Pdb) p len(history)
# Find tool calls in history:
# (Pdb) pp [m for m in history if m.get('role') == 'tool']
# Print the last message:
# (Pdb) pp history[-1]
# Print total token estimate (rough):
# (Pdb) p sum(len(str(m)) for m in history)
print('History inspection is the key to understanding agent state')Vaiheittainen simulointi ilman LLM-kutsuja
Nopeaa iterointia varten rakentakaa simulointitila, jossa määritätte manuaalisesti agentin kussakin vaiheessa suorittaman toiminnon. Näin voitte testata työkalujen suoritusta ja historiankäsittelyä ilman LLM-API-kutsuja.
def run_agent_simulation(query: str, scripted_actions: list) -> dict:
'Simulate agent steps without LLM calls, using pre-defined actions'
history = []
for step, action in enumerate(scripted_actions, 1):
print(f'Step {step}: {action}')
if action['type'] == 'final_answer':
return {'status': 'ok', 'answer': action['answer'], 'steps': step}
result = execute_tool(action['tool'], action['args'])
print(f' Result: {str(result)[:100]}')
history.append({'tool': action['tool'], 'result': result})
return {'status': 'script_exhausted', 'history': history}
# Test tool execution logic without any LLM:
# result = run_agent_simulation('test', [
# {'type': 'tool', 'tool': 'search_web', 'args': {'query': 'Python'}},
# {'type': 'final_answer', 'answer': 'Python is a programming language.'}
# ])Tietotesti: vaiheittainen virheenkorjaus
Testatkaa, miten hyvin ymmärrätte agenttikoodin virheenkorjaustekniikat.
Kertaus: vaiheittaisen virheenkorjauksen tekniikat
Teillä on nyt kattava työkalupakki agenttisilmukoiden virheenkorjaukseen:
- Käyttäkää
breakpoint()-funktiota (Python 3.7 tai uudempi) taiimport pdb; pdb.set_trace()-kutsua vuorovaikutteiseen virheenkorjaukseen - Käyttäkää ehdollisia keskeytyskohtia pysäyttääksenne suorituksen vain, kun jotain epäilyttävää tapahtuu
- Määrittäkää VS Code -ohjelman launch.json graafista käyttöliittymää käyttävää virheenkorjausta varten
- Lisätkää
--debug- ja--pdb-on-error-CLI-liput tarvittaessa tehtävää virheenkorjausta varten - Käyttäkää
pdb.post_mortem()-funktiota kaatumisten tarkasteluun niiden tapahduttua - Rakentakaa simulointitila työkalulogiikan testaamiseen ilman LLM-kutsuja
- Käyttäkää yksityiskohtaista tilaa suorituksen seuraamiseen ilman keskeytyksiä
Opi Tekoälyagentit 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
- 60
- Oppitunnit
- 239
Usein kysytyt kysymykset
Onko oppitunti ”Vaiheittaisen vianetsinnän tekniikat” ilmainen?
Kyllä – oppitunnin ”Vaiheittaisen vianetsinnän tekniikat” 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 Tekoälyagentit-kurssin, päivitä CoddyKit PROhon. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Vaiheittaisen vianetsinnän tekniikat”?
Keskeytyskohtien ja välitulosteiden lisääminen sekä debuggerin käyttäminen agenttikoodissa Harjoittelet Tekoälyagentit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyagentit-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyagentit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Vaiheittaisen vianetsinnän tekniikat”-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ä Tekoälyagentit-oppitunnilla?
Kyllä. Jokainen Tekoälyagentit-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
- Agenttisilmukoiden yleiset virheet
- Agentin vaiheiden jälkilokitus
- Loputtomien silmukoiden tunnistaminen ja katkaiseminen
- Vaiheittaisen vianetsinnän tekniikat