---
title: "Offline AI Launcher – стартиране на AI LLM невронни мрежи на смартфон"
url: "https://romankryvolapov.com/bg/offline-ai-launcher/"
description: "Приложението Offline AI Launcher: как да стартирате LLM Gemma, DeepSeek, Llama и Qwen направо на Android от модели .gguf, без интернет и абонамент."
language: bg
published: 2025-08-08
updated: 2026-11-13
---
Здравейте!

В свободното си време написах приложение, с което можете **да изтегляте и стартирате невронни мрежи AI LLM** като **Google Gemma, DeepSeek, Llama, Qwen** и много други направо на смартфона си.

Приложенията с ИИ днес са доста, но основната разлика на това е, че моделите не работят в облака на сървъри, а направо на смартфона, от файла на модела, с процесора и видеокартата на телефона.

Не са нужни нито интернет, нито платен абонамент: достатъчен е смартфон с 6+ ГБ оперативна памет и що-годе съвременен процесор.

Приложението работи с [хранилището HuggingFace](https://huggingface.co/) – най-голямото хранилище на модели с отворен код: там те са милиони, а хиляди от тях са големи езикови модели, или LLM.

Приложението отваря най-разпространения формат на модели **.gguf** с двигателя llama.cpp, форматите на Google за двигателя MediaPipe – **.task** и **.tflite** (версиите на моделите за MediaPipe са в хранилищата на Google), както и модели **.litertlm** с двигателя LiteRT-LM.

За някои модели, например Gemma 3n (отворен модел, изграден на същите технологии като Gemini), двигателят MediaPipe поддържа **обработка на изображения**.

Приложението е създадено най-вече за ентусиасти в областта на ИИ, но и за хора, които не могат да използват облачни модели като ChatGPT или Gemini заради възможно изтичане на данни, както и за хора без постоянен достъп до интернет.

В момента приложението е безплатно, но ако не намеря начин да си платя труда по него, част от функциите ще станат платени.

## За кого е това приложение?

Приложението е предназначено за:

- **ентусиасти в областта на ИИ**, които искат да изтеглят и пробват нови модели и различните им дообучени версии;
- **хора, които по някаква причина не могат да използват интернет**: например се намират там, където няма интернет, или летят със самолет;
- **хора, които не могат да използват облачни модели**, защото се опасяват от изтичане на данни или защото компанията им забранява облачните модели.

## Как се използва

В приложението има раздели: **Чат, История, Модели, Настройки.**

## Чат

В този раздел е чатът с модела, който е стартиран в момента.

![](/images/2019/07/image-7.png)

- **Нов чат**: изчиства историята на диалога с модела.
- **Иконка „Споделяне на изображение“**: добавя изображение в чата. Засега това се поддържа само от двигателя MediaPipe и моделите Gemma 3n и Gemma 3 4B, 12B и 27B.
- **Иконка „Направи снимка“**: прави снимка и я изпраща в чата. Засега това се поддържа само от двигателя MediaPipe и моделите Gemma 3n и Gemma 3 4B, 12B и 27B.
- **Иконка „Прикачване на документ“**: прикачва документ във формат pdf, txt, doc или docx. Щом документът се зареди, той се добавя към контекста на съобщението.
- **RAG ВКЛ / ИЗКЛ**: включва и изключва RAG – добавянето към контекста на диалога на резултатите от търсене във векторната база данни.
- **Изчистване на текста**: изтрива текста на текущото съобщение.
- **Вмъкване на текст**: вмъква текст от клипборда там, където е курсорът.
- **Гласово въвеждане**: включва гласовото въвеждане. Когато спрете да говорите, текстът се изпраща към модела сам, ако в настройките на приложението е включена опцията „Автоматично изпращане на текста към модела след разпознаване на речта“; ако не е – изпратете го с бутона „Изпрати“.
- **Изпрати**: изпраща съобщението към модела. Надписът на бутона може да се променя в зависимост от състоянието на модела.
- **Иконка на микрофон до съобщението**: прочита съобщението на глас. Скоростта на четене се задава в настройките на приложението с параметъра „Скорост на гласа“. Ако в настройките е включено „Автоматично озвучаване на отговорите след генериране“, отговорът се прочита сам, щом моделът приключи генерирането му.
- **Натискане върху съобщението**: отваря меню, в което съобщението може да се копира в клипборда, да се изпрати в друго приложение или да се чуе.
- **Горен панел**: показва с кой модел се води диалогът. На него се вижда и обемът на свободната оперативна памет, ако е включена опцията „Показване на свободната памет на екраните“.

## История

Списък с всички диалози с всички модели.

![](/images/2019/07/image-8.png)

- **Натискане върху диалог**: отваря диалога с модела.
- **Изтриване**: изтрива диалога. Всички диалози наведнъж могат да се изтрият в настройките на приложението с бутона „Изчистване на историята на чата“.
- **Продължаване на диалога**: всеки диалог може да се продължи, а продължението се запазва като нов диалог. При натискане се отваря списък с всички налични модели и можете да продължите с всеки от тях, дори ако диалогът е започнат с друг. Имайте предвид, че контекстът на модела е ограничен: ако в диалога има много текст, контекстът може да се изчерпи и част от диалога ще се загуби. Размерът на контекста се задава в настройките на приложението. Той се брои не в символи, а в токени, а токенът обикновено е част от дума.

## Модели

Тук са всички изтеглени модели, както и моделите, стартирани в Ollama и LM Studio на вашия компютър. Всеки модел е файл в папката на приложението. Тази папка може да се отвори в някои файлови мениджъри, например в ES Explorer, и да добавяте или премахвате модели сами.

![](/images/2019/07/image-9.png)

- **Стартиране на модела**: стартира модела и разтоварва всички останали. Ако моделът работи на компютър в локалната мрежа, приложението не го стартира, а отваря диалог с него: моделът се управлява от програмата, в която е стартиран.
- **Показване на информация**: отваря страница със служебна информация за модела.
- **Натискане върху модела**: отваря модела в поддържан файлов мениджър. Не всички файлови мениджъри могат да отварят файлове и не всички имат разрешение да отварят папката на друго приложение.
- **Изтриване**: изтрива модела. Могат да се изтриват и модели, стартирани в Ollama на компютър в локалната мрежа.
- **Горен панел**: показва папката на приложението с моделите. Натиснете папката, за да я отворите във файлов мениджър, да копирате пътя до нея или да го споделите. На панела се вижда и обемът на свободната оперативна памет, ако е включена опцията „Показване на свободната памет на екраните“.
- **Изтегляне на модели**: отваря страницата за изтегляне на модели от хранилището HuggingFace.

![](/images/2019/07/image-10.png)

- **Автор**: филтрира списъка с модели по автор. Можете да въведете текст или да изберете пресет.
- **Pipeline**: филтрира списъка с модели по pipeline. Можете да въведете текст или да изберете пресет.
- **Филтър**: филтрира списъка с модели по филтър. Можете да въведете текст или да изберете пресет.
- **Търсене**: филтрира списъка с модели по име. Можете да въведете текст или да изберете пресет.
- **Параметър за сортиране**: по кой параметър да се сортира списъкът.
- **▼**: отваря списъка с пресети за съответния филтър.
- **+**: запазва стойността от текстовото поле в пресетите.
- **-**: премахва стойността от текстовото поле от пресетите.
- **Опресняване**: опреснява списъка.
- **Затваряне на филтъра**: скрива панела с филтрите.
- **Отваряне на модела в хранилището**: отваря страницата на модела в хранилището HuggingFace.
- **Изтегляне**: отваря списъка с всички файлове на модела, налични в хранилището. Моделите с квантуване Q4, подходящи за архитектурата Arm, са отбелязани в зелено. Ако смартфонът ви има бърз процесор, а моделът е малък, можете да опитате да изтеглите и стартирате модел с произволно квантуване: колкото по-голямо е числото в квантуването, толкова по-точен е моделът. След натискането в горната част на екрана се показва състоянието на изтеглянето; натиснете го, за да спрете изтеглянето.
- **Отметки**: моделите, които сте добавили в отметките.

![](/images/2019/07/image-11.png)

На страницата с отметките са същите филтри и бутони като на страницата за изтегляне, с изключение на самите „Отметки“.

## Настройки

![](/images/2019/07/image-12.png)

- **Настройки на приложението**

![](/images/2019/07/image-13.png)

- **Избор на език**: променя езика на приложението. С варианта „Система“ приложението следва езика на устройството. В момента се поддържат английски, немски, френски, испански, полски, руски и украински.
- **Режим на показване**: темата на приложението – тъмна, светла или системна.
- **Настройки на гласа**: настройки на четенето на глас – автоматично прочитане на отговорите след генериране, автоматично изпращане на съобщението след разпознаване на речта и скорост на четене.
- **Настройки за дебъгване**: тук можете да включите показването на свободната оперативна памет на екраните и да преминете към страницата с информация за дебъгване на двигателя llama.cpp.
- **Страница с информация за дебъгване на двигателя LLama.cpp**: след включване на превключвателя показва служебната информация, която двигателят извежда в конзолата при зареждане на модела и генериране на отговор. Различните нива на дебъгване са показани в различни цветове.
- **Токен за хранилището HuggingFace**: за изтеглянето на някои модели от хранилището HuggingFace, например моделите на Google, е нужен токен. Можете да го въведете ръчно. Ако не сте го направили, приложението поддържа вход през сайта на HuggingFace: когато моделът изисква оторизация, приложението опитва да влезе през сайта и добавя получения токен – тогава той се появява в полето за токен.
- **Копиране / поставяне на настройките на приложението през клипборда**: копира всички настройки на приложението в клипборда във формат JSON, поставя ги от клипборда или ги изпраща като текстово съобщение. Настройките на различни версии на приложението може да са несъвместими.
- **Оценка на приложението**: оценете приложението в Google Play. Имайте предвид, че това е експериментално приложение: в някои случаи и с някои модели може да не работи стабилно.
- **Изчистване на историята на чата**: изтрива всички запазени съобщения.
- **Възстановяване на настройките по подразбиране**: нулира всички настройки на приложението. Понякога настройките се нулират и при обновяване: ако в предишната версия са открити критични грешки, свързани с настройките, а новата версия е по-стабилна.
- **Настройки на паметта**

![](/images/2019/07/image-14.png)

- **Настройки на паметта**: за стартиране на LLM на смартфон е нужна много свободна оперативна памет. На този екран се вижда колко памет е свободна в момента и можете да настроите известия или разтоварване на модела, когато паметта не стига. В кода на двигателя на C++ е вградена функция, която взема параметрите от този екран и спира генерирането, когато паметта стане твърде малко, но понякога паметта свършва внезапно и тогава приложението се затваря. Размерът на контекста на модела пряко влияе на това колко памет заема той; можете да го зададете на страницата с настройки на двигателя. На страницата за паметта се виждат още архитектурата на процесора и поддържаният набор от инструкции.
- **Настройки на промпта**: на тази страница можете да създавате, редактирате, запазвате в пресети и изтривате промптове. Промптът се използва от всички двигатели и се добавя към първото съобщение на диалога. Промптът по подразбиране не може да се изтрие, а при смяна на езика се връща към промпта по подразбиране за избрания език. Ако искате да използвате собствен промпт, не го запазвайте като промпт по подразбиране.

![](/images/2019/07/image-15.png)

- **Настройки на шаблоните**: за да общува с различни модели, двигателят llama.cpp използва различни шаблони; моделите от едно семейство обикновено имат общ пресет. На тази страница можете да обновите пресетите или да добавите нови за различни модели. Ако в приложението е стартиран модел, при отваряне на страницата се избира неговият шаблон.

![](/images/2019/07/image-16.png)

- **Име на шаблона**: шаблонът се свързва с изтегления модел чрез „Ключова дума в името на модела“. Ако няколко модела използват един пресет, имената им могат да се изброят със запетаи.
- **Шаблон за първото съобщение**: шаблонът за първото съобщение трябва да включва промпта. При изпращане на съобщение към модела параметърът `prompt_text` се заменя с промпта, а `message_text` – със съобщението на потребителя.
- **Ключова дума за спиране на генерирането**: когато моделът изведе тази дума, приложението спира генерирането. Това е нужно на някои модели: заради грешки при обучението или доработването им моделът може да извежда неправилни ключови думи, които двигателят не разпознава, и генерирането никога не свършва. Можете да посочите няколко ключови думи, разделени със запетаи.
- **Замяна на ключова дума**: някои модели връщат в отговора служебни ключови думи. Тук изброявате думите, които да се премахнат от отговора, във формат „ключова дума“ -> „с какво да се замени“. Например служебният таг, с който моделът отбелязва разсъжденията си, може да се замени с ваши думи.
- **Настройки на двигателя LLama.cpp**: настройките на двигателя llama.cpp, които могат да се запазват като пресети. Повече за настройките и за това на какво влияят можете да прочетете в статиите ми за LLM. Ето някои от тях:

![](/images/2019/07/image-17.png)

- **Размер на контекста**: колко токена моделът може да „помни“ едновременно. Зависи от обема на оперативната памет; препоръчителни стойности: 2–4 ГБ – 128–256 токена, 6–8 ГБ – 256–1024 токена, 12–16 ГБ – 1024–32000 токена.
- **Размер на отговора**: колко токена моделът може да генерира.
- **Температура**: стойността на температурата (използва се, ако е включено семплиране по температура). Управлява случайността: 1,0 – неутрално, 0,7 – сдържано, 1,3 – творчески.
- **Top-K**: цяло число за Top-K, използва се, ако `use_top_k` е true. Колко от най-вероятните токени се запазват.
- **Top-P**: дробна стойност за Top-P, използва се, ако `use_top_p` е true. Прагът на натрупаната вероятност (например 0,9).
- **Нишки**: броят нишки за инициализация.
- **Нишки за партида**: броят нишки за генериране.
- **Семплери**: изборът на семплер, който обработва суровите стойности.
- **Повече**: повече – в статията ми [Невронните мрежи с прости думи](/bg/neural-networks-basics/).
- **Настройки на двигателя MediaPipe**: настройките на двигателя MediaPipe; отчасти повтарят настройките на llama.cpp.

![](/images/2019/07/image-18.png)

- **Настройки на двигателите LocalHost**:

![](/images/2019/07/image-19.png)

- **Настройки на Ollama LocalHost**: Ollama може да се стартира на компютъра, така че отговорите да се генерират на видеокартата му, и да се свържете с нея по IP адрес. За целта изпълнете командите: `$env:OLLAMA_HOST="0.0.0.0"` задава променливата на средата, за да слуша Ollama външния IP адрес (без нея Ollama слуша само localhost вътре в компютъра); `setx OLLAMA_HOST 0.0.0.0 /M` я записва в постоянните променливи на средата (изпълнява се като администратор, след което терминалът се рестартира); `ollama pull gemma3n:e4b` изтегля модела gemma3n; `ollama serve` стартира Ollama; `ollama list` показва изтеглените модели. Когато моделът е изтеглен и Ollama е стартирана, моделът се появява в приложението. IP адресът е адресът на вашия компютър в мрежата, обикновено `192.168.*.*`; можете да го видите в настройките на Wi-Fi на компютъра или в настройките на рутера.
- **Настройки на OpenAI LocalHost**: можете да стартирате модел на компютъра в LM Studio или друга програма, съвместима с OpenAI API, така че отговорите да се генерират на видеокартата му, и да се свържете с него по IP адрес. IP адресът е адресът на вашия компютър в мрежата, обикновено `192.168.*.*`; можете да го видите в настройките на Wi-Fi на компютъра или в настройките на рутера. За да слуша LM Studio на порт на вашия компютър, изберете в LM Studio Developer → Settings → Serve on Local Network и стартирайте сървъра, като поставите превключвателя Status в положение Running.
- **Настройки на RAG**:

![](/images/2019/07/image-20.png)

Ако сте добавили документ в диалога с модела и размерът му не надвишава лимита, зададен на страницата с настройки, при генериране на отговора документът се добавя изцяло към контекста на диалога. Ако е по-голям, той се разделя на части, всяка част се превръща във вектор, а при генериране на отговора се намира подходящият вектор и текстът му се добавя към контекста на диалога.

- **Брой резултати**: колко резултата от търсенето във векторната база данни и от прикачения документ се добавят към контекста при генериране на отговора.
- **Минимален показател за сходство**: минималното сходство между два вектора, при което те се смятат за съвпадение; двойките с по-ниско сходство се отхвърлят. Типични стойности: 0,7–0,8 – за строги съвпадения с висока релевантност; 0,5–0,7 – за умерено сходство, когато стават и частични съвпадения; под 0,5 – само за широко покритие или проучвателно търсене.
- **Добавяне на прикачените документи във векторната база данни**: документът, прикачен по време на диалога, се добавя и във векторната база данни. Тогава при включен RAG всяка заявка търси във векторната база и подходящият документ се добавя към контекста на въпроса.
- **Размер на фрагмента в токени**: максималният брой токени в един текстов фрагмент, след който той се разделя. Ако стойността е твърде голяма, моделът за ембединги може да се срине или да върне грешка, защото фрагментът ще надвиши максималния размер на входните му данни.
- **Припокриване на фрагментите, само за метода Sentences**: колко токена от края на един фрагмент се повтарят в началото на следващия, за да се запази контекстът.
- **Разделяне на текстовите фрагменти, по-големи от тази стойност, на части**: текст, по-дълъг от този брой символи, се разделя на фрагменти. Това важи и за документите, добавени по време на диалога: всеки документ, по-голям от тази стойност, се превръща във вектори и търсенето се извършва по вектори. Ако документът е твърде голям, контекстът на модела ще се изчерпи и той няма да може да генерира отговор.
- **Максимален брой символи във фрагмента**: ограничава броя на символите във фрагмента. При метода Sentences изреченията може да са дълги и без ограничение моделът за ембединги се срива.
- **Настройки на векторната база данни**:

![](/images/2019/07/image-21.png)

Документ или текст може да се добави във векторната база данни ръчно. При добавянето документът се разделя на части и за всяка част се създава вектор. Ако в диалога с модела е включен RAG, всеки ваш въпрос се превръща във вектор, във векторната база се намират подходящи фрагменти от документи и техният текст се добавя към контекста на въпроса. Можете също да проверите кои документи базата намира по текста на заявката: за това е филтърът.

## Бъдещи възможности

- **LocalHost Server API**: приложението ще работи като сървър, съвместим с OpenAI API и Ollama API.
- **Извикване на функции**: поддръжка на On-Device Function Calling SDK. Засега тя е изключена: SDK не поддържа някои функции, които са нужни на други части на приложението.

## Текущи имплементации на двигателите

**llama.cpp**

- Уикипедия: [en.wikipedia.org/wiki/Llama.cpp](https://en.wikipedia.org/wiki/Llama.cpp)
- GitHub: [github.com/ggml-org/llama.cpp](https://github.com/ggml-org/llama.cpp)
- Android: [github.com/ggml-org/llama.cpp/tree/master/examples/llama.android](https://github.com/ggml-org/llama.cpp/tree/master/examples/llama.android)
- Как е устроен двигателят отвътре: [llama.cpp AI LLM Engine – Как работи](/bg/llama-cpp/)

**LiteRT-LM**

Двигателят на Google за модели .litertlm. Той е вграден в приложението и работи много бързо.

- GitHub: [github.com/google-ai-edge/LiteRT-LM](https://github.com/google-ai-edge/LiteRT-LM)
- Ръководство за Kotlin: [ai.google.dev/edge/litert-lm/android](https://ai.google.dev/edge/litert-lm/android)
- HuggingFace: [huggingface.co/litert-community](https://huggingface.co/litert-community)
- Сравнение с други двигатели и код за интеграция: [Локално стартиране на LLM модели на Android смартфон](/bg/llm-on-android/)

**MediaPipe / TensorFlow**

- Ръководство на Google: [ai.google.dev/edge/mediapipe/solutions/guide](https://ai.google.dev/edge/mediapipe/solutions/guide)
- GitHub: [github.com/google-ai-edge/mediapipe](https://github.com/google-ai-edge/mediapipe)
- HuggingFace: [huggingface.co/litert-community](https://huggingface.co/litert-community)
- Модел в Kaggle: [kaggle.com/models/google/gemma-3/tfLite](https://www.kaggle.com/models/google/gemma-3/tfLite)
- Maven: [mvnrepository.com/artifact/com.google.mediapipe](https://mvnrepository.com/artifact/com.google.mediapipe)

**Двигатели на локален хост**

- **Ollama:** поддържа се Ollama API: можете да стартирате Ollama на компютър и да общувате с модела от приложението.
- **OpenAI API:** поддържа се OpenAI API: можете да стартирате на компютъра LM Studio или всяка програма, съвместима с OpenAI API, и да общувате с модела от приложението.

## Бъдещи интеграции

**MLC LLM**

Засега само експериментално: моделите в HuggingFace се състоят от много файлове, което е неудобно, а самият двигател е слабо оптимизиран за Android и моделите работят по-бавно, отколкото с llama.cpp и MediaPipe. В бъдеще планирам да препакетирам някои модели в специален формат от един файл и да ги кача в HuggingFace.

- Хранилище: [github.com/mlc-ai/mlc-llm](https://github.com/mlc-ai/mlc-llm)
- Внедряване на CLI: [llm.mlc.ai/docs/deploy/cli.html](https://llm.mlc.ai/docs/deploy/cli.html)
- Внедряване за Android: [llm.mlc.ai/docs/deploy/android.html](https://llm.mlc.ai/docs/deploy/android.html)
- Компилиране на модели: [llm.mlc.ai/docs/compilation/compile_models.html](https://llm.mlc.ai/docs/compilation/compile_models.html)
- HuggingFace: [huggingface.co/mlc-ai](https://huggingface.co/mlc-ai)
- Пример за модел: [huggingface.co/google/gemma-3-1b-it-qat-q4_0-unquantized](https://huggingface.co/google/gemma-3-1b-it-qat-q4_0-unquantized)

**ONNX**

Засега само експериментално: моделите в HuggingFace се състоят от много файлове и не могат да се опаковат в един, затова двигателят е неудобен за използване, а под Android работи бавно.

- Уикипедия: [en.wikipedia.org/wiki/Open_Neural_Network_Exchange](https://en.wikipedia.org/wiki/Open_Neural_Network_Exchange)
- ONNX Runtime for GenAI (Java): [github.com/microsoft/onnxruntime-genai/tree/main/src/java](https://github.com/microsoft/onnxruntime-genai/tree/main/src/java)
- Документация на API: [onnxruntime.ai/docs/genai/api/java.html](https://onnxruntime.ai/docs/genai/api/java.html)
- HuggingFace: [huggingface.co/onnx-community](https://huggingface.co/onnx-community)
- Maven: [mvnrepository.com/artifact/com.microsoft.onnxruntime](https://mvnrepository.com/artifact/com.microsoft.onnxruntime)

**PyTorch**

Планирам да го добавя.

- Уикипедия: [en.wikipedia.org/wiki/PyTorch](https://en.wikipedia.org/wiki/PyTorch)
- Официален сайт: [pytorch.org](https://pytorch.org/)
- Хранилище: [github.com/pytorch/pytorch](https://github.com/pytorch/pytorch)

## Допълнителни ресурси за четене

- [Голям езиков модел (Уикипедия)](https://en.wikipedia.org/wiki/Large_language_model)
- [Списък на големите езикови модели (Уикипедия)](https://en.wikipedia.org/wiki/List_of_large_language_models)
- [Llama (езиков модел) (Уикипедия)](https://en.wikipedia.org/wiki/Llama_%28language_model%29)
- [Бенчмаркове за езикови модели (Уикипедия)](https://en.wikipedia.org/wiki/Language_model_benchmark)
- [Understanding Large Language Models in Your Pockets – производителност на LLM на обикновени смартфони (arXiv)](https://arxiv.org/html/2410.03613v1)

## Архитектура

- Модулна Clean Architecture на Робърт Мартин

[Робърт Мартин (Уикипедия)](https://en.wikipedia.org/wiki/Robert_C._Martin)

## Технологичен стек

- Езици: Kotlin, Java, C++
- Система за билд: Gradle Groovy DSL, CMake
