Практычныя прыказкі: Стварэнне автономных агентаў AI локальна: паследоўны карэткап
Практычныя прыказкі: Стварэнне автономных агентаў AI локальна: паследоўны карэткап: контракты, перакананні та слоты для коду для команд, якія викорыстоўваюць гэты патэрн.
Наступныя прытамлівкі паказваюць практычны шлях для выканання задачі «Стварэнне автонамных агентаў 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