Агенты прасцей: інструменты, сістэмныя промпты і цыкл «думка–дзеянне»
Уводзіны для пачаткоўцаў у тое, як працуюць AI-агенты: чаму чат-мадэлі забываюць, як інструменты апісваюцца для LLM, сістэмныя промпты, ReAct, агенты з кодам і назіранні.
Сучасныя агенты ШЫ базуюцца на некалькіх основных ідэях: інструментах, запрошэнні да сістэмы і павтаральным цыкле разумовых працэй, дзеянняў і абсалютавання. Колі гэтыя элементы з’еднаюцца, большасць фрэймворкаў агентаў выглядае як варыяцыі ўнутрь адной тэмы. Наступныя раздэлы ствараюць цэй картэнкі з самага начала, пачынаючы з таго, чым на самай працэ ёсць агент.
Што такое агент
Агент — гэта сістэма, у якой мадэль ШЫ працуе з айсамым сераўаком, каб выконаць конкрэтную задачу. Ён спалюе разумовыя працэў, планаванне і адконанне дзеянняў, зазвычай за дапамогою зовнішніх інструментаў. Большасць агентаў керуецца LLM, хоця мадэль візуальна-мовнага апрацоўвання таксама можа выпалняць тую ж ролю.
Ваша прыкладніка чату забывае все
Гэта факт, які дзівуе багоў людзей: калі вы спілкуецеся з ChatGPT або падобным асістэнтам, у самай модэлі не існуе жадных размов. Яна нічога не зберагае, не фіксуе стан розмовы і не прытрымвае нічога между вашымі паведамленнямі. Кожны раз, калі вы нажмаеце на кнопку «Адправіць», весь паказаны ўжо абмян клеіцца ў одын дзьвінгі блок тэксту, і модэль чытае гэты блак з самага пачатку.
Уявіце сабе такую размову:
conversation = [
{"role": "user", "content": "I need help with my order"},
{"role": "assistant", "content": "Could you provide your order number?"},
{"role": "user", "content": "It's ORDER-123"},
]
Чысты спіс раундаў з адпаведнымі ролямі — гэта тое, што вы бачыце і чым займаюцца распрацоўшчыкі ў кодзе. Аднак мадэль ніколі не атрымляе такога спісу. Перш чым ўсё гэта дасягне яе, раунды спакоююцца і з’едынаюцца ў адну последовасць тэксту, і яе ежыдзенная задача — прагназаваць наступны токен на адной падставе всіх даных, якія ў яе ёсць.
Не існуе спецыяльнага крока „запам’ятаваць гэта“. Калі мадэль, здаецца, запам’ячае ваш номер замовлення, гэта не ўсё тое ж памяць. Гэты номер проста застаецца ў тэксты, які ён чытае ў той момент.
Інструменты
Інструмент — гэта функцыя, ідэальна з адной чыстаю метай, якая перэдаецца LLM. Тыповыя прыклады включаюць:
- пошук у інтэрнэце
- стварэнне зображэнняў
- зялленне дакументаў
- выклік API
Хорашы інструмент расшырвае можлівасці мадэлі. Ён патрабуе наступных элементаў:
- тэкстовыя апісанні таго, што робіць функцыя
Як насправды вызываецца інструмент
Ключовы момант закладзены ў тым, што LLM не можа безпасерэдньа працаваць з жадным зовнішнім інструментам. Тэкст заходзіць усерэдыну і выходзіць звычайным тэкстам, больш нічога. Калі кажуць, што мадэль „мае доступ да інструментаў“, на самай працоўцы гэта значыць, што яна навучылася пісаць у тэксце запуск інструмента. Калі запытаць пра пагоду ў Парыжы, мадэль не запрашвае прогназ. Яна выдае структураванае паведамленне, у яком сказана, што трэба запусціць інструмент для пагоды.
Слою агента знаходзіцца межы ўжоўка і модэлю. Ён фіксуе тое паведамленне, запускае інструмент, збірае рэзультат і дадае яго да размовы, прычым вяртаючы все знадворы модэлю. За дапамогою гэтага дадатковага кантэксту модэль пішае звычную адпаведзь. Ужоўка мае вражэнне, што модэль сама звяжалася з службай паветарына, хоча на самай працы займался агент.
Маленькі прыклад
Для ілюстрацыі возьмімо калькулятор, які выкаанае толькі адну задачу — множэнне двух цэлых чысоў:
def multiply(a:int, b:int):
"Multiply two integers"
return a * b
Ператворэнне функцыі ў інструмент
Бібліятэка Hugging Face transformers адказвае дэкаратаром @tool, які абгружае звычную функцыю Python, каб агент могаў яе зрозумець. Спачатку трэба выконаць імпорт:
from transformers import tool
Потым функцыя з дэкорацыямі:
@tool
def multiply(a: int, b: int):
"""Multiply two integers."""
return a * b
У закуліссях дэкаратар збірае метаданы:
- назву функцыі
- яе апісанне
- назвы аргументаў
- тыпы аргументаў
- тып значэння, якое вяртаецца
Этыя метаданы пазней дадаюцца ў запіт, які паведамляе модэль, як правільна выкарыстоўваць інструмент.
Разгляд інструмента
Пасля дэкоравання інструмент можа опісаць сябе у тэкставай форме:
print(multiply.to_string())
У выдрукаваным выходным дадзенні ўключаюцца дакладнасці прыблізна такога характару:
Tool Name: multiply
Description:
Multiply two integers.Arguments:
- a (int)
- b (int)
Гэты структураваны опіс — гэта самае тое, што агент паказвае модэлю. LLM чытае яго як будзь-які іншы тэкст і вырашае, чы робітка зможа дапамогчы ў выпанні запіту корыстувальніка.
Рабочы цыкл агента
Агент працуе ў павтараючымся цыкле: яны думаюць (Thought), дзейнуюць (Action) і пасля спагледваюць (Observation).
- Thought. Частка LLM агента вырашае, што робіць далей.
- Action. Агент вызывае робіткі з выбранымі аргументамі.
- Observation. Модэль аналізуе тое, што вернула робітка.
Агент застаецца ў гэтым цыкле думкі, дзеяння і спаглядання, пакуль не будзе адпрацавана яго мета.
Сістэмны запрос
Сістэмны запрос — гэта набор інструкцый, якія дастаюцца модэлю перад кожным запытам корыстувальніка. Яны вказываюць правілы поведзення, ролю, абмежэнні і цілі для всей размовы.
Калі корыстнік пісае ўтрыманне, модэль бачыць не толькі гэты тэкст. Яе зазвычай падае ўтрыманне у такім фармаце:
<System Prompt>
You are a helpful programming assistant.
Always explain concepts before showing code.
If the user asks for unsafe code, refuse politely.
<User>
Explain binary search.
Прампт сістэмы мае вышэйшую прывілегію чым прампт карыстальніка. Дазвольце, ён праўіць, што адпаведзі на запыт завжды трэба даваць англійскай мовай, а карыстальніка прасіць французкай. Мадэль зазвычай будзе слухацца прампт сістэмы, як толькі прылад не дазволіць запытам карыстальніка пераканаць яе інакш.
Прампт сістэмы агента ўключае ў сябе дапаможныя інструменты і сам цыкл ўжоць:
You are an AI assistant that can answer user questions.
You have access to the following tools:
Tool: search_web
Description:
Searches the web for up-to-date information.
Arguments:
- query (string)
Tool: calculator
Description:
Evaluates mathematical expressions.
Arguments:
- expression (string)
If a user's question requires current information, use search_web.
If a calculation is required, use calculator.
Otherwise, answer directly.
У тым сообшчэнні сістэмы вызначаюцься тры наявныя рэчы:
- як агент павінен себе вадзіць
- якія інструменты ён можа выкарыстоўваць, як было опісана ў паказваным ранейшым раздзеле
- цыкл «Мысль, Дзеянне, Абазораванне», які ўжо ўключаны ў інструкцыі модэлю
Кожны з трох этапаў заслуговае на болей дакладны аналіз.
Мыслі
Мыслі фіксуюць внутршню логіку і планаванне агента пад час выканання задання. Існуе два распашчытаныя стыля:
- chain-of-thought (CoT)
- ReAct (логіка плюс дзеянне)
Chain-of-thought — гэта метод стварэння падказак, які спакушае модэль рашаць задачу па шагах прычымо да таго, калі ён дае гэтыткі фінальны адказ. Логіка застаецца внутршней, што падходзіць для задач логікі і матэматыкі, якім не трэба званоўых інструментаў.
ReAct — гэта метод, які таксама выкалекуе паспрабаванне даўальніка інтэлекту працаваць па кроках, але спалучае дзеяння, такія як вызовы інструментаў, между крокамі разумавання.
Оба методы дазволяюць даўальніку інтэлекту поступова разумаваць над проблемамі. Разлік заключаецца у тым, што CoT залежыць толькі ад таго, што мадэль вядома ўжо, тады калі ReAct спалучае разумаванне з дзеяннямі. Гэта дазволяе модэлі выкарыстоўваць зовнішні інструменты, сабрываць новую інфармацыю і продаважваць разумаванне на адной засадзе з рэзультатамі, што ўжо лепш падходзіць для дынамічной, рэальнай працы, якая стосуецца зовнішнях сістэм.
Дзеяння: ад разумавання да дзеяння
Дзеяння — гэта крокі, якіе агент выкарыстоўвае для взаімадзеяння з сваёй супакоўкай. Агент службы падтрымкі кляўэнта можа выкарыстоўваць даны кляўэнта, працаваць з артыкуламі падтрымкі або перадаць справу людзю.
Генератор тэкста можа запускаць рэальныя інструменты за дапамою простага патэрану, вядомага як «зупінка» і «парсінг». Мадэль сама нічога не выкананяе; яна стварае структураваны запіт, які опісвае, што трэба здарыцца, а агент выкананяе яго заместа мадэлі.
Па суты, гэта той самы цыкл, як і раней. Мадэль аналізуе задачу, выдае дзеянне, напрыклад, запыт да API па паветраку, і зупіняецца. Агент выявляе гэта дзеянне, запускае відпаведны інструмент і вяртае рэзультат у вастоўкі. Маючы гэты рэзультат, мадэль або продовжае аналіз, або выкананяе іншае дзеянне, або дае заканчычную адпаведзь.
Історычная частка паказвала, што дзеянні выражаліся як вызовы функцый ілі об’екты JSON, у якіх называлася змена і ўсе яе аргументы. Гэта працюе, але становіцца незручным, калі праблема выканання трэбуе многа вызовоў змен. Кодавыя агенты выбіраюць іншы падход: замест таго, каб опісваць дзеянні ў фармаце JSON, модэль пішае віконвальны код на Python. Тады ціклы, умовы, зменныя і калькі вызовоў змен можу дзеліцца аднім блокам коду, што ў меры складных задач яе робіць болей выразным і эфектыўным.
Традыцыйны фармат JSON выглядае так:
{
"tool": "get_weather",
"arguments": {"location": "Tokyo"}
}
Агент з кодамі заместа таго пісвае віконвальны фрагмент:
# The agent writes actual Python code as its action
cities = ["Tokyo", "Paris", "New York", "London", "Sydney"]
temps = [get_weather(city) for city in cities]
avg_temp = sum(temps) / len(temps)
print(f"Average temperature: {avg_temp}")
Зявы: адзывы па кожным дзеянні
Разумаванне і дзеянне — гэта толькі палова карточка прыблудзе. Пасля дзеяння агент павінен разумець рэзультат, і самэ гэта ў месца зявы: адзыв, які прыходзіць пасля выкарыстоўвання дзеяння. Гэта можа быць рэзультат пошуку ў інтэрнэце, адпаведзь API, выход дапраўкі на Python чы нават паведамленне пра адказ. Што б гэта не было, гэта становіцца новай інформацыяй для выбору наступнага крока.
Працэс просты. Агент выконвае дзеяння, фрэймворк яго выконвае, а выход дадаёцца да размовы як зява. LLM чытае апошню інформацыю і продовжвае працу. Калі ёсць достатнька інформацыі, яна дае фінальны адказ. Калі няма, яна плануе інша дзеяння.
Абсалютна неабяркласць не павінна быць успехам. Калі кантакт не выйшаў — з кодам 404 Not Found ад канцэнтра, чыя-не-чыя Python TypeError у створанам кодзе — такая неабяркласць заўсёды мае цэннасць. Паведамленне пра абяркласць паказвае агенту, што пайшло не так, тады яго наступныя дзеянні можаць выправіць сітуацыю замест таго, каб павтараць аднойчы зробленую памялку.
Самэ гэты цікл даўае агентам здатнасць прыстосавання. Умест таго, каб паслужыцца толькі знаннямі, якія былі прадзеяныя, яны збіраюць новыя факты, вучацца на рэзультатах і удосконаляюць свой падход, пакуль задача не будзе завершаная.
Аб’еднанне элементаў
Агенты можуць выглядаць як абсалютна новая парадыгма, але яны ствараныя з калькі простых ідэй, якія былі аб’еднаныя. Мадэль мовы размышляе пра проблему, сістэмны прапант керуе яе поведэнням, інструменты расшыруюць яе функціяны за межы тэксту, дзеянні паў’язуюць яе з зовнішнім светам, а абяркласці даюць зворотныя запывы, каб яна могла прыстосавацца.
Розуміння цых базовіх элементаў і усвідомлення того, наскількі мало „магіі“ містыцца в кожному з ніх, — гэта першый крок до створэння власніх агентаў. Кодувальні асістэнты, допоміжні інструменты для досліджэнь і автономні робочы працэсі всі залежаць ад одного й того ж цыклу „Міслення — Дыя — Спостэрэжэння“. Наступнім прыроднім кроком ёсць створэння першого агента за допомогою екосістэмі Hugging Face.