Создание AI-агентов
С нуля на коде
Проблема: Ты понимаешь концепции агентов, но как реально его построить? Какие части нужны? Как они соединяются? Это как знать, что делает машина, но не знать, как её собрать.
Решение: Сборка из компонентов
Создание агента -- как сборка робота из деталей. Каждая деталь имеет свою функцию, и вместе они создают нечто, что может думать и действовать. В основе лежит цикл ReAct -- думай, действуй, наблюдай. Инструменты подключаются через вызов функций, а фреймворки вроде LangChain предоставляют готовые строительные блоки.
Представьте это как сборку робота-ассистента:
- 1. Мозг (LLM): ИИ-модель, которая думает и решает
- 2. Инструкции (Системный промпт): Каким ассистентом он должен быть
- 3. Руки (Инструменты): Что он реально может делать в мире
- 4. Память: Как он помнит прошлые разговоры
- 5. Органы чувств (Обработка ввода): Как он понимает твои запросы
- 6. Голос (Форматирование вывода): Как он представляет ответы
Ключевые шаги создания агента
- Определи цель: Что этот агент должен делать?
- Напиши персону: Системный промпт с личностью и ограничениями
- Добавь инструменты: Функции, которые агент может вызывать
- Настрой цикл: Как агент думает → действует → наблюдает
- Обработай ошибки: Что происходит, когда что-то идёт не так
Интересный факт: Простейший полезный агент можно создать примерно в 50 строках кода! Основной цикл прост: получить ввод → отправить в LLM с инструментами → выполнить вызовы → повторить. Всё остальное — это улучшение этого цикла: безопаснее, умнее, надёжнее.
Попробуйте сами!
Используй интерактивный конструктор ниже, чтобы собрать своего агента шаг за шагом. Добавляй компоненты, настраивай их и смотри, как они работают вместе!
Попробуй сам
Интерактивное демо этой техники
Создай простого агента, который может отвечать на вопросы о файлах в директории.
import os
def answer_question(directory, question):
files = os.listdir(directory)
if "сколько" in question.lower():
return f"В директории {len(files)} файлов"
elif "список" in question.lower():
return ", ".join(files)
else:
return "Не понимаю вопрос"
import os
from openai import OpenAI
# Определяем инструменты
tools = {
"list_files": lambda dir: os.listdir(dir),
"read_file": lambda path: open(path).read(),
"file_info": lambda path: {
"size": os.path.getsize(path),
"modified": os.path.getmtime(path)
}
}
tool_descriptions = [
{"name": "list_files", "description": "Список файлов в директории", "params": ["directory"]},
{"name": "read_file", "description": "Чтение файла", "params": ["filepath"]},
{"name": "file_info", "description": "Информация о файле", "params": ["filepath"]}
]
def run_agent(question, directory):
client = OpenAI()
messages = [
{"role": "system", "content": f"Ты агент с доступом к директории {directory}. Используй инструменты для ответа. Формат: ACTION: tool_name(args) или ANSWER: финальный ответ."},
{"role": "user", "content": question}
]
for step in range(5): # макс 5 шагов
response = client.chat.completions.create(
model="gpt-4", messages=messages
)
text = response.choices[0].message.content
if "ANSWER:" in text:
return text.split("ANSWER:")[1].strip()
if "ACTION:" in text:
action = parse_action(text)
result = tools[action.name](*action.args)
messages.append({"role": "assistant", "content": text})
messages.append({"role": "user", "content": f"Observation: {result}"})
return "Не удалось найти ответ"
Монолитный подход требует if/else для каждого типа вопроса. Агентный цикл позволяет LLM самому выбирать инструменты, что делает систему гибкой и расширяемой.
Создайте бесплатный аккаунт для решения челленджей
3 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения