Головна / Статті

Навчання Deep Agents новим навичкам: планування, субагенти та файли SKILL.md

Як DeepAgents від LangChain поєднують планування, субагентів, пам’ять файлової системи та поступове завантаження навичок із планом створення, порадами щодо тестування та примітками щодо розгортання.

Видавець: REACTAPP.TOP12 хв читання2809 слів

Джерела: Learning Skills with Deep Agents in Agentic AI

Агентський ШІ — це системи, складені з кількох взаємодіючих агентів, які ділять складну, заплутану проблему, обмінюються інформацією та працюють як невелика команда фахівців. Одинокий чат-бот відповідає на одне запитання. Агентська система потребує планування, пам’яті та використання інструментів, щоб виконувати завдання у кількох кроках. Метод посилення навчання є класичним шляхом створення агентів, які навчаються шляхом проб і помилок: глибока мережа спостерігає за середовищем, обирає дії, такі як виклик інструментів чи виконання коду, та отримує винагороди, які формують її стратегію. Глибоке посилення навчання дало можливість досягати рівня, перевищує людський, у грі Ґо та шахах, а також значних результатів у робототехніці, завдяки максимізації очікуваної кумулятивної винагороди. Застосування цих ідей до агентів на основі ШІ великих масивів тексту відкриває цікаву можливість — а саме створення агентів, які можуть використовувати повторно працездатні алгоритми чи навички, а потім планувати та виконувати завдання з меншими зусиллями.

Що робить агента „глибоким“

Глибокі агенти розширюють можливості асистента LLM чотирма функціями:

  1. Інструмент планування, який розділяє складну роботу на кроки.
  2. Підагенти для паралельної роботи та ізоляції контексту.
  3. Постійна файлова система, яка виконує функцію пам’яті.
  4. Детальний системний запит із вказанням цілей та обмежень.

Разом ці елементи дозволяють агенту планувати, зберігати стан та виконувати складні робочі процеси, не обмежуючись контекстом запиту. Поверхневий чат-бот відповідає один раз. Глибокий агент працює циклічно: він планує, шукає інформацію, зберігає результати, синтезує та удосконалює їх. Якщо потрібен звіт, він може скласти список завдань, виконати пошук у Інтернеті чи аналіз, зберегти нотатки у файлах, а потім написати та відредагувати текст, причому весь цей процес керується моделлю без участі людини.

Навчання з підкріпленням та джерело навичок

Глибоке машинне навчання є основою для агентів, які навчаються шляхом дій. Агент спостерігає за станом, виконує дію та отримує винагороду або покарання, а шляхом максимізації очікуваної суми майбутніх винагород він покращує свою стратегію. Воно відрізняється від навчання під керівництвом, яке має мітки, та від навчання без керівництва, яке шукає приховану структуру, оскільки працює з послідовними рішеннями в умовах невизначеності. У глибокому машинному навчанні замість простих апроксиматорів функцій використовуються нейронні мережі, що дозволяє обробляти зображення, текст та сирі дані датчиків. Серед відомих досягнень — глибокі мережі Q для Atari та методи з градієнтом стратегії, такі як PPO та A2C, для безперервного керування та стратегічних ігор. У новіших дослідженнях розглядається ієрархічне навчання навичок, коли агенти відкривають для себе нові варіанти дій, тобто дії, що тривають у часі та вирішують підзадачі, що сприяє дослідженню та перенесенню знань.

Для агентів на основі LLM RL виконує дві функції. По-перше, це доопрацювання самої моделі за допомогою сигналів зворотного зв’язку. Наприклад, RLHF допомагає налаштувати моделі так, щоб вони були безпечнішими та більш відповідними темі. DeepSeek-R1 показав, що чистий RL без позначених даних може навчити модель міркувань конкурувати з найкращими системами у математиці та програмуванні: модель генерує кілька відповідей, автоматичний оцінювач нагороджує правильні та карає решту, а протягом багатьох раундів алгоритм на кшталт PPO покращує її роботу. У реальних процесах можуть додаватися контрольоване доопрацювання та вибіркове відкидання для покращення читабельності та безпеки.

Інша роль знаходиться на рівні фреймворку агента, де методи, засновані на принципах RL, можуть допомогти у здобутті навичок. Агент може записувати траєкторії своїх дій (які інструменти використовувалися, що поверталося) та передавати ці дані для використання в офлайн-моделях RL чи методах імітаційного навчання з метою виділення повторюваних процедур. Аналізуючи минулі успіхи та невдачі, він може об’єднати часто повторювані послідовності дій у більш складні алгоритми. Ці алгоритми, записані у вигляді файлів-скриптів чи інструкцій у форматі Markdown, можуть поступово розкриватися агенту під час виконання наступних завдань. Таким чином система отримує можливість безперервного навчання: стикаючись з чимось новим, вона швидко засвоює навичку та зберігає її у вигляді модуля.

Як будується бібліотека DeepAgents

Бібліотека DeepAgents від LangChain перетворює ці ідеї на готовий інструментарій для практичного використання, її архітектура сформована на основі багатоетапних агентів на кшталт Claude Code та Manus.

  • Планування за допомогою write_todos. Вбудований інструмент дозволяє агенту скласти поетапний список перед виконанням дій. Цей список спрямовує роботу та може змінюватися з появою нової інформації.
  • Файлова система та пам’ять. Інструменти для роботи з файлами (ls, read_file, write_file, edit_file) дозволяють агенту зберігати контекст у файлах чи базах даних. Зберігання проміжних результатів та нотаток запобігає переповненню вікна контексту та дозволяє повертатися до попередніх кроків. Підключуваний бекенд, чи то в пам’яті, на локальному диску, у хмарному сховищі чи в ізольованій сандбокс-середовищі, забезпечує стабільне зберігання даних та безпечну виконуваність коду.
  • Підагенти. Вбудований інструмент task створює спеціалізованих помічників — наприклад, підагента для досліджень чи підагента для критики. Кожен з них працює у власному контексті, що дозволяє уникнути зайвого навантаження на основного агента, і може мати власні системні інструкції та інструменти. Основний агент може доручити йому пошук інформації в Інтернеті чи аналіз коду та отримати у відповідь короткі узагальнення. Універсальний підагент просто відтворює налаштування основного агента, коли потрібен лише його ізоляційний режим.
  • Навички. Навичка — це папка, яка містить файл SKILL.md, а також, за бажанням, скрипти чи документи. Навички відрізняються від інструментів тим, що вони не завантажуються повністю у запит. У контекст потрапляє лише YAML-фронтматеріал (назва, опис, теги), а повні інструкції розкриваються поступово, коли агент вирішує, що вони є релевантними. Це значно зменшує використання токенів. Навичка у форматі PDF може містити довгий посібник, який агент читає лише тоді, коли завдання користувача стосується PDF-файлів. Навички дозволяють поширювати знання та процедури в межах різних агентів, причому агенти навіть можуть створювати нові визначення навичок під час виконання нових завдань.
  • Завдяки такій конструкції агенти з глибоким мисленням значно краще справляються з довгими багатокроковими завданнями, ніж агенти з поверхневим мисленням. Вони планують на майбутнє, використовують пам’ять, вчаться на досвіді та керують великими обсягами інформації. Звіти галузі свідчать про те, що завдання для агентів стають все складнішими — їх довжина приблизно подвоюється кожні кілька місяців, і саме тут стають важливими ці функції. Відбувається перехід від відповідей на окремі запитання до автономного вирішення проблем.

    Поетапна реалізація

    Наведений нижче план поєднує архітектуру агента з ідеями машинного навчання там, де це доцільно. Для його реалізації використовуються Python та SDK DeepAgents. Почніть з встановлення бібліотек та налаштування середовища:

    # Install deepagents and necessary tools
    !pip install --upgrade deepagents langchain tavily-python
    
    # Import libraries and set API keys (e.g., for LLM and search tool)
    import os
    from getpass import getpass
    os.environ["OPENAI_API_KEY"] = getpass("OpenAI API Key: ")
    os.environ["TAVILY_API_KEY"] = getpass("Tavily API Key: ")
    
    from deepagents import create_deep_agent
    from deepagents.backends import FilesystemBackend
    from deepagents.middleware.filesystem import FileData
    from langchain.chat_models import init_chat_model
    from tavily import TavilyClient
    

    Визначення агента та його навичок

    Далі йде розгляд «глибокого» агента з його інструментами та будь-якими заздалегідь визначеними навичками. Для продакшну більш підходящим вибором є міцний бекенд, такий як локальний диск чи LangGraph, ніж тимчасова пам’ять. У цій версії використовується FilesystemBackend, розташований у поточній директорії, який завантажує папки з навичками:

    from deepagents import create_deep_agent
    
    # Assume we have local skill directories under "./skills"
    skill_dirs = ["./skills/pdf_processing", "./skills/data_analysis"]
    
    agent = create_deep_agent(
        model=model,
        system_prompt="""
    You are a highly capable AI assistant. Your objectives:
    1. Break tasks into steps using write_todos().
    2. Use internet_search and file tools to gather and store information.
    3. When given a task, plan and execute it step-by-step, writing to files as needed.
    4. Load skills from the filesystem to handle specialized tasks when relevant.
    5. Summarize results and refine final output before returning.
    """,
        tools=[internet_search],             # Web search tool
        backend=FilesystemBackend(root_dir="./workspace"),  # Persistent file storage
        skills=skill_dirs,                  # Load skills from local directories
    )
    

    Указівка системи наголошує на необхідності планування та використання навичок. Параметр skills вказує на каталоги, у підкаталогах яких знаходяться файли SKILL.md та супутні документи. Наприклад, ./skills/pdf_processing/SKILL.md може навчити агента, як обробляти PDF-файли. Коли навички завантажуються таким чином, спочатку агент бачить лише назви та описи. Якщо завдання користувача стосується PDF-файлів, він читає відповідний SKILL.md та всі посилані файли, щоб дізнатися про процедуру.

    Приклад структури:

    skills/
    ├── pdf_processing/
    │   └── SKILL.md
    └── data_analysis/
        ├── SKILL.md
        └── analysis_script.py
    

    І можливий варіант pdf_processing/SKILL.md:

    ---
    name: pdf-processing
    description: Skill to extract and analyze content from PDF documents.
    ---
    # PDF Processing Skill
    
    To use this skill, follow these steps:
    1. Use `pdf-tools` to read PDF content.
    2. Summarize key findings from the PDF text.
    
    ...
    

    Повні інструкції читаються лише тоді, коли агент вирішує, що поточний запит стосується PDF-файлів. Це і є прикладом поступового розкриття інформації: великі файли з інструкціями не перевантажують кожен запит.

    Як виглядає виконання завдання

    Тепер дайте агенту складне завдання. Початковий запит спонукає його спочатку розробити план.

    from langchain.schema import HumanMessage
    
    query = "Organize the latest quarterly sales data and write a summary report."
    response = agent.invoke({
        "messages": [HumanMessage(content=query)]
    })
    print(response["messages"][-1]["content"])
    

    Концептуально агент, ймовірно, виконає наступне:

    1. Викличе функцію write_todos() для створення списку завдань, наприклад, завантажить файл з даними про продажі, створить графіки, обчислить суми та запише звіт.
    2. Здійснить виклики інструментів, використовуючи internet_search або вбудовані функції читання файлів, щоб зібрати наявні дані.
    3. Можливо, передасть завдання очищення чи аналізу підагенту, якщо це вимагає спеціалізованої процедури.
    4. Використає наявні навички. Якщо існує навичка аналізу даних, він може прочитати файл SKILL.md з каталогу ./skills/data_analysis та діяти згідно з ним.
    5. Збереже проміжні результати, такі як очищені набори даних чи графіки, у файловій системі.
    6. Напише та відредагує остаточний звіт.

    Повна робота викликає віддалені LLM, тому перевірка тут полягає переважно у правильному формуванні структури. Код обирає надійний бекенд, обгортає ризиковані кроки у try/except (повна версія має ловити помилки API та файлів), і його можна розширити за допомогою проміжкового програмного забезпечення для логування. Юніт-тести для кожного інструменту зі штучними відповідями LLM допоможуть їх перевірити.

    Тестування та оцінка

    Роботу агентів оцінюють переважно на основі судження. Перевіряється, чи агент правильно виконує завдання та дотримується свого плану. Один із підходів передбачає використання синтетичних завдань із відомими відповідями: дається невеликий математичний завдання, а кінцевий звіт порівнюється з рішенням. Також допомагають автоматизовані показники, такі як частка успішного виконання завдань (чи був завершений кожен крок) або схожість із базовою відповіддю, оцінена суддею-LLM. Текст у вільній формі все одно може потребувати людського перегляду або оцінки на основі моделі для остаточного рішення.

    Якщо RL використовується для навчання навичок, прогрес можна вимірювати за допомогою кривих винагород. Створіть середовище, у якому виконання підзавдань приносить винагороду, та побудуйте графік загальної винагороди за кожну епізоду, можливо, за допомогою OpenAI Gym або власної налаштованої системи. Важливими показниками є ефективність використання даних (наскільки швидко відбувається збіжність навчання), кінцева продуктивність та стабільність при різних початкових умовах. На практиці також слід виконати низку завдань у сферах досліджень, програмування та аналізу, відстежуючи частку успіхів та кількість використаних елементів для кожного з них.

    Оперативне спостереження є ключовим у продакшні. Озбройте агента засобами відстеження та логування, адже LangSmith може фіксувати кожен виклик інструменту та відповідь ШІ. У розгорнутій системі логи можуть надсилатися до CloudWatch чи Prometheus із кількістю кроків, затримкою за кожен виклик та помилками. Для компонентів на основі RL логуйте історію нагород, криві втрат та гіперпараметри. Тести на навантаження з великими пакетами даних, тривалими сеансами та незвичайними вхідними даними допомагають підтвердити стабільність.

    Розгортання як сервісу

    Під час реального розгортання агент працює як мікросервіс. Масштабована архітектура виглядає так:

    +------------------+      +--------------+
    |  Client/User     | <--> | API Gateway  | <---> [HTTP requests]
    +------------------+      +------+-------+
                                  |
                                  v
                           +-------------+
                           |  AgentCore  |   <-- AWS Bedrock AgentCore (managed runtime)
                           +-------------+
                                  |
                    +-------------+-------------+
                    |                           |
          +-------------------+       +-------------------+
          | Deep Agent Service |       | Storage (S3/DB)   |  <-- File/memory backend, logs
          +-------------------+       +-------------------+
                    |                           |
                    +-------------+-------------+
                                  |
                          +---------------+
                          |   LLM Models  |  <-- e.g., OpenAI, Anthropic, local LLMs
                          +---------------+
    

    Сервіс агента на AWS AgentCore або щось подібне отримує запити, координує підагентів та виконує виклики інструментів, причому кожна взаємодія записується у постійному сховищі для забезпечення можливості спостереження та зберігання інформації. Є кілька ключових аспектів дизайну.

    • Масштабованість та надійність. Агент можна запускати у безсерверному або контейнеризованому середовищі, такому як AWS Bedrock AgentCore, Azure AI Agent Service чи Kubernetes. Він масштабується залежно від навантаження та створює нові інстанції за кожним запитом, причому кожна сесія може знаходитися у власній мікро-ВМ. Постійний бекенд (S3, база даних чи сховище LangGraph) зберігає стан та інформацію між перезапусками.
  • Спостережливість. Відстежуйте кожне викликання. У AWS стартовий набір Bedrock AgentCore підключає CloudWatch та X-Ray для моніторингу затримок та збоїв. Логування хешів запитів та відповідей замість самих конфіденційних даних дозволяє відстежувати продуктивність, а також використання токенів, кількість викликів API та рівень успішності.
  • Безпека. Обмежуйте можливості агента. Інструменти файлової системи мають працювати лише всередині визначених каталогів, а виконання коду в режимі sandbox має відбуватися у захищених середовищах, таких як Modal чи Daytona. Надавайте будь-яким хмарним ресурсам, які використовує агент, ролі IAM з мінімальними привілеями, а також додавайте перевірку вхідних даних та фільтрацію контенту за допомогою механізмів безпеки LLM для захисту від зловмисних запитів.
  • Вартість. Знаходьте баланс між моделями та вибором серверної частини. Дешевша модель Anthropic підходить для рутинної роботи, тоді як преміум-модель, як-от GPT-4o, використовується для важливих кроків планування. Перенесення контексту до пам’яті та повторне використання результатів інструментів зменшує кількість повторюваних токенів запиту.
  • Повний приклад

    Цей зразок на Python реалізує план із обробкою помилок та коментарями. Це концептуальний приклад, який потребує справжніх ключів API та середовища для запуску.

    from deepagents import create_deep_agent
    from deepagents.backends import FilesystemBackend
    from deepagents.middleware.filesystem import FileData
    from langchain.chat_models import init_chat_model
    from tavily import TavilyClient
    import os
    
    def setup_agent():
        """Initialize the Deep Agent with tools, skills, and system prompt."""
        # Model and tools initialization
        model = init_chat_model(model="openai:gpt-4o")
        tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
        def web_search(query: str, max_results: int = 3) -> str:
            results = tavily_client.search(query, max_results=max_results)
            return "\n".join(f"{r.title}: {r.summary}" for r in results)
    
        # Create the deep agent with planning, files, and skills
        try:
            agent = create_deep_agent(
                model=model,
                tools=[web_search],
                system_prompt="""You are an expert agent. Your workflow:
                1. Create a plan with write_todos().
                2. Use tools (e.g. web_search) and file system to research and work.
                3. If specialized tasks arise, load relevant skills from the 'skills' directory.
                4. Save results and refine the output at each step.
                """,
                backend=FilesystemBackend(root_dir="./workspace"),
                skills=["./skills/pdf_processing", "./skills/data_analysis"]
            )
            return agent
        except Exception as e:
            print(f"Error initializing agent: {e}")
            raise
    
    def invoke_agent(agent, user_query):
        """Invoke the agent on a user query and return the final answer."""
        try:
            messages = [{"role": "user", "content": user_query}]
            result = agent.invoke({"messages": messages})
            return result["messages"][-1]["content"]
        except Exception as e:
            print(f"Agent invocation failed: {e}")
            return None
    
    # Example usage
    if __name__ == "__main__":
        agent = setup_agent()
        task = "Analyze the recent research on climate change and summarize key findings."
        answer = invoke_agent(agent, task)
        print("Agent response:", answer)
    

    Створення та виклик агента відбувається за допомогою функцій із описами та блоками try/except. Інструмент web_search використовує Tavily для отримання зовнішніх даних, а системний запит просить агента спланувати дії, використати необхідні навички та вдосконалити свій результат. У продакшн-версії будуть перевірятися крайні випадки, такі як порожні результати пошуку та таймаути API, а також будуть фіксуватися деталі виниклих винятків замість їх виведення. Конфіденційні дані мають зберігатися у захищеному середовищі, а не у вихідному коді. Структура може легко розширюватися за допомогою додаткових інструментів чи підагентів.

    Щоб належним чином перевірити її, потрібно написати тести на одиниці. Слід імітувати роботу LLM так, щоб він повертав фіксований результат планувальника, та перевіряти, чи агент створює потрібні файли чи викликає інструменти у правильному порядку. Також варто вимірювати час обробки та витрати на токени під час виконання тестових завдань.

    Аспекти, які потрібно враховувати під час планування

    Розширені агенти поєднують у собі функції планування, пам’яті, делегування завдань підагентам та можливість завантаження додаткових навичок для виконання багатоетапних завдань, з якими не впораються прості чат-боти. Чітке системне запитання, робочий процес, орієнтований на планування, та багата набір інструментів створюють міцну основу для автономних асистентів. Навички містять модульні знання, наприклад pdf-processing чи deploy-to-prod, які завантажуються за потребою, щоб контекст залишався лаконічним та агент міг продовжувати навчатися.

    • Правильність проти витрат. Сильні моделі, такі як GPT-4o чи Claude Sonnet, разом із розширеними пошуковими функціями підвищують точність, але збільшують витрати на токени та API. Поєднання різних розмірів моделей та кешування допомагає збалансувати якість та витрати.
    • Масштабованість проти складності. Серверлесса среда виконання агентів, така як AWS AgentCore, забезпечує автомасштабування та можливість моніторингу, проте потребує роботи з інтеграцією: контейнеризація коду агента та налаштування мережі.
  • Безпека проти гнучкості. Виконання в ізольованому середовищі за допомогою модальних або подібних блоків зменшує ризики вставки коду, хоча це обмежує такі операції, як довільні мережеві виклики. Визначте чіткі інтерфейси інструментів для потрібних функцій.
  • Надійність. Повторіть спроби у разі тимчасових помилок, таких як таймаути LLM, та врахуйте можливість людського контролю на критичних етапах, оскільки деякі фреймворки агентів підтримують переривання.
  • Спостережуваність. LangSmith або користувацьке журналювання дозволяють відстежувати кожен крок планування та виклик інструментів. Слідкуйте за рівнем використання CPU, GPU та затримками, а також постійно перевіряйте якість результатів.
  • У майбутньому сам процес здобуття навичок може стати автоматизованим: штучний інтелект або некероване навчання на основі попередніх даних може створювати нові визначення навичок. Фреймворки з кількома агентами, такі як Microsoft AutoGen чи Salesforce AgentForce, можуть координувати дії кількох спеціалізованих агентів через протоколи LangGraph.

    Для створення агента, який вчиться навичкам, потрібні дві речі: відповідний набір програмного забезпечення та, за бажанням, техніки штучного інтелекту, які дозволяють йому вдосконалюватися з часом. За допомогою DeepAgents та суворих інженерних підходів можна створювати асистентів, які самостійно вирішують складні проблеми, вивчають нові процедури та надійно працюють у великих масштабах.