AI-агент на 1.5B модели, который думает, планирует, пишет код и компилирует его
работает на процессоре 2013 года без видеокарты
Эксперимент: может ли крошечная локальная модель (1.5B параметров) на старом CPU без GPU вести себя как настоящий AI-агент?
✅ Думать по шагам (Chain-of-Thought)
✅ Проверять себя (Self-Reflection)
✅ Использовать инструменты (ReAct)
✅ Искать в файлах (умный grep с морфологией)
✅ Писать и компилировать код (Go/Python песочница)
✅ Работать с базой знаний (RAG без эмбеддингов)
Спойлер: может. Медленно (~90-200 сек на сложный вопрос), иногда смешно — но может.
Модель НЕ умеет думать изначально!
- ❌ Это НЕ DeepSeek R1 (reasoning model)
- ❌ Это НЕ OpenAI o1 (thinking model)
- ✅ Это обычная Qwen 1.5B (instruct model)
Но Думалка через промпт-инжиниринг:
- Заставляет модель писать план
- Заставляет рассуждать пошагово
- Заставляет проверять себя
- Разделяет мышление (
<think>) и ответ
Результат: обычная модель ведёт себя как reasoning-модель! 🤯
Реальные логи с Intel Core i5-3340 (2013), без GPU, модель 1.5B
│ /effort max
│ привет
· план ·
1. Извините за беспокойство. Я здесь для помочь.
2. Пожалуйста, приветствуйте меня. Как я могу вам помочь сегодня?
· рассуждение ·
Варианты:
1. Нет приветствия: "Привет". Обычно, это просто уважение...
2. Простое приветствие: "Здравствуйте". Это более убедительное...
Подводные камни:
1. Пользователь не может сказать точное слово приветствия.
2. Использование "Здравствуйте" может быть более убедительным...
· самопроверка ·
Всё верно
Thought: 53.5s
Привет.
■ Думалка · effort: max · 87.3s
│ найди как зовут маму артура в папке test
📚 riddles.md · Задача про дочерей: «У отца Мэри пять дочерей...
· инструменты ·
🔧 grep "артура мама"
geroi.txt:4:
3| Артур — рыцарь из северно…
> 4| Маму Артура зовут Анастасия, она травница и знает все грибы в лесу.
5| Отца Артура зовут Виктор,…
· план ·
Шаг 1: Общее описание
- Пользователь хочет найти имя мамы у Артура
- Необходимо найти строку с этой информацией
Шаг 2: Использование grep
- Команда grep "артура мама" test покажет нужную информацию
· рассуждение ·
Команда grep "артура мама" test вероятно найдет строку...
Если найдено: Маму Артура зовут Анастасия, она травница...
· самопроверка ·
Всё верно
Thought: 79.1s
Маму Артура зовут Анастасия, она травница и знает все грибы в лесу.
■ Думалка · effort: max · 152.2s
│ сделай простой код на Go в test/code и скомпилируй его
📚 riddles.md · Задача про машины и детали...
· инструменты ·
🔧 create prog.go
Создан файл prog.go (74 символ.). Осталось: edit ×3, go build ×4, python ×3.
🔧 go build
✅ собралось без ошибок. Сборок осталось: 3.
· план ·
1. Создание файла prog.go
2. Редактирование файла prog.go
3. Проверка успешности создания
4. Компиляция
· рассуждение ·
Файл prog.go успешно создан и содержит код:
package main
import "fmt"
func main() {
fmt.Println("Привет, мир!")
}
· самопроверка ·
Всё верно
Thought: 94.1s
Привет, мир!
■ Думалка · effort: max · 199.2s
Проверка:
PS> cd test\code
PS> ./prog.exe
Привет, мир!Модель сама написала, скомпилировала и запустила рабочий .exe! 🔥
# Windows/macOS/Linux:
https://ollama.comollama pull hf.co/mradermacher/mythos-qwen-1.5b-final-heretic-GGUF:Q4_K_Mgit clone https://github.com/Promastergame/dumalka.git
cd dumalka
go build -o dumalka.exe ../dumalka.exe -model hf.co/mradermacher/mythos-qwen-1.5b-final-heretic-GGUF:Q4_K_M| Характеристика | Значение |
|---|---|
| CPU | Intel Core i5-3340 (4 ядра, 2013 год) |
| RAM | 10 GB DDR3 |
| GPU | не используется (num_gpu: 0) |
| Нагрузка CPU | 60–80% (+ Opera с 8 вкладками) |
| Память | ~1150–1180 MB |
| Скорость | effort medium: 60–90s, max: 90–200s |
| Модель | Qwen 1.5B Q4_K_M (~1 GB) |
Вывод: работает даже на древнем офисном ПК! 💪
┌─────────────────────────────────────────────────────────────┐
│ 💭 ДУМАЛКА PIPELINE │
├─────────────────────────────────────────────────────────────┤
│ │
│ Вопрос │
│ ↓ │
│ 📚 RAG (поиск в docs/) │
│ ↓ │
│ 🎯 Effort Level │
│ ├─ low: сразу ответ │
│ ├─ medium: рассуждение → ответ │
│ └─ max: план → рассуждение → проверка → ответ │
│ ↓ │
│ 🔧 Tool Calling (ReAct) │
│ ├─ ls (список файлов) │
│ ├─ grep (умный поиск с морфологией) │
│ ├─ create (создать .go/.py файл) │
│ ├─ edit (переписать файл) │
│ ├─ build (go build) │
│ └─ run (python) │
│ ↓ │
│ 💬 Финальный ответ (без инструментов) │
│ │
└─────────────────────────────────────────────────────────────┘
| Модуль | Функция | Особенность |
|---|---|---|
| think.go | Chain-of-Thought конвейер | 3 уровня мышления |
| stream.go | Парсинг <think> тегов |
Обработка разрезанных токенов |
| fstools.go | Файловые инструменты | grep с русской морфологией |
| codetools.go | Кодовая песочница | Жёсткие лимиты безопасности |
| rag.go | RAG без эмбеддингов | Стемминг + TF-IDF |
| style.go | Few-shot learning | Мини-SFT прямо в чате |
| ollama.go | Клиент Ollama | Streaming + keep-alive |
/effort low // быстро, без размышлений
/effort medium // подумать → ответить
/effort max // план → рассуждение → самопроверка → ответКаждый уровень имеет свою температуру и бюджет токенов.
{"tool":"ls"}
{"tool":"grep","query":"артура мама"}Умный grep:
- ✅ Регистронезависимый (ё=е)
- ✅ Понимает формы слов: "мама артура" → "Маму Артура"
- ✅ Контекст ±2 строки (как
sed) - ✅ На чистом Go (Windows/Linux одинаково)
{"tool":"create","name":"prog.go","content":"package main..."}
{"tool":"edit","content":"новый код"}
{"tool":"build"}
{"tool":"run"}Лимиты (на один вопрос):
- create: ×1 (только .go или .py)
- edit: ×3
- build: ×4 (только Go)
- run: ×3 (только Python)
Безопасность:
- ✅ Только проверенные команды
- ✅ Только в песочнице
- ✅ Timeout 60s
- ✅ Валидация имён файлов regex
docs/
├─ riddles.md # Загадки с подвохом
├─ knowledge.txt # Ваши документы
└─ ...
Как работает:
- Стемминг (первые 4 буквы слова)
- TF-IDF подобный поиск
- Топ-N кусков в контекст
Включить/выключить: /rag
/teach # научить примеру стиля прямо в чате
когда: первое
плохо: Привет! Я ассистент.
хорошо: *приветствие*
Сохраняется в style.txt, применяется автоматически.
persona.txt # характер ассистента
Пример:
Ты — Думалка, философствующий AI с чувством юмора.
Любишь размышлять о парадоксах и подвохах.
Отвечаешь кратко, но с изюминкой.
Включить/выключить: /persona
| Команда | Действие |
|---|---|
/effort low|medium|max |
Уровень мышления |
/teach |
Научить примеру стиля |
/style |
Показать выученные примеры |
/persona |
Вкл/выкл персону |
/rag |
Вкл/выкл базу знаний |
/hide |
Скрыть размышления |
/show |
Показать размышления |
/help |
Справка |
/exit |
Выход |
./dumalka.exe \
-model "hf.co/.../mythos-qwen-1.5b-final-heretic-GGUF:Q4_K_M" \
-url "http://localhost:11434" \
-effort "medium" \
-style "style-scp.txt" \
-persona "persona.txt" \
-docs "docs" \
-files "test" \
-gpu false \
-plain false| Флаг | По умолчанию | Описание |
|---|---|---|
-model |
mythos |
Имя модели в Ollama |
-url |
http://localhost:11434 |
Адрес Ollama |
-effort |
medium |
Уровень мышления |
-style |
style.txt |
Файл примеров стиля |
-persona |
persona.txt |
Файл с персоной |
-docs |
docs |
Папка базы знаний (RAG) |
-files |
test |
Файловая песочница |
-gpu |
false |
Разрешить GPU (по умолчанию только CPU) |
-plain |
false |
Без ANSI-цветов |
| Возможность | LangChain | LlamaIndex | AutoGPT | Думалка |
|---|---|---|---|---|
| Chain-of-Thought | ✅ | ✅ | ✅ | ✅ |
| Tool Calling | ✅ | ✅ | ✅ | ✅ |
| Code Execution | ✅ | ❌ | ✅ | ✅ |
| RAG | ✅ (векторные БД) | ✅ (векторные БД) | ✅ | ✅ без эмбеддингов |
| Few-Shot Learning | ✅ | ❌ | ❌ | ✅ |
| Зависимости | Python + 50+ библиотек | Python + 30+ библиотек | Python + куча | 0 |
| Размер | ~500 MB | ~300 MB | ~1 GB | один .exe |
| Работает на CPU | ✅ только CPU | |||
| Модель | облачная или большая | облачная или большая | облачная | 1.5B локально |
dumalka/
├─ main.go # CLI, команды, флаги
├─ think.go # CoT конвейер (план → рассуждение → проверка)
├─ ollama.go # HTTP-клиент Ollama со стримингом
├─ stream.go # Парсер <think> тегов
├─ tools.go # ask_user и извлечение ответов из JSON
├─ fstools.go # ls и grep в песочнице test/
├─ codetools.go # create/edit/build/run в test/code/
├─ rag.go # RAG без эмбеддингов (стемминг + TF-IDF)
├─ style.go # Few-shot примеры стиля
├─ test/ # Демо-файлы для инструментов
│ ├─ geroi.txt # Герои (там две Анастасии — ловушка!)
│ ├─ riddles.md # Загадки
│ └─ code/ # Кодовая песочница
├─ docs/ # База знаний для RAG
│ └─ riddles.md # 10 загадок с подвохом
├─ style-scp.txt # Пример: стиль SCP Foundation
├─ persona.txt # Характер ассистента
└─ README.md
Зависимостей: 0
Тесты: go test ./...
Это эксперимент, а не production-ready решение
- ❌ Модель крошечная — иногда план про одно, дела про другое
- ❌ Нет истории — каждый вопрос с чистого листа
- ❌ JSON тяжёлый — создание кода работает не с первой попытки
- ❌ Медленно — до 200 сек на сложный вопрос (effort max)
- ❌ Галлюцинации — модель может выдумывать факты
- ✅ Но зато — работает локально, на CPU, без GPU, без зависимостей!
- Оригинал: expper/mythos-qwen-1.5b-final
- GGUF квант:
hf.co/mradermacher/mythos-qwen-1.5b-final-heretic-GGUF:Q4_K_M - Размер: ~1 GB
- Параметры: 1.5B
- Контекст: 32K токенов
- Квантизация: Q4_K_M (4-бит)
# Клонировать
git clone https://github.com/Promastergame/dumalka.git
cd dumalka
# Собрать
go build -o dumalka.exe .
# Тесты
go test ./...
# Линтер
go vet ./...- Ollama — локальный запуск LLM
- expper/mythos-qwen — модель
- mradermacher — GGUF кванты
MIT License — делай что хочешь, но без гарантий 😉
Q: Работает без интернета?
A: Да, после скачивания модели через Ollama.
Q: Можно на Raspberry Pi?
A: Теоретически да, но будет совсем медленно (тесты не проводились).
Q: Почему не используется GPU?
A: Эксперимент про то, что AI-агент может работать даже на старом CPU. Флаг -gpu разрешает GPU.
Q: Можно использовать другую модель?
A: Да, любую из Ollama. Но CoT-промпты заточены под Qwen/Mythos.
Q: Сколько строк кода?
A: ~1500 строк Go (без комментариев и пустых строк).
Сделано на Go
Обычная модель + правильные промпты = thinking AI
Если древний процессор может запустить AI-агента, то что мешает тебе?