0Pricing
AI Agents · Урок

Реализация ReAct с нуля

Напишите реализацию на Python длиной 100 строк без LangChain: разбирайте строки Action, запускайте инструменты и повторяйте цикл до Final Answer.

«Реализация ReAct с нуля» — бесплатный урок AI Agents на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Создайте цикл самостоятельно

Вы можете написать ReAct примерно в 100 строках Python — фреймворк не нужен. Однократная самостоятельная реализация поможет понять, что именно скрывают фреймворки.

Step 1: Define Tools

import json, math

def calculator(expression: str) -> str:
    try:
        return str(eval(expression, {'__builtins__': {}}, vars(math)))
    except Exception as e:
        return f'Error: {e}'

def search_wikipedia(query: str) -> str:
    # placeholder — call a real search API
    return f'Wikipedia summary for: {query}'

TOOLS = {
    'calculator': calculator,
    'search_wikipedia': search_wikipedia,
}

print(calculator('2 + 2 * sqrt(16)'))
print(search_wikipedia('agents'))

Step 2: Tool Schemas

schemas = [
    {'type': 'function', 'function': {
        'name': 'calculator',
        'description': 'Evaluate a math expression like 2 + 2 * sqrt(16)',
        'parameters': {'type': 'object', 'properties': {'expression': {'type': 'string'}}, 'required': ['expression']}
    }},
    {'type': 'function', 'function': {
        'name': 'search_wikipedia',
        'description': 'Search Wikipedia and return a summary',
        'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}
    }}
]
import json
print(json.dumps(schemas, indent=2))

Step 3: System Prompt

system = '''
You are a research assistant. Use the available tools when needed.
Think step by step. If you have enough information, give a final answer.
'''
print(system.strip())

Step 4: The Loop

from openai import OpenAI
client = OpenAI()

def react(question, max_steps=10):
    messages = [
        {'role': 'system', 'content': system},
        {'role': 'user', 'content': question}
    ]
    for step in range(max_steps):
        r = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages,
            tools=schemas,
        )
        msg = r.choices[0].message
        messages.append(msg)
        if not msg.tool_calls:
            return msg.content
        for tc in msg.tool_calls:
            args = json.loads(tc.function.arguments)
            try:
                result = TOOLS[tc.function.name](**args)
            except Exception as e:
                result = f'Tool error: {e}'
            messages.append({'role': 'tool', 'tool_call_id': tc.id, 'content': str(result)})
    return 'Step limit reached.'

Step 5: Run It

answer = react('What is the population of Tokyo times the square root of pi?')
print(answer)

Шаг 6: добавьте журналирование

Записывайте каждый шаг для отладки:

def react_verbose(question, max_steps=10):
    messages = [...]
    for step in range(max_steps):
        r = client.chat.completions.create(model='gpt-4o-mini', messages=messages, tools=schemas)
        msg = r.choices[0].message
        print(f'[step {step}] thought: {msg.content}')
        if msg.tool_calls:
            for tc in msg.tool_calls:
                print(f'[step {step}] action: {tc.function.name}({tc.function.arguments})')
        ...

Шаг 7: счётчик шагов как инструмент

Некоторые агенты добавляют количество шагов в системную подсказку, чтобы модель знала, когда завершить работу:

system = f'You have at most {MAX_STEPS} steps. Step {current_step}/{MAX_STEPS}. ...'

Шаг 8: формат итогового ответа

Если Вам нужен структурированный вывод, принудительно выполните последний вызов инструмента:

tools.append({'type': 'function', 'function': {
    'name': 'final_answer',
    'description': 'Submit the final answer to the user.',
    'parameters': {'type': 'object', 'properties': {'answer': {'type': 'string'}}, 'required': ['answer']}
}})
# Loop terminates when final_answer is called.

Шаг 9: ошибки инструментов

Всегда возвращайте ошибки как результаты инструментов, чтобы агент мог восстановить работу:

try:
    result = TOOLS[name](**args)
except Exception as e:
    result = f'TOOL ERROR: {type(e).__name__}: {e}'
# Model sees the error and can try a different approach.

Шаг 10: параллельные вызовы инструментов

Если в msg.tool_calls есть несколько записей, выполните их параллельно:

import asyncio

async def run_tools(tool_calls):
    async def run_one(tc):
        args = json.loads(tc.function.arguments)
        return tc.id, TOOLS[tc.function.name](**args)
    return await asyncio.gather(*[run_one(tc) for tc in tool_calls])

Шаг 11: ограничьте размер разговора

Даже при ограничении числа шагов списки сообщений могут разрастись. Между ходами сокращайте их по количеству токенов:

if total_tokens(messages) > 6000:
    messages = trim_messages(messages)

Шаг 12: подготовка к рабочей среде

Для рабочей среды добавьте: ограничения времени на вызовы инструментов, квоты для каждого инструмента, повторы с увеличивающейся задержкой при сбоях API и полное журналирование трассировок. Но описанный выше цикл — это Ваш каркас.

Обработка ошибок инструментов

Что следует делать, если инструмент вызывает исключение?

Повторение

ReAct примерно в 80 строках: список сообщений + цикл while + таблица диспетчеризации. Фреймворки добавляют удобства, но основа именно такова.

Часто задаваемые вопросы

Урок «Реализация ReAct с нуля» бесплатный?

Да — полный текст урока «Реализация ReAct с нуля» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.

Чему я научусь в уроке «Реализация ReAct с нуля»?

Напишите реализацию на Python длиной 100 строк без LangChain: разбирайте строки Action, запускайте инструменты и повторяйте цикл до Final Answer. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Agents?

Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Реализация ReAct с нуля»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Agents?

Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. ReAct: шаблон «рассуждение + действие»
  2. Реализация ReAct с нуля
  3. Распространённые наборы инструментов (веб, калькулятор, RAG)
  4. Обнаружение ошибок инструментов и восстановление
← Назад к AI Agents