Tekoälyagentit · Oppitunti

Vaiheittaisen vianetsinnän tekniikat

Keskeytyskohtien ja välitulosteiden lisääminen sekä debuggerin käyttäminen agenttikoodissa

Oppitunti 4/413 vaihetta

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 ipdb

pdb-komentojen viite

Tärkeimmät pdb-komennot agenttisilmukoiden virheenkorjaukseen:

  • n — seuraava rivi (step over)
  • s — siirry funktion kutsuun
  • c — jatka seuraavaan keskeytyskohtaan asti
  • p expr — tulosta lausekkeen arvo
  • pp expr — tulosta jäsennellysti (sanakirjoille ja listoille)
  • l — listaa nykyisen rivin ympärillä oleva lähdekoodi
  • q — 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:
        raise

Vaiheittainen 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-error

Viestihistorian 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) tai import 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ä
Aloita maksutta

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

  1. Agenttisilmukoiden yleiset virheet
  2. Agentin vaiheiden jälkilokitus
  3. Loputtomien silmukoiden tunnistaminen ja katkaiseminen
  4. Vaiheittaisen vianetsinnän tekniikat
← Takaisin: Tekoälyagentit