ГлавнаяБлогСоздай ИИ-агента на Python за 80 строк кода
AI / Нейросети

Создай ИИ-агента на Python за 80 строк кода

Разберём, как создать ИИ-агента без фреймворков на Python. Напишем агента для ревью кода в 80 строках. Попробуйте сами!

Al
Редакция Algolitalgolit.ru
8 мин чтения23 июля 2026 г.

Зачем писать ИИ-агента самому, если есть фреймворки?

Фреймворки вроде LangChain или CrewAI кажутся магией, но на деле они просто упрощают память, вызов инструментов и повторные попытки. Как только вы поймёте механизм, вы сможете решать, когда фреймворк действительно нужен. А ещё — вы сможете написать своего агента примерно за 80 строк кода на Python. Давайте сделаем это!

Что такое ИИ-агент на самом деле?

Агент — это просто цикл, который общается с LLM и выполняет инструменты. Вместо бесконечного while мы используем for с лимитом итераций, чтобы не потратить все токены. В основе лежит простая идея: отправляем модели сообщение и список доступных инструментов, получаем ответ, если модель просит вызвать инструмент — вызываем и отправляем результат обратно. Повторяем, пока модель не вернёт финальный текст.

Знакомьтесь: Стив — ревьюер кода

Стив — сеньор-разработчик с 15-летним стажем. Он саркастичен, но точен. Он просматривает локальный git diff и даёт советы. Мы написали его на Python, используя Gemini API (дешёвые токены).

Архитектура агента за 80 строк

Вот основной цикл:

import google.generativeai as genai

# Настройка модели
genai.configure(api_key='YOUR_API_KEY')
model = genai.GenerativeModel('gemini-2.5-flash')

# Инструменты, которые может вызывать агент
tools = [
    {
        'name': 'get_diff',
        'description': 'Получить git diff текущего репозитория',
        'parameters': {}
    },
    {
        'name': 'get_file',
        'description': 'Прочитать файл из репозитория',
        'parameters': {'path': {'type': 'string'}}
    },
    {
        'name': 'list_files',
        'description': 'Список файлов в директории',
        'parameters': {'path': {'type': 'string'}}
    }
]

def agent_loop(user_message):
    max_iterations = 10
    history = [{'role': 'user', 'parts': [{'text': user_message}]}]
    
    for _ in range(max_iterations):
        # Отправляем историю и инструменты модели
        response = model.generate_content(
            contents=history,
            tools=tools
        )
        
        # Проверяем, есть ли запрос на вызов инструмента
        if response.candidates[0].content.parts[0].function_call:
            func_call = response.candidates[0].content.parts[0].function_call
            tool_name = func_call.name
            args = func_call.args
            
            # Выполняем инструмент локально
            if tool_name == 'get_diff':
                result = get_git_diff()
            elif tool_name == 'get_file':
                result = read_file(args['path'])
            elif tool_name == 'list_files':
                result = list_directory(args['path'])
            else:
                result = 'Неизвестный инструмент'
            
            # Добавляем ответ инструмента в историю
            history.append({
                'role': 'user',
                'parts': [{
                    'function_response': {
                        'name': tool_name,
                        'response': {'result': result}
                    }
                }]
            })
        else:
            # Если нет вызова инструмента — это финальный ответ
            return response.text
    
    return 'Превышено количество итераций'

Вот и всё! Осталось реализовать функции get_git_diff, read_file и list_directory — они тривиальны. Добавим системный промпт для Стива:

system_instruction = """Ты — Стив, сеньор-разработчик с 15-летним опытом. Твоя задача — ревьюить код. Будь саркастичным, но конструктивным."""

Теперь объединим всё в одном файле agent.py:

import subprocess
import os

def get_git_diff():
    result = subprocess.run(['git', 'diff'], capture_output=True, text=True)
    return result.stdout

def read_file(path):
    with open(path, 'r') as f:
        return f.read()

def list_directory(path):
    return os.listdir(path)

# Основной запуск
if __name__ == '__main__':
    user_msg = 'Проверь текущий git diff'
    review = agent_loop(user_msg)
    print(review)

Готово! Агент Стив готов к работе.

Что дальше?

Теперь вы знаете, как устроен ИИ-агент изнутри. Вы можете расширить его: добавить инструменты для работы с MCP, заменить облачную модель на локальную (например, Llama), или улучшить обработку ошибок. Попробуйте запустить этого агента у себя и поэкспериментируйте с промптом.

Практический вывод

Не бойтесь писать своих агентов с нуля. Фреймворки удобны, но понимание основ даёт вам контроль и гибкость. Начните с малого — напишите агента для своей задачи прямо сейчас.

#ИИ-агент#Python#Gemini API#ревью кода#агент без фреймворка
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →