Перейти к содержанию
modelium.
Начать с задачи
←

CrewAI с Ollama: локальная модель и проверка вызова инструмента

CrewAI может передать задачу модели Qwen3:4b, работающей через Ollama на вашем компьютере. Для проверки агента мало получить правдоподобный ответ: нужно увидеть запись о выполнении заранее ограниченного тестового инструмента и сверить её с ответом. Этот инженерный пример для Linux и Python 3.12 сверён с документацией, но редакция не запускала модель и не доказывала офлайн-режим всего компьютера.

Инженерный гайд, не домашний рецепт с интерфейсом. Нужны Linux, терминал, Python 3.12 и готовность читать короткий Python-файл. Сверено по CrewAI Git 1d401543 и документации Ollama 8 октября 2026 года; Modelium не запускал программу или модель. Сеть понадобится для установки пакетов и загрузки весов. Выполнение через localhost само по себе не доказывает отсутствия других сетевых соединений. s1 s8

Какую задачу решает этот пример?

Представьте учебную запись: «Заказ A-17: встреча в четверг». Агент должен спросить у одного разрешённого инструмента день встречи и вернуть его. Если он просто напишет «четверг» без вызова инструмента, тест не пройден: модель могла угадать из задания. CrewAI управляет агентом и задачей; Ollama обслуживает локальную языковую модель; инструмент исполняет ваш Python-код только если приложение получило и приняло вызов. Именно ответ сервера модели, реальная запись инструмента и конечный ответ проверяются отдельно. s2 s3 s4 s9

Для теста выбрана конкретная модель qwen3:4b: официальный каталог Ollama помечает её как поддерживающую инструменты. Это не гарантия, что вызов состоится на вашем компьютере или в вашей версии CrewAI. Файл в каталоге указан как 2,5 ГБ, но это размер загрузки, а не минимальная оперативная или видеопамять; подтверждённого универсального минимума RAM/VRAM для этого стека у нас нет. Сначала оцените свободные ресурсы своего компьютера. s7

Что подготовить в Linux?

  1. Установите Ollama по базовому гайду и откройте терминал. Выполните ollama pull qwen3:4b — эта команда скачивает модель; затем ollama list должен показывать точный тег. Проверить ответ сервера можно командой curl -fsS http://127.0.0.1:11434/api/tags: в JSON ищите qwen3:4b. Если Ollama уже запущена приложением, второй сервер не запускайте. s7 s8
  2. Создайте пустую тестовую папку без ключей, документов и рабочего проекта. Установите Python 3.12 и uv по официальной инструкции CrewAI; в папке создайте окружение uv venv --python 3.12 и установите uv pip install 'crewai[litellm]==1.15.25' (версия закреплена на просмотренном Git-коммите). Перед работой в том же терминале активируйте source .venv/bin/activate. Дождитесь завершения установки без ошибок; не переиспользуйте рабочий профиль с облачными ключами. Пакеты и веса требуют сети, но исполнение локальной модели направляется на адрес этой машины. s1 s10 s11
  3. В этом терминале до запуска своего файла установите export CREWAI_DISABLE_TELEMETRY=true OTEL_SDK_DISABLED=true. Не включайте share_crew, tracing, поиск в сети, knowledge sources, memory, planning и автоматические инструменты, если проверяете именно узкий локальный маршрут. Первый параметр отключает телеметрию CrewAI, второй — OpenTelemetry; ни один не служит доказательством отсутствия всех соединений сторонних библиотек. Если нужен закрытый контур, проведите отдельную сетевую проверку. s5 s6

Как связать CrewAI с моделью и ограниченным действием?

В отдельном файле Python настройте LLM(model="ollama/qwen3:4b", base_url="http://127.0.0.1:11434"). Для Ollama CrewAI использует дополнительную библиотеку LiteLLM; укажите этот же объект в llm и function_calling_llm агента, чтобы вызов инструмента не ушёл к модели по умолчанию. Не задавайте облачного запасного LLM. Если провайдер или пакет не распознан, проверьте установленную версию и crewai[litellm], не подставляйте настоящий облачный API-ключ. s1 s2

Создайте собственную функцию check_day(code: str) -> str с @tool("check_day") из crewai.tools. Её единственное разрешённое действие: сравнить аргумент с буквальным A-17, записать факт вызова в пустой локальный файл tool-audit.txt и вернуть четверг при совпадении либо неизвестный код при несовпадении. Добавьте краткую строку документации к функции — зачем агенту этот инструмент. Не давайте функции доступ к сети, оболочке, исходным файлам или пользовательским данным. Декоратор и список инструментов агента описаны в руководстве CrewAI; этот простой пример — независимая редакционная адаптация, не скопированный чужой скрипт. s4

Создайте Agent с понятной ролью «проверяющий день заказа», tools=[check_day], выбранными llm и function_calling_llm, allow_delegation=False, allow_code_execution=False, max_iter=3. Дайте ему одну Task: «Спроси у инструмента день для A-17 и верни день; не угадывай»; ожидаемый выход (expected_output) — день и код заказа. Передайте агент и задачу в Crew(agents=[agent], tasks=[task], process=Process.sequential, memory=False, planning=False, share_crew=False) и вызовите kickoff(). В документации описаны конструкторы агента, задачи, инструмента и Crew; их надо сверить с установленной версией пакета. s2 s3 s4 s5

Важное ограничение: здесь приведён состав безопасного учебного файла и ключевые аргументы API, а не готовый к копированию многострочный скрипт. Текущий рендерер Modelium не сохраняет отступы Python-фрагментов, поэтому публиковать потенциально сломанный код как исполняемый пример было бы нечестно. Если вам нужен код целиком, начните с официальных примеров инструментов CrewAI и замените их действие на описанную проверку. Установка пакета и сборка этого файла редакцией не проверялись. s2 s3 s4 s5

Как понять, что агент действительно выполнил действие?

Перед каждым прогоном удалите только учебный tool-audit.txt в пустой тестовой папке. После kickoff() проверьте три вещи: в журнале CrewAI есть вызов check_day с кодом A-17; в tool-audit.txt появилась запись о вызове; конечный ответ соответствует вашей записи и содержит «четверг». Пустой файл, другой код, отсутствие следа вызова либо один правдоподобный финальный ответ означают, что проверка действия не прошла. Введите затем несуществующий код B-00: инструмент должен вернуть «неизвестный код», а агент не должен придумывать день. Этот отрицательный тест — предложенный протокол читателя, не измеренный Modelium результат. s4 s9

Если модель отвечает текстом, похожим на вызов, но tool-audit.txt пуст, проверьте точный тег, адрес 11434, function_calling_llm, список tools и версию LiteLLM. Не объявляйте запуск успешным только по распечатке CrewAI; читайте след исполнения. При необходимости оцените сеть после подготовки зависимостей; локальность модели не равна полной офлайн-работе агента. s1 s2 s9

Следующий шаг: разберите полный цикл tool calling и сравните предложение модели с записью фактического действия. Для остановки учебного процесса завершите Python-программу; модель можно выгрузить средствами Ollama, а тестовое окружение и папку удалить после просмотра записей. s8 s9

Источники

  1. CrewAI: LLM providers и Ollama (Git, закреплённая ревизия) — revision 1d4015439a7a7b13d473a7df06da7d5c69f3cd08. Получено 08.10.2026.
  2. CrewAI: Agent, инструменты и ограничения (Git) — revision 1d4015439a7a7b13d473a7df06da7d5c69f3cd08. Получено 08.10.2026.
  3. CrewAI: Tasks и expected_output (Git) — revision 1d4015439a7a7b13d473a7df06da7d5c69f3cd08. Получено 08.10.2026.
  4. CrewAI: пользовательский @tool (Git) — revision 1d4015439a7a7b13d473a7df06da7d5c69f3cd08. Получено 08.10.2026.
  5. CrewAI: Crew и последовательная задача (Git) — revision 1d4015439a7a7b13d473a7df06da7d5c69f3cd08. Получено 08.10.2026.
  6. CrewAI: настройки телеметрии (Git) — revision 1d4015439a7a7b13d473a7df06da7d5c69f3cd08. Получено 08.10.2026.
  7. Ollama: официальный каталог Qwen3:4b. Получено 08.10.2026.
  8. Ollama: локальные модели и облачный API — Quickstart. Получено 08.10.2026.
  9. Ollama: модель предлагает вызов, клиент выполняет инструмент. Получено 08.10.2026.
  10. CrewAI: версия пакета и диапазон Python (Git) — revision 1d4015439a7a7b13d473a7df06da7d5c69f3cd08. Получено 08.10.2026.
  11. CrewAI: установка и uv (Git) — revision 1d4015439a7a7b13d473a7df06da7d5c69f3cd08. Получено 08.10.2026.