Туториал 1: Первый агент за 30 минут
Создаём ReAct-агента, который ищет информацию в интернете и отвечает на вопросы.
Без фреймворков — только Python + Ollama.
← Туториалы · Команда агентов → · 🇬🇧 English
Что вы сделаете
Агента, который:
- Получает вопрос пользователя
- Решает, нужно ли искать информацию
- Если нужно — ищет (имитация поиска)
- Формулирует ответ на основе найденного
Не установили Ollama? Сначала basics/ или getting-started.md — установка за 10 минут.
Не знакомы с AI-терминами? basics/glossary.ru.md — словарь на 35 терминов.
Шаг 1: Проверяем окружение
# Проверьте, что Ollama работает
curl http://localhost:11434/api/version
# Убедитесь, что модель скачана
ollama pull qwen3.5:4b
Шаг 2: Пишем ядро агента
Создайте файл my_first_agent.py:
import requests
import json
OLLAMA_API = "http://localhost:11434/api/chat"
MODEL = "qwen3.5:4b"
def search_web(query: str) -> str:
"""
Имитация поиска в интернете.
В реальном проекте здесь был бы вызов Google Search API,
DuckDuckGo или векторного поиска.
"""
database = {
"погода москва": "В Москве сейчас +18°C, облачно",
"погода лондон": "В Лондоне +15°C, дождь",
"столица франции": "Столица Франции — Париж",
"python создатель": "Python создал Гвидо ван Россум в 1991 году",
"что такое ai агент": (
"AI-агент — это программа, которая использует языковую модель "
"для принятия решений и вызова инструментов"
),
}
# Ищем по ключевым словам
for key, value in database.items():
if key in query.lower():
return value
return f"Информация по запросу '{query}' не найдена в локальной БД"
# Описываем инструмент для модели
TOOLS = [
{
"type": "function",
"function": {
"name": "search_web",
"description": (
"Поиск информации в интернете. "
"Используй когда нужно узнать факты, погоду, даты."
),
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Поисковый запрос"
}
},
"required": ["query"]
}
}
}
]
def agent_loop(user_input: str, max_steps: int = 5) -> str:
"""
ReAct-цикл агента:
1. Спросить модель
2. Если модель вызывает инструмент — выполнить
3. Вернуть результат модели
4. Повторять, пока модель не ответит
"""
messages = [
{
"role": "system",
"content": (
"Ты — полезный ассистент. Если тебе нужно узнать "
"какую-то информацию — используй search_web. "
"Не угадывай факты, лучше поищи."
)
},
{"role": "user", "content": user_input}
]
for step in range(max_steps):
print(f"\n [Шаг {step + 1}] Отправляю запрос модели...")
response = requests.post(OLLAMA_API, json={
"model": MODEL,
"messages": messages,
"tools": TOOLS,
"stream": False
})
msg = response.json()["message"]
messages.append(msg)
# Модель хочет вызвать инструмент?
if msg.get("tool_calls"):
for tc in msg["tool_calls"]:
name = tc["function"]["name"]
args = json.loads(tc["function"]["arguments"])
print(f" [Шаг {step + 1}] Вызываю {name}({args})")
# Выполняем инструмент
result = search_web(**args)
print(f" [Шаг {step + 1}] Результат: {result}")
messages.append({
"role": "tool",
"name": name,
"content": json.dumps({"result": result})
})
else:
# Модель решила ответить
answer = msg["content"]
print(f" [Шаг {step + 1}] Ответ модели получен")
return answer
return "Агент не смог выполнить задачу за отведённое число шагов"
# === Точка входа ===
if __name__ == "__main__":
print("🧠 Мой первый AI-агент")
print("=" * 40)
while True:
user_input = input("\n❓ Спроси что-нибудь (или 'exit'): ")
if user_input.lower() == "exit":
break
result = agent_loop(user_input)
print(f"\n📋 Ответ: {result}")
Шаг 3: Запускаем
python my_first_agent.py
Попробуйте спросить:
- «Какая погода в Москве?»
- «Кто создал Python?»
- «Что такое AI-агент?»
- «Сколько будет 2+2?» (агент ответит без поиска)
Шаг 4: Что вы увидите
🧠 Мой первый AI-агент
❓ Спроси что-нибудь (или 'exit'): Какая погода в Москве?
[Шаг 1] Отправляю запрос модели...
[Шаг 1] Вызываю search_web({'query': 'погода москва'})
[Шаг 1] Результат: В Москве сейчас +18°C, облачно
[Шаг 2] Отправляю запрос модели...
[Шаг 2] Ответ модели получен
📋 Ответ: В Москве сейчас +18°C, облачно.
Это комфортная температура для прогулок.
Как это работает
Вы: «Какая погода в Москве?»
1. Модель получает вопрос + описание инструмента search_web
2. Модель решает: «Нужно поискать» → вызывает search_web(query="погода москва")
3. Система выполняет search_web, возвращает результат
4. Модель получает результат → формулирует ответ
5. Модель решает: «Данных достаточно» → отвечает пользователю
Что дальше
Теперь у вас есть работающий агент! Дальше:
- Замените
search_webна реальный API — DuckDuckGo, Google, или векторный поиск - Добавьте больше инструментов — калькулятор, чтение файлов, перевод
- Соберите команду агентов → 02-agent-team.md
Полный код
Весь код этого туториала — один файл my_first_agent.py (100 строк).
Это минимальная реализация агента, которая даёт понимание, как всё работает «под капотом».
В разделе: 01-first-agent · 02-agent-team · 03-coding-agent
Связанные разделы: AI-агенты · Нулевой уровень · Локальные модели
Навигация: ← Туториалы · ↑ На главную · 🇬🇧 English