Новости и статьи об искусственном интеллекте и нейросетях. Мы собираем и обрабатываем самую актуальную информацию из мира AI. О проекте

Статьи

Создание системы агентного ИИ с CrewAI

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

18 ноября 2025 г.
18 мин
7

Что такое агентный ИИ?

Агентный ИИ, впервые представленный Эндрю Нгом как ИИ-партнеры, которые самостоятельно планируют, выполняют и завершают сложные задачи, представляет собой новое понятие, возникшее в результате всплеска приложений генеративного ИИ. Этот термин быстро набрал популярность с конца июля 2025 года, судя по объему поисковых запросов в Google Trends.

Объем поисковых запросов по 'Agentic AI' за последние 12 месяцев
Объем поисковых запросов по “Agentic AI” за последние 12 месяцев

Несмотря на недавнее появление, статья BCG под названием “How Agentic AI Is Transforming Enterprise Platforms” показывает, что компании активно внедряют рабочие процессы на основе агентного ИИ для преобразования основных технологических платформ и поддержки автоматизации маркетинга, обслуживания клиентов, повышения производительности на рабочем месте и других областей, что приводит к ускорению циклов рабочих процессов на 20–30%.

От больших языковых моделей к многоагентным системам

То, что отличает систему агентного ИИ от традиционных систем автоматизации, — это ее способность самостоятельно планировать действия и логику для достижения конкретной заранее определенной цели. В результате меньше жесткой оркестровки или предопределенных траекторий принятия решений, регулирующих промежуточные шаги агента. Статья “Synergizing Reasoning and Acting in Language Models” считается фундаментальной работой, которая формализует раннюю структуру фреймворка LLM-агентов под названием “ReAct”, включающую три ключевых элемента — действия, мысли и наблюдения.

С быстрым развитием этой области становится ясно, что один агент на основе LLM не способен удовлетворить высокий спрос на приложения и интеграции ИИ. Поэтому разрабатываются многоагентные системы для координации функций агентов в динамическом рабочем процессе. Хотя каждый экземпляр агента ориентирован на роль и задачу, сосредоточившись на достижении одной цели, многоагентная система многофункциональна и обладает более обобщенными возможностями. Статья LangChain “Benchmarking Multi-Agent Architectures” демонстрирует, что по мере увеличения количества требуемых доменов знаний для задачи производительность одноагентной системы снижается, в то время как многоагентная система поддерживает стабильную производительность, уменьшая объем шума, поступающего в каждого отдельного агента.

Создание простой системы агентного ИИ с помощью CrewAI

CrewAI — это открытый фреймворк на Python, который позволяет разработчикам создавать готовые к производству и совместные команды ИИ-агентов для решения сложных задач. В сравнении с другими популярными фреймворками агентов, такими как LangChain и LlamaIndex, он больше ориентирован на совместную работу многоагентных ролей, предлагая меньшую гибкость для сложных архитектур агентов. Хотя это относительно новый фреймворк, он привлекает все больше внимания с июля 2025 года благодаря простоте реализации.

Можно провести аналогию с наймом межфункциональной проектной команды (или экипажа), когда с помощью фреймворка CrewAI строится агентная система, где каждый ИИ-агент в экипаже имеет конкретную роль, способную выполнять несколько связанных с ролью задач. Агенты оснащены инструментами, которые помогают им завершать работу.

Теперь, когда рассмотрены основные концепции фреймворка CrewAI — агент, задача, инструмент и экипаж, — перейдем к примерам кода для создания минимально жизнеспособной агентной системы.

1. Установите CrewAI и настройте переменные окружения с помощью команд bash ниже, например, экспортируйте ключ API OpenAI как переменную окружения для доступа к моделям GPT от OpenAI.

pip install crewai
pip install 'crewai[tools]'
export OPENAI_API_KEY='your-key-here'

2. Создайте инструменты из встроенного списка инструментов CrewAI, например, используйте DirectoryReadTool() для доступа к директории и FileReadTool() для чтения файлов, хранящихся в директории.

from crewai_tools import DirectoryReadTool, FileReadTool
doc_tool = DirectoryReadTool(directory='./articles')
file_tool = FileReadTool()

3. Инициализируйте агента, указав его роль, цель и предоставив инструменты.

from crewai import Agent
researcher = Agent(
    role="Researcher",
    goal="Find information on any topic based on the provided files",
    tools=[doc_tool, file_tool]
)

4. Создайте задачу, предоставив описание и назначив агента для ее выполнения.

from crewai import Task
research_task = Task(
    description="Research the latest AI trends",
    agent=researcher
)

5. Соберите экипаж, объединив агентов и задачи. Запустите выполнение рабочего процесса с помощью kickoff().

from crewai import Crew
crew = Crew(
    agents=[researcher],
    tasks=[research_task]
)
result = crew.kickoff()

Разработка экипажа для агентного маркетинга в социальных сетях

0. Цели проекта

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

Пример вывода экипажа по теме 'Agentic AI'

Пример вывода, если запросить у экипажа тему “Agentic AI”.

Пост в блоге

Пример поста в блоге по агентному ИИ

Сообщение для X (Twitter)
Discover the Future of Agentic AI! Have you ever wondered how Agentic AI is set to redefine our interaction with technology by 2025? Understanding AI trends for 2025 is not only crucial for technology enthusiasts but essential for businesses across various sectors. #AgenticAI #AITrends
Сообщение для YouTube
Explore Groundbreaking Trends in Agentic AI! 🌟 Uncover how Agentic AI is transforming industries in ways you never imagined! By 2025, these revolutionary trends will reshape how we engage with technologies, particularly in banking and finance. Are you ready to embrace the future? Don't forget to read our latest blog post and subscribe for more insights!
Сообщение для Substack
The Changing Landscape of Agentic AI: What You Need to Know In 2025, the evolving world of Agentic AI is set to reshape industries, particularly in finance and banking. This blog covers key trends such as the transformational potential of agentic AI, new regulatory frameworks, and significant technological advancements. How can businesses successfully integrate agentic AI while managing risks? What does the future of this technology mean for consumers? Join the dialogue in our latest post, and let's explore how these innovations will impact our future together!

1. Настройка окружения проекта

Следуйте руководству QuickStart от CrewAI для настройки среды разработки. Для этого проекта используется следующая структура директорий.

├── README.md
├── pyproject.toml
├── requirements.txt
├── src
│   └── social_media_agent
│       ├── __init__.py
│       ├── crew.py
│       ├── main.py
│       └── tools
│           ├── __init__.py
│           ├── browser_tools.py
│           └── keyword_tool.py
└── uv.lock

2. Разработка инструментов

Первый инструмент, добавляемый в экипаж, — это WebsiteSearchTool, встроенный инструмент, реализованный в CrewAI для проведения семантических поисков в содержимом веб-сайтов.

Для установки пакета инструментов CrewAI и использования WebsiteSearchTool достаточно нескольких строк кода. Этот инструмент доступен агенту-исследовщику рынка для поиска последних тенденций рынка или новостей отрасли, связанных с заданной темой.

pip install 'crewai[tools]'
from crewai_tools import WebsiteSearchTool
web_search_tool = WebsiteSearchTool()

Скриншот ниже показывает вывод web_search_tool при задании темы “YouTube videos”.

Пример вывода инструмента WebsiteSearchTool по теме YouTube videos

Далее создадим пользовательский keyword_tool, наследующий от класса BaseTool и использующий SerpApi (Google Trend API). Как показано в коде ниже, этот инструмент генерирует наиболее популярные и тенденционные запросы, связанные с входным ключевым словом. Этот инструмент доступен агенту-маркетологу для исследования тенденционных ключевых слов и оптимизации поста в блоге для поисковых систем. Пример вывода инструмента ключевых слов будет показан в следующем разделе.

import os
import json
from dotenv import load_dotenv
from crewai.tools import BaseTool
from serpapi.google_search import GoogleSearch

load_dotenv()
api_key = os.getenv('SERPAPI_API_KEY')

class KeywordTool(BaseTool):
    name: str = "Trending Keyword Tool"
    description: str = "Get search volume of related trending keywords."

    def _run(self, keyword: str) -> str:
        params = {
            'engine': 'google_trends',
            'q': keyword,
            'data_type': 'RELATED_QUERIES',
            'api_key': api_key
        }
        search = GoogleSearch(params)
        try:
            rising_kws = search.get_dict()['related_queries']['rising']
            top_kws = search.get_dict()['related_queries']['top']
            return f"""
Rising keywords: {rising_kws}
Top keywords: {top_kws}"""
        except Exception as e:
            return f"An unexpected error occurred: {str(e)}"

3. Определение класса экипажа

Архитектура CrewAI

В скрипте crew.py определяется команда социального медиа-экипажа с тремя агентами — market_researcher, content_creator, marketing_specialist — и задачами, назначенными каждому. Класс SocialMediaCrew() инициализируется с помощью декоратора @CrewBase. Атрибут topic передает ввод пользователя о теме интереса, а атрибуты llm и model_name указывают используемую по умолчанию модель во всем рабочем процессе экипажа.

@CrewBase
class SocialMediaCrew():
    def __init__(self, topic: str):
        """
        Initialize the SocialMediaCrew with a specific topic.
        Args:
            topic (str): The main topic or subject for social media content generation
        """
        self.topic = topic
        self.model_name = 'openai/gpt-4o'
        self.llm = LLM(model=self.model_name,temperature=0)

4. Определение агентов

Агенты CrewAI опираются на три основных параметра — роль, цель и предысторию — для определения их характеристик, а также контекста, в котором они работают. Кроме того, агентам предоставляются соответствующие инструменты для облегчения их задач и другие параметры для контроля потребления ресурсов при вызовах агента и избежания ненужного использования токенов LLM.

Например, агент “Marketing Specialist Agent” определяется с помощью кода ниже. Начните с декоратора @agent. Укажите роль как “Marketing Specialist” и предоставьте доступ к ранее разработанному keyword_tool, чтобы маркетолог мог исследовать тенденционные ключевые слова для оптимизации содержимого блога для наилучшей SEO-производительности.

Полный код определений других агентов доступен в репозитории на GitHub.

@CrewBase
class SocialMediaCrew():
    def __init__(self, topic: str):
        """
        Initialize the SocialMediaCrew with a specific topic.
        Args:
            topic (str): The main topic or subject for social media content generation
        """
        self.topic = topic
        self.model_name = 'openai/gpt-4o'
        self.llm = LLM(model=self.model_name,temperature=0)

Установка verbose в true позволяет использовать функциональность трассировки CrewAI для наблюдения за промежуточным выводом во время вызовов агента. Скриншоты ниже показывают процесс мышления агента “Marketing Specialist”, использующего keyword_tool для исследования “YouTube trends”, а также SEO-оптимизированный пост в блоге на основе вывода инструмента.

Промежуточный вывод от Marketing Specialist

Промежуточный вывод агента-маркетолога
SEO-оптимизированный пост в блоге

Альтернативный способ определения агента — хранение контекста агента в YAML-файле в формате ниже, что обеспечивает дополнительную гибкость для экспериментов и итераций в инженерии промптов при необходимости.

Пример agent.yaml

marketing_specialist:
  role: >
    "Marketing Specialist"
  goal: >
    "Improve the blog post to optimize for Search Engine Optimization using the Keyword Tool and create customized, channel-specific messages for social media distributions"
  backstory: >
    "A skilled Marketing Specialist with expertise in SEO and social media campaign design"

5. Определение задач

Если агент рассматривается как сотрудник (“кто”), специализирующийся в определенной области (например, создание контента, исследования), воплощенный в персонаже или характеристиках, то задачи — это действия (“что”), которые сотрудник выполняет с предопределенными целями и ожиданиями вывода.

В CrewAI задача настраивается с помощью description, expected_output и опционального параметра output_file, который сохраняет промежуточный вывод в файл. Альтернативно рекомендуется использовать отдельный YAML-файл для более чистого и поддерживаемого способа определения задач. В фрагменте кода ниже предоставляются точные инструкции для экипажа по выполнению четырех задач и назначению их агентам с соответствующими навыками. Также вывод каждой задачи сохраняется в рабочей папке для удобства сравнения разных версий вывода.

  • research: исследование тенденций рынка по заданной теме; назначено исследователю рынка.
  • write: написание увлекательного поста в блоге; назначено создателю контента.
  • refine: оптимизация поста в блоге для наилучшей SEO-производительности; назначено маркетологу.
  • distribute: генерация сообщений, специфичных для платформы, для распространения на каждом канале социальных сетей; назначено маркетологу.
@task
def research(self) -> Task:
    return Task(
        description=f'Research the 2025 trends in the {self.topic} area and provide a summary.',
        expected_output=f'A summary of the top 3 trending news in {self.topic} with a unique perspective on their significance.',
        agent=self.market_researcher()
    )

@task
def write(self) -> Task:
    return Task(
        description=f"Write an engaging blog post about the {self.topic}, based on the research analyst's summary.",
        expected_output='A 4-paragraph blog post formatted in markdown with engaging, informative, and accessible content, avoiding complex jargon.',
        agent=self.content_creator(),
        output_file=f'blog-posts/post-{self.model_name}-{timestamp}.md'
    )

@task
def refine(self) -> Task:
    return Task(
        description="""Refine the given article draft to be highly SEO optimized for trending keywords.
Include the keywords naturally throughout the text (especially in headings and early paragraphs)
Make the content easy for both search engines and users to understand.""",
        expected_output='A refined 4-paragraph blog post formatted in markdown with engaging and SEO-optimized contents.',
        agent=self.marketing_specialist(),
        output_file=f'blog-posts/seo_post-{self.model_name}-{timestamp}.md'
    )

@task
def distribute(self) -> Task:
    return Task(
        description="""Generate three distinct versions of the original blog post description, each tailored for a specific distribution channel:
One version for X (formerly Twitter) – concise, engaging, and hashtag-optimized.
One version for YouTube post – suitable for video audience, includes emotive cue and strong call-to-action.
One version for Substack – slightly longer, informative, focused on newsletter subscribers.
Each description must be optimized for the norms and expectations of the channel, making subtle adjustments to language, length, and formatting.
Output should be in markdown format, with each version separated by a clear divider (---).
Use a short, impactful headline for each version to further increase channel fit.""",
        expected_output='3 versions of descriptions of the original blog post optimized for distribution channel, formatted in markdown, separated by dividers.',
        agent=self.marketing_specialist(),
        output_file=f'blog-posts/social_media_post-{self.model_name}-{timestamp}.md'
    )

Журнал вывода CrewAI ниже показывает детали выполнения задач, включая статус, назначения агентов и использование инструментов.

🚀 Crew: crew
├── 📋 Task: research (ID: 19968f28-0af7-4e9e-b91f-7a12f87659fe)
│   Assigned to: Market Research Analyst
│   Status: ✅ Completed
│   └── 🔧 Used Search in a specific website (1)
├── 📋 Task: write (ID: 4a5de75f-682e-46eb-960f-43635caa7481)
│   Assigned to: Content Writer
│   Status: ✅ Completed
├── 📋 Task: refine (ID: fc9fe4f8-7dbb-430d-a9fd-a7f32999b861)
│   **Assigned to: Marketing Specialist**
│   Status: ✅ Completed
│   └── 🔧 Used Trending Keyword Tool (1)
└── 📋 Task: distribute (ID: ed69676a-a6f7-4253-9a2e-7f946bd12fa8)
    **Assigned to: Marketing Specialist**
    Status: ✅ Completed
    └── 🔧 Used Trending Keyword Tool (2)
╭───────────────────────────────────────── Task Completion ──────────────────────────────────────────╮
│                                                                             │
│                                                                             │
│                             Task Completed                                 │
│                                                                             │
│                          Name: distribute                                  │
│                                                                             │
│                            Agent: Marketing Specialist                      │
│                                                                             │
│                             Tool Args:                                     │
│                                                                             │
│                                                                             │
╰────────────────────────────────────────────────────────────────────────────────────────────────────╯

6. Запуск экипажа

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

@crew
def crew(self) -> Crew:
    return Crew(
        agents=self.agents,
        tasks=self.tasks,
        verbose=True,
        planning=True,
    )

В main.py создается объект SocialMediaCrew() и запускается экипаж, принимая ввод пользователя о теме интереса.

# main.py
from social_media_agent.crew import SocialMediaCrew

def run():
    # Replace with your inputs, it will automatically interpolate any tasks and agents information
    inputs = {
        'topic': input('Enter your interested topic: '),
    }
    SocialMediaCrew(topic=inputs['topic']).crew().kickoff(inputs=inputs)

Теперь используем “Agentic AI” в качестве примера, и вот файлы вывода, сгенерированные нашим социальным медиа-экипажем после последовательного выполнения задач.

Вывод из задачи “write”

Вывод задачи 'write'

Вывод из задачи “refine”

Вывод задачи 'refine'

Вывод из задачи “distribute”

Вывод задачи 'distribute'

Основные выводы

Это руководство демонстрирует, как создать систему агентного ИИ с помощью фреймворка CrewAI. Оркестрируя специализированных агентов с четкими ролями и инструментами, реализуется многоагентная команда, способная генерировать оптимизированный контент для различных платформ социальных сетей.

  • Настройка окружения: Инициализируйте среду разработки с необходимыми зависимостями и инструментами для разработки в CrewAI.
  • Разработка инструментов: Создайте базовую структуру инструментов с встроенными и пользовательскими компонентами.
  • Определение агентов: Создайте специализированных агентов с четко определенными ролями, целями и предысториями. Оснастите их соответствующими инструментами для поддержки роли.
  • Создание задач: Создайте задачи с четкими описаниями и ожидаемыми выводами. Назначьте агентов для выполнения задач.
  • Запуск экипажа: Оркестрируйте задачи, агентов и инструменты вместе как экипаж и выполните рабочий процесс.