Створення робочого AI-агента: Практичний глосарій
Що насправді являє собою AI-агент, чим він відрізняється від чатбота та які компоненти потрібні для створення такого, що працює.
AI-агент — це програма, яка приймає мету, вирішує послідовність дій і виконує ці дії за допомогою інструментів, поки мета не буде досягнута або вона не здасться. Це відрізняється від чатбота, який просто відповідає на повідомлення. Агент планує, викликає функції, перевіряє результати і коригує дії. Якщо ви використовували лише ChatGPT через браузер, створення першого агента — це місце, де модель перестає бути генератором тексту і стає компонентом в більшій системі.
Основний цикл
Кожен агент, незалежно від того, як його позиціонують, запускає якусь версію того самого циклу: спостереження, роздум, дія, повтор. Конкретно:
- Агент отримує завдання ("знайти найдешевший авіарейс до Лісабона в наступному місяці та написати резюме в листі").
- Він викликає LLM з завданням плюс описом доступних інструментів.
- Модель повертає або остаточну відповідь, або виклик інструменту, як-от
search_flights(destination="Lisbon", month="2025-06"). - Ваш код виконує цю функцію, отримує реальний результат і передає його назад в контекст моделі.
- Модель вирішує, що робити далі: викликати інший інструмент, попросити уточнення або завершити роботу.
Цей паттерн часто називають ReAct loop (reason plus act), і він є основою фреймворків на кшталт LangChain's agent executors, LlamaIndex agents та API функційних викликів OpenAI. Ви можете реалізувати все це самостійно менше ніж за 100 рядків Python з просто LLM API та while циклом — фреймворки додають зручність, а не магію.
Інструменти — ось що робить це агентом
Модель без інструментів може лише говорити. Дайте їй функції — і вона зможе діяти. Інструменти — це зазвичай звичайні Python-функції, обгорнені схемою, яка описує їх ім'я, параметри і призначення, щоб модель знала, коли і як їх викликати. Приклад:
def get_weather(city: str) -> str:
"""Return current weather for a given city."""
resp = requests.get(f"https://api.weather.example/v1/{city}")
return resp.json()["summary"]
З function-calling OpenAI ви передаєте JSON-схему поряд з цією функцією, і модель видає структурований виклик на кшталт {"name": "get_weather", "arguments": {"city": "Lisbon"}} замість вільного тексту. Ваш код розбирає його, запускає реальну функцію і повертає результат як нове повідомлення в розмові. Повторюйте, поки модель не матиме достатньо інформації для відповіді.
Пам'ять і стан
Одиничний виклик API не має пам'яті за межами його контекстного вікна. Агентам потрібен явний стан: список повідомлень, що постійно поповнюється (історія розмови), і часто окремий сховище для довгострокових фактів. Для коротких завдань достатньо Python-списку словників, що представляють розмову. Для агентів, які мають пам'ятати речі в проміжку між сеансами, ви звернетеся до векторної бази даних (Chroma, Pinecone, Qdrant) для зберігання та отримання релевантної минулої інформації через embedding'и.
Не переускладнюйте це на початку. Дивна кількість проектів "агент" не вдається не тому, що LLM слаба, а тому, що управління станом халатне: дублювання повідомлень, необмежене зростання контексту або втрата слідування, який виклик інструменту належить якому результату.
Мінімальний робочий приклад
Ось структура скупого агента, що використовує API OpenAI, без фреймворку:
messages = [{"role": "user", "content": "What's the weather in Lisbon?"}]
while True:
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=[weather_tool_schema],
)
msg = response.choices[0].message
if msg.tool_calls:
for call in msg.tool_calls:
result = get_weather(**json.loads(call.function.arguments))
messages.append(msg)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": result,
})
else:
print(msg.content)
break
Це справжній, працюючий агент. Все інше — стратегії планування, координація багатоагентів, retrieval-конвеєри — будується на цьому циклі.
Де він ламається
Агенти вийшкодять передбачуваним чином: нескінченні цикли викликів інструментів, коли модель не може розібрати, що вона вдалася, галюцинованих аргументів функцій та розбіганих витрат від переповторення дорогих інструментів. Захистіться від циклів жорстким ліміту ітерацій (скажімо, 10 кроків) і логуйте кожен виклик інструменту під час розробки. Перевіряйте аргументи перед виконанням чогось, що торкається реальної системи — агент, що може надсилати листи або виконувати shell-команди, потребує такого ж очищення вводу, яке ви б застосували до кода, виходу до користувача, тому що LLM — це, фактично, ненадійний користувач, який генерує цей вхід.
Куди йти далі
Коли цикл працює, починаються цікаві проблеми: вибір між одноагентним та багатоагентним дизайном, вирішення того, скільки автономії дати, і надійне тестування агентів, коли їхній вихід не детермінований. Траки AI та Python в Korra Studio охоплюють retrieval-augmented generation, дизайн підказок та паттерни tool-calling глибше, якщо ви хочете продовжити розбудову звідси.
Написано з допомогою штучного інтелекту, перевірено та опубліковано Мішалем Пільчем (CISSP), Korra Studio.
Це одна замітка з бази знань Korra Studio — платформа поєднує кожну тему з 1-на-1 менторингом.
Початок безплатноarrow_forward