ИИ-агенты для начинающих. Часть 4. Агенты в CrewAI

ИИ-агенты для начинающих. Часть 4. Агенты в CrewAI

При подготовке статьи использовалась публикация «Crew AI agents».

Что такое агент в CrewAI

Агент в CrewAI — это автономный исполнитель, этакий цифровой специалист, который умеет:

  • Выполнять конкретные задачи в рамках своей компетенции

  • Принимать решения, опираясь на свою роль и поставленные цели

  • Использовать доступные инструменты для достижения результата

  • Общаться и взаимодействовать с другими агентами (и не устраивать офисные интриги)

  • Хранить историю взаимодействий

  • При необходимости делегировать задачи Представьте агента как члена команды со своим уникальным набором навыков и зоной ответственности.

Это как в реальной компании: у каждого специалиста своя роль, и каждый делает то, в чем действительно силен.

Атрибут Параметр Тип Описание
Role role str Определяет функцию и специализацию агента в команде.
Goal goal str Цель агента.
Backstory backstory str Контекст и индивидуальность агента
LLM* llm Union[str, LLM, Any] Языковая модель, которая управляет агентом.

По умолчанию использует модель, указанную в OPENAI_MODEL_NAME или “gpt-4”. | | Tools* | tools | List[BaseTool] | Инструменты доступные агенту.

По умолчанию — пустой список. | | Function Calling LLM | function_calling_llm | Optional[Any] | Языковая модель для вызова инструментов, переопределяет LLM команды, если указана. | | Max Iterations | max_iter | int | Максимальное количество итераций, прежде чем агент должен предоставить свой лучший ответ.

По умолчанию 20. | | Max RPM | max_rpm | Optional[int] | Максимальное количество запросов в минуту во избежание ограничений. | | Max Execution Time | max_execution_time | Optional[int] | Максимальное время (в секундах) для выполнения задачи. | | Memory* | memory | bool | Должен ли агент сохранять память о взаимодействиях.

По умолчанию True. | | Verbose* | verbose | bool | Включить подробные журналы выполнения для отладки.

По умолчанию False. | | Allow Delegation* | allow_delegation | bool | Разрешить агенту делегировать задачи другим агентам.

По умолчанию False. | | Step Callback | step_callback | Optional[Any] | Функция, вызываемая после каждого шага агента, переопределяет обратный вызов команды. | | Cache | cache | bool | Включить кэширование для использования инструментов.

По умолчанию True. | | System Template | system_template | Optional[str] | Системный шаблон определяет основное поведение агента | | Prompt Template | prompt_template | Optional[str] | Структурирует формат входных данных | | Response Template | response_template | Optional[str] | Форматирует ответы агента | | Allow Code Execution | allow_code_execution | Optional[bool] | Включить выполнение кода для агента.

По умолчанию False. | | Max Retry Limit* | max_retry_limit | int | Максимальное количество повторных попыток при возникновении ошибки.

По умолчанию 2. | | Respect Context Window* | respect_context_window | bool | Поддерживать сообщения в пределах размера контекстного окна путем обобщения.

По умолчанию True. | | Code Execution Mode* | code_execution_mode | Literal[“safe”, “unsafe”] | Режим выполнения кода: safe (использование Docker) или unsafe (прямое выполнение).

По умолчанию safe. | | Embedder | embedder | Optional[Dict[str, Any]] | Конфигурация для эмбендера, используемого агентом. | | Knowledge Sources | knowledge_sources | Optional[List[BaseKnowledgeSource]] | Источники знаний, доступные агенту. | | Use System Prompt* | use_system_prompt | Optional[bool] | Использовать ли системный промт (для модели o1).

По умолчанию True. | | *опционально | | | |

Создание агентов в CrewAI: настройка через YAML или код

В CrewAI есть два способа создания агентов: через YAML-конфигурацию (рекомендуемый метод) или напрямую через код.

Давайте разберем первый и самый удобный способ — через YAML.

YAML-конфигурация

Использование YAML-конфигурации — это не просто дань моде.

Такой подход дает нам несколько серьезных преимуществ:

  • Код становится чище и понятнее

  • Настройки легче поддерживать и обновлять

  • Меньше шансов допустить ошибку

  • И да, ваши коллеги скажут спасибо Заглянем в файл src/hmhm_project/config/agents.yaml.

# src/hmhm_project/config/agents.yaml
researcher:
  role: >
    Старший исследователь данных по теме {topic}
  goal: >
    Искать новые разработки в {topic}
  backstory: >
    Вы опытный исследователь с особым талантом к выявлению последних
    достижений в области {topic}. Известны своей способностью находить
    наиболее релевантную информацию и представлять ее ясно и лаконично.

reporting_analyst:
  role: >
    Аналитик по теме {topic}
  goal: >
    Создавать подробные отчеты на основе анализа данных и результатов исследований в области {topic}
  backstory: >
    Вы педантичный аналитик с острым вниманием к деталям. Известны своей
    способностью превращать сложные данные в четкие и лаконичные отчеты,
    что позволяет другим легко понимать информацию и действовать на ее основе.

Чтобы использовать эту YAML-конфигурацию в коде, создадим класс crew, который наследуется от CrewBase:

# src/hmhm_project/crew.py
from crewai import Agent, Crew, Process
from crewai.project import CrewBase, agent, crew
from crewai_tools import SerperDevTool


@CrewBase
class HmHmCrew():
    agents_config = "config/agents.yaml"

    @agent
    def researcher(self) -> Agent:
        return Agent(
            config=self.agents_config['researcher'],
            verbose=True,
            tools=[SerperDevTool()]
        )

    @agent
    def reporting_analyst(self) -> Agent:
        return Agent(
            config=self.agents_config['reporting_analyst'],
            verbose=True
        )

Имена, которые мы используем в YAML-файлах (agents.yaml), должны соответствовать названиям методов в Python-коде.

Объявление агента, его роли, цели и легенды в коде

Мы можем создавать агентов напрямую в коде путем создания экземпляра класса Agent.

Вот подробный пример, показывающий все доступные параметры:

from crewai import Agent
from crewai_tools import SerperDevTool

# Создание агента с параметрами
agent = Agent(
    role="Senior Data Scientist",
    goal="Анализировать и интерпретировать сложные наборы данных для получения практически применимых выводов",
    backstory="Имея более 10 лет опыта в области науки о данных и машинного обучения, вы превосходно справляетесь с поиском закономерностей в сложных наборах данных.",
    llm="gpt-4",  # По умолчанию: OPENAI_MODEL_NAME or "gpt-4"
    function_calling_llm=None,  # Опционально: Языковая модель для вызова инструментов
    memory=True,  # По умолчанию: True
    verbose=False,  # По умолчанию: False
    allow_delegation=False,  # По умолчаниюt: False
    max_iter=20,  # По умолчанию: 20 итераций
    max_rpm=None,  # Опционально: Максимальное количество запросов в минуту во избежание ограничений.
    max_execution_time=None,  # Опционально: Максимальное время (в секундах) для выполнения задачи.
    max_retry_limit=2,  # По умолчанию: Максимальное количество повторных попыток при возникновении ошибки. По умолчанию 2.
    allow_code_execution=False,  # По умолчанию: False
    code_execution_mode="safe",  # По умолчанию: Режим выполнения кода: safe (использование Docker) или unsafe (прямое выполнение). По умолчанию safe.
    respect_context_window=True,  # По умолчанию: True
    use_system_prompt=True,  # По умолчанию: True
    tools=[SerperDevTool()],  # Опционально: Инструменты доступные агенту. По умолчанию - пустой список.
    knowledge_sources=None,  # Опционально: Источники знаний, доступные агенту.
    embedder=None,  # Опционально: Конфигурация для эмбендера, используемого агентом.
    system_template=None,  # Опционально: Системный шаблон для агента.
    prompt_template=None,  # Опционально: Пользовательский шаблон для агента.
    response_template=None,  # Опционально: Пользовательский шаблон ответа для агента.
    step_callback=None,  # Опционально: Функция, вызываемая после каждого шага агента, переопределяет обратный вызов команды.
)

Инструменты для агентов

Агенты могут быть оснащены различными инструментами для расширения их возможностей.

CrewAI поддерживает инструменты из:

Вот как добавить инструменты агенту:

from crewai import Agent
from crewai_tools import SerperDevTool, WikipediaTools

# Объявляем интсрументы
search_tool = SerperDevTool()
wiki_tool = WikipediaTools()

# Добавляем инструменты агенту
researcher = Agent(
    role="Исследователь ИИ",
    goal="Исследовать последние разработки в области ИИ",
    tools=[search_tool, wiki_tool],
    verbose=True
)

Память и контекст агентов

Агенты могут сохранять память о своих взаимодействиях и использовать контекст из предыдущих задач.

Это особенно полезно для сложных рабочих процессов, где информация должна сохраняться при выполнении нескольких задач.

from crewai import Agent

analyst = Agent(
    role="Дата-аналитик",
    goal="Анализировать и запоминать сложные шаблоны данных",
    memory=True,  # Активируем память
    verbose=True
)

Когда память активирована, агент будет сохранять контекст на протяжении нескольких взаимодействий, улучшая свою способность справляться со сложными многоэтапными задачами.

Лучшие практики

Безопасность и выполнение кода

  • При использовании allow_code_execution будьте осторожны с пользовательским вводом и всегда проверяйте его

  • Используйте code_execution_mode: «safe» (Docker) в продакшене

  • Рассмотрите установку подходящих ограничений max_execution_time для предотвращения бесконечных циклов

Оптимизация производительности

  • Используйте respect_context_window: true для предотвращения проблем с лимитом токенов

  • Установите соответствующий max_rpm чтобы избежать ограничений частоты запросов

  • Включите cache: true для улучшения производительности при повторяющихся задачах

  • Настройте max_iter и max_retry_limit в зависимости от сложности задачи

Управление памятью и контекстом

  • Используйте memory: true для задач, требующих исторического контекста

  • Используйте knowledge_sources для информации, специфичной для предметной области

  • Используйте шаблоны (system_template, prompt_template, response_template) для точного контроля поведения агента

Взаимодействие агентов

  • Включите allow_delegation: true когда агентам нужно работать вместе

  • Используйте step_callback для мониторинга и логирования взаимодействий агентов

  • Рассмотрите использование разных LLM для разных целей:

  • Основная llm для сложных рассуждений

  • function_calling_llm для эффективного использования инструментов

Совместимость моделей

  • Установите use_system_prompt: false для старых моделей, не поддерживающих системные сообщения

  • Убедитесь, что выбранная llm поддерживает нужные вам функции

Устранение распространенных проблем

Ошибки окна контекста: Если вы превышаете ограничения контекста:

  • Включите respect_context_window

  • Используйте более эффективные промпты

  • Периодически очищайте память агента

Проблемы с выполнением кода: Если выполнение кода не удается:

  • Проверьте установку Docker для безопасного режима

  • Проверьте разрешения на выполнение

  • Просмотрите настройки песочницы кода

Проблемы с памятью. Если ответы агента кажутся непоследовательными:

  • Убедитесь, что память включена

  • Проверьте конфигурацию источников знаний

  • Просмотрите управление историей разговоров


Содержание

  1. Что такое ИИ-агенты и где они применяются

  2. Агентный фреймворк CrewAI

  3. Установка CrewAI и создание нового проекта

  4. Агенты в CrewAI

  5. Создание задач для агентов в CrewAI

Практикум

  1. Создание системы автоматического перевода и редактирования текстов