Skip to content

Promastergame/dumalka

Repository files navigation

💭 Думалка

AI-агент на 1.5B модели, который думает, планирует, пишет код и компилирует его
работает на процессоре 2013 года без видеокарты

Go Version License Ollama No Dependencies


🎯 Что это?

Эксперимент: может ли крошечная локальная модель (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)

Но Думалка через промпт-инжиниринг:

  1. Заставляет модель писать план
  2. Заставляет рассуждать пошагово
  3. Заставляет проверять себя
  4. Разделяет мышление (<think>) и ответ

Результат: обычная модель ведёт себя как reasoning-модель! 🤯


🎬 Живые примеры

Реальные логи с Intel Core i5-3340 (2013), без GPU, модель 1.5B

1️⃣ Приветствие с глубоким размышлением

│ /effort max
│ привет

· план ·
1. Извините за беспокойство. Я здесь для помочь.
2. Пожалуйста, приветствуйте меня. Как я могу вам помочь сегодня?

· рассуждение ·
Варианты:
1. Нет приветствия: "Привет". Обычно, это просто уважение...
2. Простое приветствие: "Здравствуйте". Это более убедительное...

Подводные камни:
1. Пользователь не может сказать точное слово приветствия.
2. Использование "Здравствуйте" может быть более убедительным...

· самопроверка ·
Всё верно

Thought: 53.5s

Привет.

■ Думалка · effort: max · 87.3s

2️⃣ Агентный поиск с инструментами

│ найди как зовут маму артура в папке test
📚 riddles.md · Задача про дочерей: «У отца Мэри пять дочерей...

· инструменты ·
🔧 grep "артура мама"
geroi.txt:4:
  3| Артур — рыцарь из северно…
> 4| Маму Артура зовут Анастасия, она травница и знает все грибы в лесу.
  5| Отца Артура зовут Виктор,…

· план ·
Шаг 1: Общее описание
  - Пользователь хочет найти имя мамы у Артура
  - Необходимо найти строку с этой информацией

Шаг 2: Использование grep
  - Команда grep "артура мама" test покажет нужную информацию

· рассуждение ·
Команда grep "артура мама" test вероятно найдет строку...
Если найдено: Маму Артура зовут Анастасия, она травница...

· самопроверка ·
Всё верно

Thought: 79.1s

Маму Артура зовут Анастасия, она травница и знает все грибы в лесу.

■ Думалка · effort: max · 152.2s

3️⃣ Автономное написание и компиляция кода

│ сделай простой код на 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! 🔥


🚀 Быстрый старт

1. Установи Ollama

# Windows/macOS/Linux:
https://ollama.com

2. Скачай и запусти модель

ollama pull hf.co/mradermacher/mythos-qwen-1.5b-final-heretic-GGUF:Q4_K_M

3. Собери Думалку

git clone https://github.com/Promastergame/dumalka.git
cd dumalka
go build -o dumalka.exe .

4. Запускай!

./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

🔧 Возможности

1. Трёхуровневая система мышления

/effort low     // быстро, без размышлений
/effort medium  // подумать → ответить
/effort max     // план → рассуждение → самопроверка → ответ

Каждый уровень имеет свою температуру и бюджет токенов.

2. Инструменты модели

Файловая песочница (test/)

{"tool":"ls"}
{"tool":"grep","query":"артура мама"}

Умный grep:

  • ✅ Регистронезависимый (ё=е)
  • ✅ Понимает формы слов: "мама артура" → "Маму Артура"
  • ✅ Контекст ±2 строки (как sed)
  • ✅ На чистом Go (Windows/Linux одинаково)

Кодовая песочница (test/code/)

{"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

3. RAG без эмбеддингов

docs/
  ├─ riddles.md      # Загадки с подвохом
  ├─ knowledge.txt   # Ваши документы
  └─ ...

Как работает:

  1. Стемминг (первые 4 буквы слова)
  2. TF-IDF подобный поиск
  3. Топ-N кусков в контекст

Включить/выключить: /rag

4. Few-Shot Learning

/teach  # научить примеру стиля прямо в чате

когда: первое
плохо: Привет! Я ассистент.
хорошо: *приветствие*

Сохраняется в style.txt, применяется автоматически.

5. Персонализация

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 ./...

🙏 Благодарности


📄 Лицензия

MIT License — делай что хочешь, но без гарантий 😉


🤔 FAQ

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-агента, то что мешает тебе?

About

AI-агент на Go: обычная модель 1.5B без thinking превращается в reasoning через промпт-инжиниринг. CoT + ReAct + RAG + кодовая песочница. Без зависимостей, только CPU, один .exe. Работает даже на железе 2013 года.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages