Галоўная / Артыкулы

Стварэнне автономных агентаў AI локальна: паследоўны карэткап

Аўтонамныя агенты AI, якія працуюць локальна на апаратызе з 16 ГБ RAM: параболічнае вылічэнне модэляў Ollama і фрэймворкаў, такіх як CrewAI, а пасля пошаговая стварэння.

Выдавец: REACTAPP.TOP20 хв чытання4685 слоў

Крыніцы: Building Autonomous AI Agents Locally: A Step-by-Step Guide for 16GB RAM Systems

Наступныя прытамлівкі паказваюць практычны шлях для выканання задачы «Стварэнне автонамных агентаў AI локальна: паследоўны вядар для сістэм з 16 ГБ RAM». Акцэнт ставіцца на контракты, перакананняя і месцы для коду, які можна легка заменіць, а не на мотывацыйныя аспекты.

Прабязь і проблемы

Калі працуеце над этапам «Прабязь і проблемы», спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыпання. Такі спіс дапамагае заліцвачваць пазнейшыя змены ў кодзе. Зберагаюце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцый павінны знаходзіцца ў адном месцы, куда аператары можуць адбавіць перагляд без неабяжнага чытання всіх элементаў. Стварайце контрольныя пункты пасля дорогіх крокаў. Продовжэнне выканання не павінна зноў стаўіць плата за той самы вызов LLM, калі аператар перапрыямляе выканання да наступнага элемента.

Частка 1: Выбір вашага аб’екта — Дылема выбору модэлі — Ацэнка местных модэляў для генеравання токенаў і эфектывнасці агента

Калі працуеце над часткай 1 «Выбір вашага аб’екта», спачатку запісайце умовы: неабходныя даныя, сігнал успеху і тое, што вядзецца пад частым нявыпаннем задачы. Такі спіс дапамагае заліцваты змяны ў кодзе пазнейша. Запісуйце адночасна шлях успеху і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некорэктных паведамленняў ёсць часткай продукту, а не етапамі далейшай дорабкі. Зберагаюце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перасылка ідэнтычных паведамленняў ёсць частай прычыной некарэткага выкарыстоўвання рэсурсаў.

Кандыдаты: Порэванне адны з аднаго

Калі працуеце з фазай «The Contenders A Head-to-Head», спачатку запісаце кантракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у случае частковага нявыпання. Такі спіс перакладзець пазнейшыя змены коду ў правільным напрамку. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыпання павінна вказваць на адну адповядальнасць, а не на заплутаны ланцюг задач. Зробіце перапактаванне пасля дорогіх крокаў. Програма не павінна зноў сцягваць плата за той самы вызов LLM, калі аператар праказвае пазнейшы вузел.

Qwen3.5:4b — Дэмон скорасці

Калі працуеце над стадзіяй Qwen3 5 4b, спачатку запісайце угоду: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс пераконтроўкаў дапамагае заліцвачыць пазнейшыя змены ў кодзе. Спрыймайце гэтую стадзію як угоду межа данымі і перакананымі выходамі. Дайце назву рэзультатам, задацьце крытэрыя успеху і не прымайце часткова завершаныя рэзультаты без паведамлення. Зробіце пераконтроўку пасля дорогіх крокаў. Програма для продакцыі не павінна зноў сцягваць плата за той самы вызов LLM, калі аператар праканае пазнейшы вузел.

Llama3.1:latest (8B) — Надзеяны генераліст

Калі працуеце з найновейшым 8B-варыантом Llama3 1, спачатку запісайце умовы вікорыстання: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс дапамагае заліцвачыць пазнейшыя змены ў кодзе.

Gemma4:12b-it-q4_K_M — Моцны інструмент для логічных вырахункаў

Gemma4 12b-it-q4KM: Этап аргументацыі працюе наякраўжэй, калі яго розглядаць як вімерную паверхню. Запісаўце адна «золатая» транскрыпцыя, адын прыклад неудачы і прымітку па поверненню да попярэдньего стану пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Задаўце ліміт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расшырваюць кантэкст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.

Qwen3.5:9b-q4_K_M — Выбар ідэальнага варыянта

Qwen3 5 9b-q4KM: Этап работае наяўней, калі яго спрыяваць як мерымае паверхне. Запісайце адну „золатую“ транскрыпцыю, адны прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Спрыяйце гэтым этапам як кантракту межа вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце крытэрыя успеху і адмовіцеся ад тыхоўскага частковага завершэння задання. Храніце стан графа ў простам і тыпаваным фармаце. Вкладзеныя блокі маскуюць інфармацыю пра тое, які вузел запісаў які поле, і спакшуюць возз'яданне пасля перарываў.

Аналіз порэйнавальных модэляў

Этап аналізу пораўнальной модэлі працюе наякша, калі яго розглядаць як вімерную плошчу. Запісаўце адна ідэальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Запісвайце часы выканання і кост токенав або запіта праза функцыональныя рэзултаты. Відразувая візуабельнасць костаў запобегае неспакойным рахункам, калі працэс пераходзіць з дэмавайнага рэжыма ў спяльныя сераўры. Задаце бюджэт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расшырваюць кантэкст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакойныя рахункі.

Вывад

Этап «The Verdict» працюе найкрашча, калі яго розглядаць як вімерную паверхню. Запісаце адна «золатая» версія даных, адзін прыклад неудачы і запіска пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Храніце настройкі параду з кодам програмы. Файлы сяродавішняе сераўісу, хранальнікі секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Храніце стан графа у простам і тыпаваным фармаце. Вкладныя блокі дадзеных маскуюць інфармацыю пра тое, калькі вузел запісаў калькі поле, і спакоююць працэс пасля перэрываў.

Частка 2: Падготовка апаратуры і налаштаванне локальных вычысленняў

Этап падчыробы апаратнага забезпечэння, які ўскладнены частка 2, працюе наяўнейша, калі яго расследжваць як вімерную паверхню. Запісаўце адна ідэальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Дакументаваць трэба як успішны, так і патовы шляхі. Перапрыбуткі, людзкія контрольныя пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней. Зберагачыце стан графаў у простам і тыпаванам фармаце. Вкладзеныя блокі маскуюць інфармацыю пра тое, які вузел запісаў кожны поле, і спакоююць працэс пасля перарываў.

Крок 1: Установіце Ollama — ваш локальны двыжак інферэнціі

Этап 1 – установка Ollama – працюе найкрашча, калі яго розглядаць як меркавыя паракетры. Запісайце адны ідэальны прыклад працы, адну сітуацыю неудачы і прыметкі па поверненні да пачатковага стану пры расшырэнні масштаба. Валіце вароты на маленькія, тэставаныя элементы замест большых скрыптов. Калі якісь крок не выйшаў, прычына неудачы павінна вказываць на адную конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зафіксавайце версію інтэрпрэтара і файл з параметрамі залежнасцяў пры тым, як учыце цыклы. Разніця ў версіях між ноутбукам і сервісам CI – гэта самая частая прычына тых, чыя дамы API не працуюць.

Установка на Linux

Этап установкі Linux працюе найэфектывней, калі яго розглядаць як меравальную плошчу. Запісаце адна ідэальная версія, адзін прыклад неудачы і прыметкі па поверненню да пачатковага стану пры розшырэнні масштаба. Разглядзайце гэты этап як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце крытэрыя успеху і адмовіцеся ад тых падзеяў, калі завершэнне вядома часткова без паведамлення. Храніце стан графаў у простам і тыпаваным фармаце. Вярнутыя структуры маскуюць інфармацію пра тое, які вузел запісаў кожны поле, і спакойваюць працэс пасля перарываў.

curl -fsSL https://ollama.com/install.sh | sh

Установка macOS

Этап установкі macOS працюе найэфектывней, калі яго спрыяваць як меравальную плошчу. Зафіксавце адны ідэальны прыклад працы, адну сітуацыю з бягамі і прыказку па адварцыю перш чым расшырваце сферу дзейнасці. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівае паказанне костаў з’являецца прычыной адсутнасці неспакою, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя. Храніце стан графаў у простам і тыпаваным фармаце. Вярнутыя структуры маскуюць, які вузел запісаў канкрэтны поле, і спакшваюць продыранне пасля перарываў. Этап установкі macOS працюе найэфектывней, калі яго спрыяваць як меравальную плошчу. Зафіксавце адны ідэальны прыклад працы, адну сітуацыю з бягамі і прыказку па адварцыю перш чым расшырваце сферу дзейнасці. Дакументавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка неканальных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.

curl -fsSL https://ollama.com/install.sh | sh

Установка Windows

Для этапы інсталяцыі Windows неабходна прадзеяванне параметраў, вызначэнне адпаведальнага за крок і крэатарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае перадзеяваць крок з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач. Неабходна людская апраўда для тых крокаў, якія выкарыстоўваюць грошы або зменяюць даныя ў працэсе вырабніцтва. Компіляцыйныя налашчэння не ўзначаюць павнае адпрацоўванне бізнес-процэсаў.

irm https://ollama.com/install.ps1 | iex

Пераканацца ў інсталяцыі

У стадыі пераканальвання інсталяцыі неабходна прадзеяванне параметраў, выбір адпаведнага адпаведальнага за крок і вызначэнне крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан сістэмы. Спрыяйце цій этапы як даговору межа параметрамі і пераканальванымі рэзультатамі. Даўце назвы всім элементам, вызначыце крэтарыяў успеху і не прабывайце прыймаць часткова завершаныя рэзультаты без падтверджэння. Заставьце людзкія падтверджэння для тых крокаў, якія выкалічваюць грошы або зменяюць даныя, якія вікорыстоўваюцца у працэсе. Компіляцыйныя налашчэння не ўзроўнаўцуюцца з абсалютным завершэнням бізнес-процэса.

ollama --version
ollama version is 0.5.x

Крок 2: З’явіце свой модэль

Для крока 2 «Pull Your stage» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры зміне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю без неабяжнага вычыслення захаванога стану. Запісваць час выканання і вартасць токена або запыту разам з функцыйнальнымі рэзултатамі. Відразы вартасці з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмовай асяроддзя ў спакульную. Калі наступны крок — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні. Для крока 2 «Pull Your stage» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры зміне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю без неабяжнага вычыслення захаванога стану. Адначасова задокументаваць «шчаслівы» і «вярнучыся» шляхі. Перапрыбуткі, людзкія контрольныя пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадацца пазней.

# For the winner
ollama pull qwen3.5:9b-q4_K_M

# For speed
ollama pull qwen3.5:4b

# For reasoning
ollama pull gemma4:e4b-q4_K_M

Шаг 3: Запуск сервера Ollama

Калі вы працуеце над шагам 3 «Запуск», спачатку запісайце неабяжлівыя элементы: трэбуемыя даныя, сігнал успеху і тое, што выканаецца у разы частковага нявыпалення. Такі спіс дапамагае заліцварыць будучыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь шаг нявыпанаецца, прычына нявыпалення павінна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Зявляйце логі з ідэнтыфікаторам запіту, ідэнтыфікаторам мадэлі і часам адзначэння кожнага запыту. Без такога логу перыодычныя кантакты з прадастчыкам выглядаюць як багі ў самай працоўнай програме.

ollama serve

Шаг 4: Тэставанне вашай мадэлі

Калі вы працюеце над этапам 4 «Прабавка», спачатку запісайце угоду: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс контроля дапамагае залічыць змяны ў кодзе пазнейша. Спрэцьвуйце да гэтага этапу як да угоды межа данымі і перакананымі выходамі. Дайце назвы элементам, задаць крытэрыя успеху і не падзеўляйцеся частковым завершэнням без паведамлення. Зберагаюце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадача таго ж прамэрая ёсць частым выклікам зношэння рэсурсаў.

ollama run qwen3.5:9b-q4_K_M "Hello, introduce yourself briefly."

Частка 3: Наладжэнне CrewAI — Фрэймворк оркестрацыі

Калі працуеце над стадзіяй «Установка», якая належыць да Часткі 3, спачатку запісайце умовы вярбунка: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс контроля дапамагае заліцвачыць пазнейшыя змены коду.

Тэхнічныя выкарыстанні

Этап выявлення сістэмных трэбаванняў работае належна, калі яго спрыяваць як мерыемую плошчу. Запісаўце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметку па адвярненню перад расшырэнням масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісьць кроку не выходзіць, прычына неудачы павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Рэзультаты графа павінны быць простымі і з адзінаковым тыпам. Вярсткаваныя блокі маскуюць, калькі вузел запісаў калькія поля, і спакоююць працу пасля перарываў.

Крок 1: Установіце uv (Сучасны інсталляр пакетаў для Python)

Першы шаг – установка рэжыму uv – дае найлепшыя рэзультаты, калі яго рассматрываць як вымерную паверхню. Запісайце адна «золатая» версія коду, адзін прыклад неудачы і прыметку па поверненню да пярвінскага стану пры расшырэнні масштаба задачы. Рассматракуйце этап як кантракт межу вхіднымі данымі і пераканаленымі выходнымі рэзультатамі. Дайце назвы всім элементам, задаць крытэрыя успеху і не падзеўляйцеся частым, непазначаным завершэнням задачы. Зафіксавайце версію інтэрпрэтара і файл з правамі на залежнасці пры пачатку працы з цыкламі. Нестабільнае падключэнне межу ноутбукам і сістэмай CI ёсць найчастэйшай прычыной непазначаных аберанцэй у дэманстраціях API.

curl -LsSf https://astral.sh/uv/install.sh | sh
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Шаг 2: Установка CrewAI CLI

Этап 2 – установка CrewAI – працюе наякраўжы, калі яго розглядаць як меркаваны об’ект. Зафіксуйце адна ідэальная транскрыпцыю, адзін прыклад неудачы і запіс пра відкатанне рэштры, перш чым расшырваць сферу дзеяння. Запісвайце часы выканання аперацый, а таксу кранаў чы запытак разам з функцыйнальнымі рэзултатамі. Відразы цены з самага пачатку запобегае неспакою, калі працэс пераходзіць з дэмаверсіі ў спяльныя сераўы. Храніце стан графа ў простам і тыпаваным фармаце; вкладнія структуры маскуюць інфармацыю пра тое, які вузол запісаў канкрэтны поле, і спакшуюць продовжэнне працы пасля перэрываў.

uv tool install crewai

Этап 3: Створыце свой праект Crew

Этап 3 «Створыце свой стэдж» працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Запісаце адна «золатая» транскрыпцыю, адын прыклад неудачы і прыметку па вярнэнню да попераднего стану пры розшырэнні масштаба. Зберагачыце настройкі паза кодам прыемленае. Файлы серавэра, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць адбавляць аўдыт без неабяжнага чытання всіх дадзеных. Зберагачыце стан графа ў простам і тыпаванам фармаце. Вярнутыя блокі дадзеных маскуюць інфармацыю пра тое, які вузел запісаў які поле, і спакойваюць працэс пасля перарываў.

crewai create crew my_agent_team
cd my_agent_team
my_agent_team/
├── src/
│   └── my_agent_team/
│       ├── __init__.py
│       ├── crew.py
│       ├── agents.py
│       ├── tasks.py
│       └── main.py
├── .env
└── pyproject.toml

Этап 4: Установка залежнасцяў

Этап 4 «Установка залежнасцей» працюе наяўней, калі яго розглядаць як мерыемую структуру. Зафіксавайце адну ідэальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Дакументавайце як успішны, так і вярнучыся шляхы. Перапрыбуткі, людзкія контрольны пункты і обработка некорэктных паведамленняў ёсць часткай продукту, а не наступным этапам дорабкі. Храніце стан графа ў простам і тыпаваным фармаце. Вярнутыя блокі маскуюць інфармацыю пра тое, які вузел запісаў канкрэтны поле, і спакоююць продовжэнне працы пасля перэрываў.

uv pip install -e .

Этап 5: Установка дадатковых інструментаў

Этап 5 «Установка дадзейнаў» працуе наякша, калі яго розглядаць як мерыемую паверхню. Зафіксавайце адна «золатая» транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расшырваць масштабы. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісьць з крокаў не выйшла, прычына неудачы павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцоўкі задач. Адкройце інструменты з вузкімі схемамі і чысткімі пазначэннямі побачных эфектаў. Хостам неабходна ведаць, якія вызовы мутуюць стан, перш чым яны автаматычна схваляюць ўпрацоўкі.

uv pip install crewai-tools langchain-ollama python-pptx

Частка 4: Стварэнне вашай команды агентаў

Частка 4 «Стварэнне вашага ўровня» працюе наякша, калі яе розглядаць як вімерную паверхню. Запісаўце адна «золатая» транскрыпцыя, адын прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Разглядзайце гэты ўровень як кантракт межаў вхідных дадзеных і перакананыя выходныя рэзультаты. Даўце назвы артыфактам, задаце крытэрыя успеху і адмовіцеся ад тых падчасовых завершэнняў, якія залішаюцца непазначанымі. Храніце стан графа як плоскі і з адзінаковым тыпам дадзеных. Вкладаныя блокі маскуюць інфармацыю пра тое, які вузел запісаў кожны поле, і спакшваюць продажчэй работу пасля перэрываў.

Архітэктура

Этап архітэктуры працюе найэфектывней, калі яго розглядаюць як вімерную плошчу. Зафіксавце адны ідэальны прыклад працы, адну сітуацыю неудачы і прыметку па вярнэнні да пачатковага стану пры розшырэнні масштаба. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя. Храніце стан графа ў простам і тыпаваным фармаце. Вкладзеныя блокі маскуюць інфармацыю пра тое, які вузел запісаў які поле, і спакшваюць продовжэнне працы пасля перарываў. Этап архітэктуры працюе найэфектывней, калі яго розглядаюць як вімерную плошчу. Зафіксавце адны ідэальны прыклад працы, адну сітуацыю неудачы і прыметку па вярнэнню да пачатковага стану пры розшырэнні масштаба. Дакументавайце як шлях успеху, так і шлях вярнэння да нормальнага стану. Перапрыбуткі, людзкія контрольны пункты і обработка некорэктных запытак ўжо ёсць часткай продукту, а не чымсь, што дадаецца пазней.

Шаг 1: Налаштаваць LLM

Для першага – наладжвання етапу – пярэд змены коду неабходна дэфініцыя вхідных даных, адпаведнага адпаведальнага за этап і крэтарыяў завершэння. Аперацыйныя працавнікі должны магчымае перадзваніць этап з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі этап не выйшаў, прычына неудачы павінна вказываць на адзін конкрэтны аспект, а не на заплутаны працэс. Калі наступны этап – гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходны даны з перакананнем схэмы, а не вольнае пісьменне выражэння.

from langchain_ollama import OllamaLLM

def get_llm():
    """ Initialize the local LLM for CrewAI."""
    return OllamaLLM(
        model="qwen3.5:9b-q4_K_M",
        base_url="http://localhost:11434",
        temperature=0.3,  # Lower = more deterministic
        top_p=0.9,
    )

Этап 2: Адзначыце сваіх агентоў

Для другога крока «Задайце свой этап» неабяжна пазначыць вхідныя даны, адпаведальнага за крок і крытэрыі завершэння пры перадзеўці коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Спрыяйце цэму этапу як кантракту межа вхіднымі данымі і падтвердзенымі выходнымі рэзультатамі. Дайце назвы артыфактам, пазначыце крытэрыі успеху і адмовіцеся ад тыхня частковага завершэння без паведамлення. Забезпечыце людскія апраўленні для тых крокаў, якія выкарыстоўваюць грошы або зміняюць даны ў працэсе віробніцтва. Компіляцыйныя налашчэнні не ўзроўнаваны з абсягам выпалення бізнес-задач.

from crewai import Agent
from crewai_tools import SerperDevTool, FileReadTool
from .llm_config import get_llm

# Initialize tools
search_tool = SerperDevTool()  # Requires Serper API key (free tier available)
file_tool = FileReadTool()
def create_coding_agent():
    """Agent specialized in writing and reviewing code."""
    return Agent(
        role="Senior Software Engineer",
        goal="Write clean, efficient, and well-documented code that solves the given problem",
        backstory="""You are a senior software engineer with 15 years of experience
        across multiple programming languages. You specialize in Python, JavaScript,
        and system architecture. You write code that is not only functional but
        also maintainable and follows best practices.""",
        tools=[file_tool],  # Can read existing files
        llm=get_llm(),
        verbose=True,
        allow_delegation=False,
    )
def create_research_agent():
    """Agent specialized in deep research and report writing."""
    return Agent(
        role="Lead Research Analyst",
        goal="Conduct thorough research and synthesize findings into comprehensive reports",
        backstory="""You are a seasoned research analyst with a PhD in Computer Science.
        You have expertise in finding, verifying, and synthesizing information from
        multiple sources. Your reports are known for their depth, clarity, and
        actionable insights.""",
        tools=[search_tool],  # Can search the web
        llm=get_llm(),
        verbose=True,
        allow_delegation=False,
    )
def create_presentation_agent():
    """Agent specialized in creating PowerPoint presentations."""
    return Agent(
        role="Senior Presentation Designer",
        goal="Transform research findings into compelling, visually-appealing PowerPoint presentations",
        backstory="""You are a presentation designer with 10 years of experience
        creating executive-level decks for Fortune 500 companies. You know how to
        structure information for maximum impact and create slides that tell a
        compelling story.""",
        tools=[],  # We'll handle PPT generation separately
        llm=get_llm(),
        verbose=True,
        allow_delegation=False,
    )

Крок 3: Задайце своі заведаменні

Для крока 3 «Задаць свой этап» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры перадзеі коду. Аператары должны магчыма ўвайсці крок з вядомай точкі контролю, не спрабоўваючы здогадацца пра схованы стан. Запісваюць час выканання і вартасць токена або запыту разам з функцыйнальнымі рэзултатамі. Візуабельна інформацыя пра вартасці з’являецца рана, чым утвараюцца неспадзянаныя рахункі, калі працэс пераходзіць з дэмовай асяроддзя ў спадзеленыя сераўеры. Неабяжна прыняць рашэнне чалавека ў тых віпадках, калі выконуецца вылучэнне грошаў або зміняюцыся даны для працы. Працэс складання коду не ёсць адпаведнікам повнай готовасці продукту для эксплуатацыі. Для крока 3 «Задаць свой этап» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння пры перадзеі коду. Аператары должны магчыма ўвайсці крок з вядомай точкі контролю, не спрабоўваючы здагадацца пра схованы стан. Неабяжна задокументаваць як «шчаслівы» шлях, так і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некорэктных паведамленняў ёсць часткай самага продукту, а не елементамі, які дадаюцца пазней.

from crewai import Task

def create_coding_task(topic, requirements):
    """Task for the coding agent."""
    return Task(
        description=f"""
        Write a Python solution for the following problem:

        Topic: {topic}
        Requirements: {requirements}

        Your response should include:
        1. Complete, working Python code
        2. Explanation of the approach
        3. Time and space complexity analysis
        4. Example usage

        Make sure the code is production-ready and includes error handling.
        """,
        expected_output="A complete Python solution with documentation and analysis.",
        agent=None,  # Will be assigned later
    )
def create_research_task(query):
    """Task for the research agent."""
    return Task(
        description=f"""
        Conduct in-depth research on the following topic:

        Query: {query}

        Your research should cover:
        1. Current state of the art
        2. Key players and technologies
        3. Challenges and limitations
        4. Future trends and predictions
        5. Actionable recommendations

        Cite your sources and provide a well-structured report.
        """,
        expected_output="A comprehensive research report with citations.",
        agent=None,  # Will be assigned later
    )
def create_presentation_task(research_findings):
    """Task for the presentation agent."""
    return Task(
        description=f"""
        Create a PowerPoint presentation based on the following research:

        {research_findings}

        The presentation should include:
        1. Title slide with a compelling title
        2. Executive summary
        3. Key findings (3-5 slides)
        4. Visual data representation
        5. Recommendations
        6. Conclusion and next steps

        Provide a detailed outline and slide content.
        """,
        expected_output="A detailed PowerPoint presentation outline with slide content.",
        agent=None,  # Will be assigned later
    )

Шаг 4: Коордынацыя работы каманды

Працюючы над шагам 4 «Коордынацыя работы», спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс перакладоў заходзіць на тое, каб пазнейшыя змены коду былі працэсаваны чыста. Валідзіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь шаг не выйшоў, прычына невыпання павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зробіце перапактовку пасля дорогіх шагоў. Програма не павінна знову сцягваць плата за той самы вызов LLM, калі аператар праканае выконанне наступнага вузла.

from crewai import Crew, Process
from .agents import (
    create_coding_agent,
    create_research_agent,
    create_presentation_agent
)
from .tasks import (
    create_coding_task,
    create_research_task,
    create_presentation_task
)

def create_crew(topic, query, requirements):
    """Create and configure the multi-agent crew."""

    # Initialize agents
    coding_agent = create_coding_agent()
    research_agent = create_research_agent()
    presentation_agent = create_presentation_agent()

    # Create tasks
    coding_task = create_coding_task(topic, requirements)
    research_task = create_research_task(query)

    # Assign agents to tasks
    coding_task.agent = coding_agent
    research_task.agent = research_agent

    # The presentation task depends on research findings
    # We'll create it dynamically after research is complete

    return Crew(
        agents=[coding_agent, research_agent, presentation_agent],
        tasks=[coding_task, research_task],
        process=Process.sequential,  # Tasks run in order
        verbose=True,
    )
def run_crew(topic, query, requirements):
    """Run the multi-agent crew and return results."""
    crew = create_crew(topic, query, requirements)
    result = crew.kickoff()
    return result

Шаг 5: Галоўная точка входу

Калі працюеце над 5-м крокам, стадыяй «Галоўны этап», спачатку запішыце угоду: неабходныя даныя, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс перакладоў заходзіць пазнейшыя змены коду ад неканальнасці.

import os
from .crew import run_crew

def main():
    """Main entry point for the multi-agent system."""

    # Define your project
    topic = "Building a REST API with FastAPI"
    query = "Best practices for FastAPI REST API development in 2026"
    requirements = """
    - Python 3.11+
    - FastAPI framework
    - PostgreSQL database
    - JWT authentication
    - Docker deployment
    """

    print("🚀 Starting multi-agent workflow...")
    print("=" * 50)

    # Run the crew
    result = run_crew(topic, query, requirements)

    print("\n✅ Workflow complete!")
    print("=" * 50)
    print("\n📊 Results:")
    print(result)

    return result
if __name__ == "__main__":
    main()

Частка 5: Автаматызаваная стварэнне прэзентацый PowerPoint

Калі працюеце над часткай 5, стадыяй «Автаматызаваная стварэнне прэзентацый PowerPoint», спачатку запішыце угоду: неабходныя даныя, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс перакладоў заходзіць пазнейшыя змены коду ад неканальнасці.

Крок 1: Стварэнне генератора PPT

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
import os

def create_presentation_from_content(content, filename="presentation.pptx"):
    """
    Generate a PowerPoint presentation from structured content.

    Args:
        content: Dictionary with slide titles and content
        filename: Output filename
    """
    prs = Presentation()

    # Set slide dimensions (16:9)
    prs.slide_width = Inches(13.333)
    prs.slide_height = Inches(7.5)

    # Title Slide
    title_slide_layout = prs.slide_layouts[0]
    slide = prs.slides.add_slide(title_slide_layout)
    slide.shapes.title.text = content.get("title", "AI-Generated Presentation")
    slide.placeholders[1].text = content.get("subtitle", "Powered by CrewAI + Ollama")

    # Content Slides
    for slide_data in content.get("slides", []):
        bullet_slide_layout = prs.slide_layouts[1]
        slide = prs.slides.add_slide(bullet_slide_layout)

        # Title
        slide.shapes.title.text = slide_data.get("title", "Untitled")

        # Content
        content_text = slide.placeholders[1]
        content_frame = content_text.text_frame
        content_frame.clear()

        for point in slide_data.get("points", []):
            p = content_frame.add_paragraph()
            p.text = point
            p.level = 0
            p.font.size = Pt(18)

    # Save
    prs.save(filename)
    print(f"✅ Presentation saved as: {filename}")
    return filename
def generate_ppt_from_research(research_text, topic):
    """
    Generate a PPT from research findings using the presentation agent.
    """
    from .agents import create_presentation_agent
    from .llm_config import get_llm

    # Have the presentation agent structure the content
    agent = create_presentation_agent()

    prompt = f"""
    Based on the following research about "{topic}", create a structured
    presentation outline with 6-8 slides.

    Research:
    {research_text[:2000]}  # Limit to avoid context overflow

    Return a JSON object with the following structure:
    {{
        "title": "Presentation title",
        "subtitle": "Subtitle or tagline",
        "slides": [
            {{
                "title": "Slide title",
                "points": ["Point 1", "Point 2", "Point 3"]
            }}
        ]
    }}
    """

    # Get structured output from the agent
    response = agent.llm.invoke(prompt)

    # Parse the response (simplified - in production, use proper JSON parsing)
    import json
    try:
        # Extract JSON from response
        content = json.loads(response)
    except:
        # Fallback: create a simple structure
        content = {
            "title": f"Research on {topic}",
            "subtitle": "AI-Generated Presentation",
            "slides": [
                {"title": "Introduction", "points": ["Overview of research"]},
                {"title": "Key Findings", "points": ["Finding 1", "Finding 2"]},
                {"title": "Recommendations", "points": ["Recommendation 1"]}
            ]
        }

    # Generate the PPT
    filename = f"{topic.replace(' ', '_')}_presentation.pptx"
    return create_presentation_from_content(content, filename)

Крок 2: Інтэграцыя генеравання PPT у Crew

from .ppt_generator import generate_ppt_from_research

def run_full_workflow(topic, query, requirements):
    """Run the complete workflow including PPT generation."""

    # Step 1: Run the crew (coding + research)
    crew_result = run_crew(topic, query, requirements)

    # Step 2: Extract research findings (simplified - in production, parse properly)
    research_findings = crew_result  # This would be the research agent's output

    # Step 3: Generate PowerPoint
    ppt_file = generate_ppt_from_research(research_findings, topic)

    return {
        "crew_result": crew_result,
        "presentation_file": ppt_file
    }

Частка 6: Частыя проблемы і способы ўсунення

Проблема 1: «З’ўязок адмовлены» калі CrewAI прагне з’явіцца з Ollama

litellm.APIConnectionError: OllamaException - [Errno 111] Connection refused
llm = OllamaLLM(
    model="qwen3.5:9b-q4_K_M",
    base_url="http://localhost:11434",  # Ensure this is correct
)

Проблема 2: Мадэль не можа следаваць схемам вызываў інструментаў

Проблема 3: Памяці недастатнек

Проблема 4: Агент застрагае ў рэкуррэнтных ціклах

Проблема 5: Памедзелы стварэнне токенав

Частка 7: Адклаканне вашага першага багатаягентнага рабочага працэсу

Полная наладка

#!/usr/bin/env python3
"""
Complete Multi-Agent System with Ollama and CrewAI
"""

import os
import sys
from src.my_agent_team.crew import run_full_workflow
def main():
    print("""
    ╔═══════════════════════════════════════════════════════╗
    ║     🤖 Multi-Agent AI System - Local Edition         ║
    ║     Powered by Ollama + CrewAI + Qwen3.5:9b         ║
    ╚═══════════════════════════════════════════════════════╝
    """)

    # Check if Ollama is running
    import requests
    try:
        response = requests.get("http://localhost:11434")
        print("✅ Ollama is running!")
    except:
        print("❌ Ollama is not running. Please start it with: ollama serve")
        sys.exit(1)

    # Define your project
    topic = input("Enter your project topic (e.g., 'Building a REST API with FastAPI'): ")
    query = input("Enter your research query (e.g., 'Best practices for FastAPI'): ")
    requirements = input("Enter your requirements (e.g., 'Python, PostgreSQL, JWT'): ")

    print("\n🚀 Starting multi-agent workflow...")
    print("=" * 60)

    try:
        result = run_full_workflow(topic, query, requirements)

        print("\n✅ Workflow complete!")
        print("=" * 60)
        print(f"\n📄 Presentation saved as: {result['presentation_file']}")
        print("\n📊 Crew Results:")
        print(result['crew_result'])

    except Exception as e:
        print(f"\n❌ Error: {e}")
        print("\n💡 Troubleshooting tips:")
        print("1. Make sure Ollama is running: ollama serve")
        print("2. Check if the model is downloaded: ollama list")
        print("3. Ensure you have enough memory (close other apps)")
        print("4. Check the error message above for specific issues")
if __name__ == "__main__":
    main()

Запускайце!

python run.py

Частка 8: Спіс пераканалення эфектыўнасці

Оптымізацыя памяці

Оптымізацыя швайнасці

Оптымізацыя надзеянняйнасці

Вывад: Вы цэлкам успелі!

Заключныя мысцы

Спіс кантролю прабыцяў