Как стать автором
Обновить
498.28
Raft
AI решения для бизнеса

Crew AI — один из самых популярных агентных фреймворков

Время на прочтение7 мин
Количество просмотров4K

Если ваш ИИ ещё не слал пассивно-агрессивные сообщения в Slack — вы не жили.

Марк Твен

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

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

Давайте рассмотрим базовую структуру Crew:

Агенты: Рабочие лошадки вашей AI-команды. Каждый из них запрограммирован на выполнение конкретной роли (например, «Аналитик кото-мемов» или «Ревьювер кода») и обладает набором инструментов. Чтобы слышать в реальном  времени, как они жалуются на свою нагрузку, установите параметр verbose=True.

Задачи: Список дел, который вы выдаёте своим агентам. Например, «Сгенерировать 10 каламбуров о квантовых вычислениях» или «Отладить этот код, притворившись пиратом». Задачи можно выстраивать в цепочки и расставлять приоритеты.

Процессы: Crew AI предлагает варианты как координировать работу, такие как иерархический (агент-CEO раздаёт приказы менеджерам, которые делегируют задачи исполнителям) или последовательный (задачи движутся как конвейер). Выбирайте с умом, если не хотите, чтобы ваша задача «Создать кото-мемы» застряла после задачи «Разрешить проблему изменение климата».

Инструменты: Нужно вызвать API, выполнить парсинг веб-страницы или отправить пассивно-агрессивное сообщение в Slack? Инструменты позволяют вашим агентам делать это.

Давайте создадим нечто вроде системы маркетинговых исследований. Вы передаете ей название компании, и она узнаёт о ней всё: от общих сведений до информации о лицах, принимающих решения. Мы будем использовать Google Collab для удобного обмена.

Фреймворк Crew AI позволяет создавать автономные команды агентов для решения сложных рабочих процессов. В этой системе маркетинговых исследований две команды работают в иерархической структуре для создания подробного отчёта о компании.

Сначала давайте попросим DeepSeek создать план для такой системы, вот что он выдает:

План

Настройка окружения – Установите необходимые пакеты: crewai, openai, langchain, crewai-tools, gdown и selenium.
– Настройте Selenium с безголовым Chromium (включая управление cookie и подделку user-agent).

Подготовка инструментов и утилит – Настройте инструменты для веб-скрейпинга и поиска (например, SerperDevTool, WebsiteSearchTool, ScrapeWebsiteTool).
– Создайте утилиты для имитации задержек, характерных для человека, кэширования полученного HTML и парсинга HTML с помощью LLM.

Разработка агентов Company Analyst: Роль: Собирать общую информацию о компании (индустрия, специализация, последние события) с помощью инструментов веб-поиска и скрейпинга.

Case Studies Analyst: Роль: Извлекать релевантные кейс-стадии из внутреннего хранилища (Google Doc) с помощью семантического поиска.

Decision Maker Analyst: Роль: Извлекать ключевые профили руководителей из LinkedIn с помощью скрейпера на базе Selenium.

Manager Agent (Sales Strategist): Роль: Делегировать задачи аналитикам, объединять их результаты и создавать связный отчёт в формате markdown.

Определение задач – Определите задачи с чёткими инструкциями (например, «Исследовать компанию "X"» и «Определить лиц, принимающих решения»).
– Установите ожидаемый формат вывода (отчёт в markdown без блоков кода).

Оркестрация команды – Организуйте агентов в иерархическую команду с помощью Crew AI.
– Назначьте задачи соответствующим агентам и настройте процесс (менеджер контролирует делегирование).
– Запустите команду с информацией о компании и выполните рабочий процесс.

Интеграция и тестирование – Интегрируйте извлечение HTML на основе LLM для структурирования необработанных данных.
– Реализуйте кэширование для уменьшения повторного скрейпинга.
– Протестируйте систему на реальных данных (например, на страницах LinkedIn) и настройте её для работы с динамически загружаемым контентом.

Финализация – Объедините выводы всех агентов в окончательный отчёт.
– Проверьте точность данных и настройте обработку ошибок или задержки по мере необходимости.
– Разверните или расширьте систему для дальнейших задач маркетинговых исследований.

Теперь, когда у нас есть план, давайте напишем код.

web_search_tool = SerperDevTool()
website_scrape_tool = ScrapeWebsiteTool()
case_studies_tool = GetOurCompanyCaseStudies()
 
inputs = {
    'company': "Microsoft"
}
 
company_researcher = Agent(
    role="Company Analyst",
    goal="Analyze the company, gather data by reviewing its social media and website, and identify pain points.",
    backstory=f"You are an experienced analyst with expertise in business and process automation at {OUR_COMPANY}. Your task is to gather information that the sales department will use to develop hypotheses for client outreach.",
    tools=[web_search_tool, website_scrape_tool],
    verbose=True,
    allow_delegation=False,
    llm=llm
)
 
case_studies_researcher = Agent(
    role="Case Studies Analyst",
    goal="Analyze the company, gather data by reviewing its social media and website, identify pain points, and determine the most relevant case studies we can present to the company.",
    backstory=f"You are an experienced analyst with expertise in business and process automation at {OUR_COMPANY}. Your task is to gather information and select relevant case studies, which the sales department will use to develop hypotheses for outreach to clients.",
    tools=[web_search_tool, case_studies_tool, website_scrape_tool],
    verbose=True,
    allow_delegation=True,
    llm=llm
)
 
decision_makers_researcher = Agent(
    role="Decision Maker Analyst",
    goal="Analyze the key figures of the company, their interests, communication style, and level of technical knowledge.",
    backstory=f"A specialist in analyzing people and decision-makers, skilled in identifying the motivation of business leaders. You work at {OUR_COMPANY}. Your task is to gather information (company activities, recent social media posts, hobbies, place of residence) about the executives of potential clients, which the sales department will use to develop hypotheses for outreach to clients.",
    tools=[website_scrape_tool, web_search_tool],
    verbose=True,
    allow_delegation=False,
    llm=llm
)
 
manager = Agent(
    role="Sales Strategist",
    goal="Manager of a team that researches a company and creates detailed reports based on data analysis and research findings about potential clients for sales team to use for their outreach strategy.",
    backstory="Efficiently manage the crew and ensure high-quality task completion. You're known for your ability to turn complex data into clear and concise reports, making it easy for others to understand and act on the information you provide.",
    verbose=True,
    allow_delegation=True,
    llm=llm_o1
)
task_research_company = Task(
    description=(
        "Research the company '{company}' and gather information about: industry, specialization, and recent events.\n"
        "The company name is exactly as it is spelled (including any special characters)—make sure you don’t mix it up with similarly named companies.\n"
        "Make sure to analyze their LinkedIn and website.\n"
        "Find similar cases from our Case Studies and mention them.\n"
        "Don’t draw any conclusions—just gather data into a report.\n"
        f"Today is {today}."
 
    ),
    expected_output="A fully fledge report with the mains topics, each with a full section of information. Formatted as markdown without '```'"  
)
 
sales_research_crew = Crew(
    agents=[company_researcher, decision_makers_researcher, case_studies_researcher],
    tasks=[task_research_company],
    verbose=True,
    memory=True,
    manager_agent=manager,
    process=Process.hierarchical
)
 
company_research_results = sales_research_crew.kickoff(inputs=inputs)
 
print(company_research_results)

Полная версия доступна здесь.

Давайте посмотрим что код делает:

Команда аналитиков компании

Company Analyst Crew
Аналитик компании
изучает онлайн-присутствие организации — анализирует её сайт и социальные сети, чтобы выявить отраслевые тренды, последние события и общие сведения.

Аналитик кейсов ищет в нашей базе данных кейс-стадий (скачанных из Google Docs!) примеры, которые могут быть релевантны для целевой компании.

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

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

Команда, ориентированная на LinkedIn

Исследователь LinkedIn использует наш кастомный инструмент GetCompanyLinkedinPeople для скрейпинга страниц LinkedIn, аккуратно обрабатывая аутентификацию через cookies и имитируя поведение человека с помощью Selenium.

Проверяющий данные (Data Checker) верифицирует и сопоставляет информацию, извлечённую из LinkedIn и других источников, что помогает обеспечить надежность итогового отчёта.

Как работает система

Когда вы вызываете метод kickoff у команды с входными данными вроде { 'company': 'Microsoft' }, система следует иерархическому процессу. Агент-менеджер делегирует задачи специализированным агентам, каждый из которых использует свой набор инструментов (от веб-поиска и скрейпинга сайтов до семантического поиска в наших кейс-стадиях) для выполнения своей задачи.
Результат? Полноценный отчёт в формате markdown.

Использование режима Process.hierarchical гарантирует, что стратег по продажам (Менеджер) не только делегирует задачи, но и синтезирует результаты, полученные от каждого подчинённого агента. Такой иерархический рабочий процесс минимизирует случайность в действиях агентов.

При параллельной обработке данных несколькими агентами крайне важно обеспечить качество информации. Включение агента Data Checker во второй команде помогает проверить целостность и достоверность собранных данных.

Tools

Каждый агент оснащён тщательно подобранным набором инструментов . Например:

  • Веб-поиск и скрейпинг: агенты, такие как Аналитик компании и Аналитик по лицам, принимающим решения, используют инструменты вроде SerperDevTool и ScrapeWebsiteTool для навигации и извлечения данных из интернета.

  • Скрейпинг LinkedIn: наш кастомный инструмент GetCompanyLinkedinPeople, построенный на базе Selenium, имитирует поведение человека при просмотре, что позволяет справляться с динамическим контентом и требованиями авторизации LinkedIn.

  • Извлечение текста из Google Docs: инструмент GetOurCompanyCaseStudies загружает и кэширует наши кейс-стадии, позволяя выполнять семантический поиск по хорошо поддерживаемому репозиторию.

В Crew AI есть много встроенных инструментов, так же можно добавить свои, я например добавил линкедин парсер.

Выводы

Crew — довольно неплохой фреймворк. Он достаточно стабилен и прост в использовании. Он помогает абстрагировать достаточно много шаблонного кода, но при этом позволяет тонко настраивать процесс. Мне он кажется достаточно понятным и лёгким для изучения.

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

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


Пишете ваши вопросы в комментариях.

Всем добра!

Теги:
Хабы:
+10
Комментарии6

Публикации

Информация

Сайт
ai.raftds.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
Евгений Кокуйкин

Истории