Методы пошаговой отладки
Добавление точек останова и промежуточного вывода, а также использование отладчика в коде агента.
«Методы пошаговой отладки» — бесплатный урок AI Agents на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Отладка агентов отличается от отладки функций
У функции есть чёткие входные и выходные данные. У агента есть цикл с вызовами LLM, выполнением инструментов и изменениями истории — всё это может приводить к незаметным сбоям.
Пошаговая отладка позволяет приостановиться на каждом шаге, проверить состояние агента и точно понять, что пошло не так.
Встроенный отладчик Python: pdb
Отладчик Python pdb позволяет приостанавливать выполнение, проверять переменные и пошагово просматривать код. Вставьте import pdb; pdb.set_trace() в любом месте цикла агента, чтобы перейти в интерактивный сеанс отладки.
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})Функция breakpoint() в Python 3.7 и более поздних версиях
В Python 3.7 и более поздних версиях появилась встроенная функция breakpoint() — более удобная, чем import pdb; pdb.set_trace(). Она также учитывает переменную окружения PYTHONBREAKPOINT, которая позволяет заменить отладчик на другой.
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
Наиболее важные команды pdb для отладки циклов агента:
n— следующая строка (переход через)s— переход внутрь вызова функцииc— продолжение до следующей точки остановаp expr— вывод значения выраженияpp expr— вывод в удобном формате (для словарей и списков)l— вывод исходного кода вокруг текущей строкиq— выход из отладчика
# 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')Условные точки останова
Останавливайте выполнение только при истинности определенного условия — например, когда выбран конкретный инструмент или количество шагов стало большим. Это позволяет не останавливаться на каждой итерации длинного цикла.
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 Code для кода агента
Отладчик Python в VS Code обеспечивает визуальную пошаговую отладку с панелями просмотра переменных, стеками вызовов и выражениями для наблюдения. Настройте launch.json, чтобы запускать агента в режиме отладки.
# .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 в CLI
Добавьте флаг --debug в CLI агента. Если этот флаг установлен, он включает подробное журналирование, выводит каждый шаг и при необходимости открывает pdb при возникновении ошибок. Это позволяет выполнять отладку без изменения исходного кода.
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Пошаговое выполнение в подробном режиме
Подробный режим выводит подробную информацию о каждом шаге в стандартный вывод, позволяя отслеживать выполнение агента без отладчика. Добавьте флаг verbose=True в цикл агента.
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}Посмертная отладка с помощью pdb.post_mortem()
Если агент завершается с исключением, pdb.post_mortem() открывает отладчик в точной точке сбоя, сохраняя стек вызовов. Это незаменимо для понимания причин сбоев без необходимости воспроизводить их.
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Просмотр истории сообщений в отладчике
Во время отладки агента полезнее всего просматривать историю беседы. Используйте команду pp в pdb, чтобы вывести ее в удобном формате, или переберите ее, чтобы понять, что агент уже успел увидеть.
# 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')Пошаговая симуляция без вызовов LLM
Для быстрой итерации создайте режим симуляции, в котором Вы вручную задаете действие агента на каждом шаге. Это позволяет проверять выполнение инструментов и управление историей без вызовов API LLM.
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.'}
# ])Проверка знаний: пошаговая отладка
Проверьте, насколько хорошо Вы понимаете методы отладки кода агента.
Итоги: методы пошаговой отладки
Теперь у Вас есть полный набор средств для отладки циклов агента:
- Используйте
breakpoint()(Python 3.7+) илиimport pdb; pdb.set_trace()для интерактивной отладки - Используйте условные точки останова, чтобы останавливать выполнение только при возникновении подозрительной ситуации
- Настройте VS Code launch.json для отладки с графическим интерфейсом
- Добавьте флаги CLI
--debugи--pdb-on-errorдля отладки по требованию - Используйте
pdb.post_mortem(), чтобы просматривать сбои после их возникновения - Создайте режим симуляции для проверки логики инструментов без вызовов LLM
- Используйте подробный режим для отслеживания выполнения без приостановки
Изучай AI Agents с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 60
- Уроки
- 239
Часто задаваемые вопросы
Урок «Методы пошаговой отладки» бесплатный?
Да — полный текст урока «Методы пошаговой отладки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Методы пошаговой отладки»?
Добавление точек останова и промежуточного вывода, а также использование отладчика в коде агента. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Методы пошаговой отладки»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Распространённые сбои цикла агента
- Журналы трассировки шагов агента
- Обнаружение и остановка бесконечных циклов
- Методы пошаговой отладки