> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-ru/platformy-i-agenty-ii/crewai.md).

# Многоагентный фреймворк CrewAI

Разверните CrewAI на Clore.ai — оркестрируйте команды автономных ИИ-агентов с ролями для сложных многошаговых задач, используя любого LLM-провайдера.

## Обзор

[CrewAI](https://github.com/crewAIInc/crewAI) — это передовая платформа для оркестрации **автономных ИИ-агентов, разыгрывающих роли**, с **44K+ звёзд на GitHub**. В отличие от систем с одним агентом, CrewAI позволяет вам определять специализированных агентов (Исследователь, Писатель, Кодер, Аналитик...), которые работают вместе как «команда», чтобы выполнять сложные задачи — у каждого агента своя роль, цель, предыстория и набор инструментов.

На **Clore.ai**, CrewAI можно развернуть в Docker-окружении всего за **$0.05–0.20/ч**. Хотя сам CrewAI ограничен CPU (он оркестрирует API-вызовы), если объединить его с локальным сервером Ollama или vLLM на том же GPU-узле, вы получите полностью приватную многоагентную систему, способную работать офлайн.

**Ключевые возможности:**

* 👥 **Многоагентные команды** — задавайте персонажи агентов с ролями, целями и предысториями
* 🎯 **Делегирование задач** — управляющий агент автоматически назначает задачи нужному специалисту
* 🛠️ **Экосистема инструментов** — веб-поиск, ввод-вывод файлов, выполнение кода, доступ к базе данных, собственные инструменты
* 🔁 **Последовательное и параллельное выполнение** — выполняйте задачи по порядку или запускайте независимые задачи одновременно
* 🧠 **Память агента** — типы краткосрочной, долгосрочной, сущностной и контекстной памяти
* 🔌 **Независим от LLM** — работает с OpenAI, Anthropic, Google, Ollama, Groq, Azure и другими
* 📊 **CrewAI Studio** — визуальный интерфейс для создания команд без кода (enterprise)
* 🚀 **Пайплайны** — объединяйте несколько команд в цепочки для сложных многоэтапных рабочих процессов

***

## Требования

CrewAI — это библиотека на Python. Она работает на CPU и требует только установленной в системе среды Python 3.10+ или Docker. GPU необязателен, но открывает возможности мощного локального инференса моделей.

| Конфигурация                           | GPU             | VRAM  | Системная RAM | Диск   | Цена Clore.ai                               |
| -------------------------------------- | --------------- | ----- | ------------- | ------ | ------------------------------------------- |
| **Минимальная** (облачные API)         | Нет / CPU       | —     | 2 ГБ          | 10 ГБ  | \~$0.03/ч (CPU)                             |
| **Стандартный**                        | Нет / CPU       | —     | 4 ГБ          | 20 ГБ  | \~$0.05/ч                                   |
| **+ Локальная LLM (маленькая)**        | RTX 3080        | 10 ГБ | 8 ГБ          | 40 ГБ  | $0.05–0.19/ч                                |
| **+ Локальная LLM (большая)**          | RTX 3090 / 4090 | 24 ГБ | 16 ГБ         | 60 ГБ  | $0.07–0.21/ч                                |
| **+ Высококачественная локальная LLM** | A100 40 ГБ      | 40 ГБ | 32 ГБ         | 100 ГБ | [голое железо](https://clore.ai/bare-metal) |

### API-ключи

CrewAI работает с большинством основных поставщиков LLM. Вам нужен как минимум один:

* **OpenAI** — GPT-4o (лучшая способность к рассуждению для сложных задач)
* **Anthropic** — Claude 3.5 Sonnet (отлично подходит для команд с большим объёмом написания)
* **Groq** — бесплатный тариф, быстрый инференс (Llama 3 70B)
* **компонент** — полностью локально, API-ключ не нужен (см. [Ускорение на GPU](#gpu-acceleration))

***

## Быстрый старт

### 1. Арендуйте сервер Clore.ai

Войдите в [маркетплейсе clore.ai](https://clore.ai):

* **только CPU** если используете облачные LLM API
* **RTX 3090/4090** для локального инференса Ollama
* Доступ по SSH включён
* Для использования CLI особых требований к портам нет (открывайте порты только для веб-интерфейсов)

### 2. Подключитесь и подготовьте окружение

```bash
ssh root@<clore-server-ip> -p <ssh-port>

# Обновить систему
apt-get update && apt-get upgrade -y

# Установить Python 3.11 (если ещё не установлен)
apt-get install -y python3.11 python3.11-venv python3-pip
python3 --version   # Должно быть 3.10+

# Проверить Docker
docker --version
```

### 3. Вариант A — прямая установка через pip (самый быстрый)

```bash
# Создать виртуальное окружение
python3 -m venv crewai-env
source crewai-env/bin/activate

# Установить CrewAI со всеми инструментами
pip install crewai crewai-tools

# Проверьте установку
python -c "import crewai; print(crewai.__version__)"
crewai --version
```

### 4. Вариант B — Docker-контейнер (рекомендуется для воспроизводимости)

```bash
# Создать каталог проекта
mkdir my-crew && cd my-crew

# Создать Dockerfile
cat > Dockerfile << 'EOF'
FROM python:3.11-slim

# Установить системные зависимости
RUN apt-get update && apt-get install -y \\
    curl \\
    git \\
    && rm -rf /var/lib/apt/lists/*

# Задать рабочий каталог
WORKDIR /app

# Установить CrewAI и распространённые инструменты
RUN pip install --no-cache-dir \
    crewai \
    crewai-tools \
    langchain-openai \
    langchain-anthropic \
    python-dotenv

# Скопировать код приложения
COPY . .

# Команда по умолчанию
CMD ["python", "main.py"]
EOF

# Собрать образ
docker build -t my-crewai-app .
```

### 5. Создайте свою первую команду

```bash
# Инициализировать новый проект CrewAI с помощью CLI
source crewai-env/bin/activate
crewai create crew my-research-crew
cd my-research-crew

# Настроить API-ключи
cat > .env << 'EOF'
OPENAI_API_KEY=sk-...
# Или для Anthropic:
# ANTHROPIC_API_KEY=sk-ant-...
# Или для Ollama (ключ не нужен):
# OPENAI_API_BASE=http://localhost:11434/v1
# OPENAI_API_KEY=ollama
EOF

# Установить зависимости проекта
crewai install

# Запустить команду
crewai run
```

***

## Конфигурация

### Структура проекта (из `crewai create`)

```
my-research-crew/
├── .env                    # API-ключи и настройки
├── pyproject.toml          # Зависимости
├── src/
│   └── my_research_crew/
│       ├── config/
│       │   ├── agents.yaml   # Определения агентов
│       │   └── tasks.yaml    # Определения задач
│       ├── tools/
│       │   └── custom_tool.py  # Ваши собственные инструменты
│       ├── crew.py           # Сборка команды
│       └── main.py           # Точка входа
```

### agents.yaml — Определите ваших агентов

```yaml
researcher:
  role: >
    Старший аналитик-исследователь
  goal: >
    Выявляйте передовые разработки в области {topic} и синтезируйте практические выводы
  backstory: >
    Вы эксперт-исследователь с талантом находить и связывать информацию
    из разных источников. У вас острый глаз на достоверность и релевантность.
  tools:
    - SerperDevTool
    - ScrapeWebsiteTool
  llm: gpt-4o                # Можно задавать для каждого агента
  verbose: true
  max_iter: 15               # Максимальное число итераций рассуждения
  memory: true               # Включить память агента

writer:
  role: >
    Экспертный технический писатель
  goal: >
    Превращайте сложные исследования в ясный, убедительный и точный контент
  backstory: >
    Вы создаёте объяснения, которые делают сложные темы доступными, не жертвуя глубиной.
    Вы цитируете источники и структурируете контент для максимальной читаемости.
  llm: claude-3-5-sonnet-20241022
  verbose: true
```

### tasks.yaml — Определите задачи

```yaml
research_task:
  description: >
    Изучите последние разработки в области {topic} за последние 6 месяцев.
    Определите ключевые тенденции, прорывы и последствия.
    Соберите как минимум 10 достоверных источников.
  expected_output: >
    Подробный исследовательский отчёт с выводами, сгруппированными по темам,
    включая URL-адреса источников и даты публикации.
  agent: researcher

writing_task:
  description: >
    Используя исследовательский отчёт, напишите подробный пост в блоге о {topic}.
    Целевой объём: 1500–2000 слов. Включите заголовок, введение, основные разделы,
    и заключение с прогнозом на будущее.
  expected_output: >
    Пост в блоге, готовый к публикации, в формате Markdown.
  agent: writer
  context:
    - research_task    # Задача по написанию получает результат исследователя
  output_file: output/blog_post.md
```

### crew\.py — Соберите команду

```python
from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
from crewai_tools import SerperDevTool, ScrapeWebsiteTool

@CrewBase
class MyResearchCrew():
    """Команда для исследований и написания"""
    agents_config = 'config/agents.yaml'
    tasks_config = 'config/tasks.yaml'

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

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

    @task
    def research_task(self) -> Task:
        return Task(config=self.tasks_config['research_task'])

    @task
    def writing_task(self) -> Task:
        return Task(
            config=self.tasks_config['writing_task'],
            output_file='output/blog_post.md'
        )

    @crew
    def crew(self) -> Crew:
        return Crew(
            agents=self.agents,
            tasks=self.tasks,
            process=Process.sequential,  # or Process.hierarchical
            verbose=True,
            memory=True,
            max_rpm=10   # Rate limit API calls
        )
```

### Запуск с Docker Compose (с Ollama)

```yaml
# docker-compose.yml
version: "3.8"

services:
  crewai:
    build: .
    volumes:
      - ./src:/app/src
      - ./output:/app/output
    environment:
      - OPENAI_API_BASE=http://ollama:11434/v1
      - OPENAI_API_KEY=ollama
      - OPENAI_MODEL_NAME=llama3.1:70b
      - SERPER_API_KEY=${SERPER_API_KEY}
    depends_on:
      - ollama

  ollama:
    image: ollama/ollama:latest
    volumes:
      - ollama_data:/root/.ollama
    ports:
      - "11434:11434"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama_data:
```

```bash
# Запустить стек
docker compose up -d ollama

# Скачайте свою модель
docker compose exec ollama ollama pull llama3.1:70b

# Запустить команду
docker compose run --rm crewai python src/my_research_crew/main.py
```

***

## Ускорение на GPU

Сам CrewAI не использует GPU — его использует вызываемая им LLM. Запускайте Ollama или vLLM на том же сервере Clore для локального инференса с ускорением на GPU.

### Настройка Ollama (рекомендуется для простоты)

```bash
# Установить Ollama на хост
curl -fsSL https://ollama.com/install.sh | sh

# Проверить обнаружение GPU
nvidia-smi
ollama run llama3:8b "Test"   # Должен использовать GPU

# Скачайте модели для разных задач агентов
ollama pull llama3.1:8b          # Быстрое, лёгкое рассуждение
ollama pull llama3.1:70b         # Сложное рассуждение (требуется A100+)
ollama pull codestral:latest     # Специализирована для кодовых агентов
ollama pull nomic-embed-text     # Для embeddings памяти/RAG

# Настроить CrewAI для использования Ollama
export OPENAI_API_BASE=http://localhost:11434/v1
export OPENAI_API_KEY=ollama
export OPENAI_MODEL_NAME=llama3.1:8b
```

### Настройте LLM CrewAI для каждого агента

```python
from crewai import Agent, LLM

# Использовать Ollama для конкретного агента
local_llm = LLM(
    model="ollama/llama3.1:8b",
    base_url="http://localhost:11434"
)

# Использовать облачный API для другого агента (например, для сложного рассуждения)
cloud_llm = LLM(
    model="gpt-4o",
    api_key="sk-..."
)

researcher = Agent(
    role="Researcher",
    goal="Find information",
    backstory="Expert researcher",
    llm=local_llm    # Использует локальный GPU
)

strategist = Agent(
    role="Strategist",
    goal="Plan actions",
    backstory="Strategic thinker",
    llm=cloud_llm    # Использует облачный API
)
```

### Рекомендации по моделям для задач агентов

| Тип задачи               | Рекомендуемая модель | VRAM   | Примечания                   |
| ------------------------ | -------------------- | ------ | ---------------------------- |
| Исследование + веб-поиск | Llama 3.1 70B        | 40 ГБ  | Лучшее локальное рассуждение |
| Генерация кода           | Codestral 22B        | 13 ГБ  | Специализированная для кода  |
| Написание                | Llama 3.1 8B         | 6 ГБ   | Быстро, хорошее качество     |
| Сложная оркестрация      | GPT-4o (API)         | —      | Лучшая в целом               |
| Embeddings/память        | nomic-embed-text     | < 1 ГБ | Требуется для памяти         |

> См. [Ollama на Clore.ai](/guides/guides_v2-ru/yazykovye-modeli/ollama.md) и [vLLM на Clore.ai](/guides/guides_v2-ru/yazykovye-modeli/vllm.md) полные руководства по настройке инференса.

***

## Советы и лучшие практики

### Оптимизация затрат

```bash
# Отслеживайте затраты на API LLM с помощью встроенного учёта использования CrewAI
# Добавьте в свою команду:
result = crew.kickoff(inputs={"topic": "AI agents"})
print(f"Total tokens used: {result.token_usage}")

# Используйте более дешёвые модели для простых задач, а премиальные — для сложных
# Llama 3.1 8B в Ollama = $0 стоимости API
# GPT-4o = примерно $0.005 за 1K входных токенов

# Установите max_iter, чтобы предотвратить неуправляемое поведение агентов
Agent(max_iter=10, max_execution_time=120)  # Тайм-аут 2 минуты

# Кэшируйте ответы LLM во время разработки
os.environ["CREWAI_DISABLE_CACHE"] = "false"
```

### Запуск команд как постоянного сервиса

```bash
# Предоставляйте команды через конечную точку FastAPI
pip install fastapi uvicorn

cat > server.py << 'EOF'
from fastapi import FastAPI, BackgroundTasks
from my_research_crew.crew import MyResearchCrew
import asyncio

app = FastAPI()
results = {}

@app.post("/run/{topic}")
async def run_crew(topic: str, background_tasks: BackgroundTasks):
    job_id = f"job-{topic}-{len(results)}"
    background_tasks.add_task(execute_crew, job_id, topic)
    return {"job_id": job_id, "status": "started"}

async def execute_crew(job_id: str, topic: str):
    crew = MyResearchCrew().crew()
    result = crew.kickoff(inputs={"topic": topic})
    results[job_id] = str(result)

@app.get("/result/{job_id}")
async def get_result(job_id: str):
    return {"result": results.get(job_id, "в ожидании")}

EOF

# Запустить сервер
uvicorn server:app --host 0.0.0.0 --port 8080 &

# Запустить выполнение команды
curl -X POST http://<clore-ip>:8080/run/quantum-computing
```

### Полезные встроенные инструменты CrewAI

```python
from crewai_tools import (
    SerperDevTool,        # Поиск в Google через API Serper
    ScrapeWebsiteTool,    # Веб-скрейпинг
    FileReadTool,         # Чтение локальных файлов
    FileWriterTool,       # Запись файлов
    DirectoryReadTool,    # Список содержимого каталога
    CodeInterpreterTool,  # Выполнение кода Python
    GithubSearchTool,     # Поиск репозиториев GitHub
    YoutubeVideoSearchTool, # Поиск YouTube
    PGSearchTool,         # Запросы к PostgreSQL
)
```

### Реализация human-in-the-loop

```python
# Запросить ввод от человека для конкретной задачи
task = Task(
    description="Исследовать {topic}",
    expected_output="Отчёт об исследовании",
    agent=researcher,
    human_input=True    # Приостанавливает и запрашивает обратную связь у пользователя
)
```

***

## Устранение неполадок

### "openai.AuthenticationError" даже с действительным ключом

```bash
# Проверьте, что ваш API-ключ загружен
python3 -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.getenv('OPENAI_API_KEY')[:10])"

# Если используете Ollama, убедитесь, что заданы следующие параметры:
export OPENAI_API_BASE=http://localhost:11434/v1
export OPENAI_API_KEY=ollama
export OPENAI_MODEL_NAME=llama3.1:8b

# Проверьте, что Ollama доступна
curl http://localhost:11434/v1/models
```

### Агент застрял в цикле рассуждений

```bash
# Установите жесткий лимит на количество итераций
Agent(
    max_iter=10,            # Максимальное количество шагов рассуждения
    max_execution_time=300  # Жесткий тайм-аут 5 минут
)

# Включите verbose, чтобы увидеть, где происходит цикл
Agent(verbose=True)

# Проверьте, поддерживает ли модель вызов инструментов
# Некоторые небольшие модели не поддерживают; используйте llama3.1 или mistral-nemo
```

### Инструменты CrewAI не работают (SerperDevTool 403)

```bash
# Для SerperDevTool требуется бесплатный API-ключ с serper.dev
export SERPER_API_KEY=your-serper-key

# Альтернатива: используйте DuckDuckGo (API-ключ не нужен)
from langchain_community.tools import DuckDuckGoSearchRun
from crewai import tool

@tool("DuckDuckGo Search")
def ddg_search(query: str) -> str:
    """Искать в интернете с помощью DuckDuckGo."""
    return DuckDuckGoSearchRun().run(query)
```

### Ошибки памяти (ChromaDB / эмбеддинги)

```bash
# Память CrewAI использует ChromaDB для векторного хранения
# Если это не работает, проверьте свободное место на диске и права доступа
df -h
ls -la ~/.local/share/crewai/

# Очистить поврежденную память
rm -rf ~/.local/share/crewai/

# Или отключите память, если она не нужна
Crew(memory=False)

# Если используете embeddings Ollama, убедитесь, что модель загружена
docker exec ollama ollama pull nomic-embed-text
```

### Сборка Docker завершается ошибкой из-за несовпадения ARM/x86

```bash
# Серверы Clore.ai — x86_64; укажите платформу явно:
docker build --platform linux/amd64 -t my-crewai-app .

# Или в docker-compose.yml:
services:
  crewai:
    platform: linux/amd64
    build: .
```

### Ограничение частоты запросов со стороны API LLM

```bash
# Уменьшите количество запросов в минуту
Crew(max_rpm=5)   # 5 запросов в минуту

# Добавьте логику повторных попыток в конфигурацию LLM
LLM(
    model="gpt-4o",
    max_retries=3,
    timeout=60
)
```

***

## Дополнительное чтение

* [Официальная документация CrewAI](https://docs.crewai.com)
* [Репозиторий CrewAI на GitHub](https://github.com/crewAIInc/crewAI)
* [Документация по инструментам CrewAI](https://docs.crewai.com/concepts/tools)
* [Репозиторий примеров CrewAI](https://github.com/crewAIInc/crewAI-examples)
* [Запуск Ollama на Clore.ai](/guides/guides_v2-ru/yazykovye-modeli/ollama.md)
* [Запуск vLLM на Clore.ai](/guides/guides_v2-ru/yazykovye-modeli/vllm.md)
* [Сравнение GPU на Clore.ai](/guides/guides_v2-ru/nachalo-raboty/gpu-comparison.md)
* [Discord-сообщество CrewAI](https://discord.com/invite/X4JWnZnxPb)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/platformy-i-agenty-ii/crewai.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
