Providentia Network — это бэкенд на Django, который координирует многоветвевое рассуждение с использованием моделей Gemini от Google, нативного сопроцессора на C++ и опциональной визуализации графа мыслей. Этот документ описывает текущую архитектуру и содержит команды, необходимые для сборки и запуска системы локально.
https://www.promptingguide.ai/techniques/tot
Yao et el. (2023) and Long (2023)
недавно предложили Tree of Thoughts (ToT) — фреймворк, который обобщает цепочку мыслей (chain-of-thought prompting) и поощряет исследование мыслей, служащих промежуточными шагами для общего решения проблем с помощью языковых моделей.
ToT поддерживает дерево мыслей, где мысли представляют собой связные языковые последовательности, служащие промежуточными шагами к решению проблемы. Этот подход позволяет LM самостоятельно оценивать прогресс через промежуточные мысли, сделанные для решения проблемы, с помощью продуманного процесса рассуждения. Способность LM генерировать и оценивать мысли затем комбинируется с алгоритмами поиска (например, поиск в ширину и поиск в глубину), чтобы обеспечить систематическое исследование мыслей с предвидением и возвратом.
Архитектура системы
Поток данных высокого уровня
Клиент -> /speech/simple_response (Django REST представление)
-> Python ThinkingManager (speech/context_manager/ThinkingManager.py)
-> C++ «Киевская Русь» мыслитель (speech/context_manager/Kievan Rus/*.cpp)
-> Gemini API (JSON через HTTPS)
-> Бинарная полезная нагрузка (статус + контекст + сводка)
-> Python десериализатор и расширение ветвей
-> Опциональный PNG граф (speech/context_manager/graphs/)
-> Текст ответа Django
Основные компоненты
Django REST Endpoint (
speech/views.py)
Принимает пользовательский запрос, создает экземплярThinkingManagerи передает финальный текст инструкции, возвращенный агентом.Python Thinking Manager (
speech/context_manager/ThinkingManager.py)
Поддерживает дерево мыслей и обеспечивает соблюдение архитектурных правил:- Запускает нативный C++ помощник как подпроцесс с текущим сообщением, меткой ветви и метаданными итерации.
- Анализирует бинарный ответ (1 байт статуса, 4 байта длины, UTF-8 полезная нагрузка) и проверяет JSON на соответствие
ContextStruct(Pydantic). - Записывает для каждой ветви
probability_of_success, инкрементальныйpotential_score,possible_setbacksи метки ветвей. - Гарантирует как минимум два исследования ветвей на уровень и агрегирует кумулятивный потенциальный балл.
- Выводит текстовое дерево и опционально отображает PNG диаграмму (см. ниже).
C++ «Киевская Русь» мыслитель (
speech/context_manager/Kievan Rus/)
Модуляризирован на заголовочные файлы и исходники для разбора аргументов, загрузки окружения, HTTP-вызовов Gemini (libcurl), построения промптов и бинарной сериализации.- Читает ключ Gemini API из переменных окружения процесса или
.env. - Выполняет два запроса к Gemini: один для структурированного анализа, второй для повествовательной сводки.
- Кодирует структурированный контекст и сводку в переносимый бинарный формат, потребляемый Python.
- Цель Makefile
build-thinkerперекомпилирует модуль (g++17,-lcurl) и автоматически вызывается при запуске сервера.
- Читает ключ Gemini API из переменных окружения процесса или
Отрисовка графов (
plotting/graphing.py)
Использует Matplotlib (бэкенд Agg) для визуализации финального дерева мыслей. Каждый узел включает метку ветви, обернутый текст плана, вероятности, дельты потенциала на шаг, кумулятивный потенциал и подсветку для состояний «финальный» или «сожалеющий». Изображения сохраняются вspeech/context_manager/graphs/.Gemini Agent (
speech/gemini/agent.py)
Легковесная обертка вокруг клиентаgenaiот Google. Модуль на C++ дублирует эту функциональность для критичных по задержке рассуждений.
Семантика ветвления и оценки
ThinkingManagerограничивает глубину дерева (max_iterations = 8), но гарантирует, что каждый узел порождает как минимум две помеченные ветви (например,Primary-A,Primary-B), если только не достигнут лимит итераций.- Каждая ветвь содержит:
probability_of_success— число с плавающей точкой, ограниченное[0.0, 1.0].potential_score— знаковое приращение, добавляемое кcumulative_potential.possible_setbacks— текстовая оценка риска, встраиваемая в логи, вывод консоли и визуализации.
- Логи выводятся для каждого порождения ветви, числовой оценки и шага отрисовки графа для упрощения отладки.
Настройка и использование
Предварительные требования
- Python 3 (рекомендуется virtualenv или Conda окружение).
g++с поддержкой C++17 и заголовочные файлы разработки для libcurl.- Доступ к ключу Gemini API (
GEMINI_API_KEY), размещенному в.envили переменных окружения процесса. - (Опционально) Matplotlib для генерации PNG графов; без него система выводит предупреждение и пропускает построение графиков.
Создание окружения
make update # использует environment.yml через conda/micromamba
Переопределение значений по умолчанию:
make update CONDA_ENV=my-env-name
make update ENV_FILE=envs/dev.yml
make update CONDA=~/.local/bin/micromamba
Сборка и запуск
make run # перекомпилирует C++ мыслитель, затем запускает `python manage.py runserver`
Автономная компиляция (при необходимости):
make build-thinker # cd speech/context_manager/Kievan\ Rus && g++ ... -lcurl
Сервер ожидает .env в корне проекта, если не установлена переменная KIEVAN_RUS_ENV_PATH.
Общие цели Make
| Цель | Описание |
|---|---|
make run |
Собрать C++ помощник и запустить Django dev сервер |
make migrate |
Выполнить миграции (makemigrations + migrate) |
make prepare |
Создать Conda окружение из environment.yml |
make update |
Обновить/создать Conda окружение с очисткой |
make build-thinker |
Перекомпилировать модуль рассуждения на C++ |
make help |
Список доступных целей (если определены в Makefile) |
Используйте PY=... для указания конкретного интерпретатора или переопределите DJANGO_SETTINGS_MODULE по необходимости.
Примечания по конфигурации
.envGEMINI_API_KEY=ваш-ключ # опциональные настройки Django...KIEVAN_RUS_ENV_PATH(переменная окружения) может переопределить расположение.envдля C++ процесса.Графы записываются в
speech/context_manager/graphs/thought_graph_<root-id>.png. Удалите директорию для очистки артефактов.
Советы по тестированию и отладке
- Бинарный протокол строгий; некорректные ответы от Gemini (например, отсутствующие поля
text) вызывают четкие исключения, логируемые как Python, так и C++ слоями. - Создание ветвей, вычисление вероятностей и отрисовка графов логируют подробный прогресс с префиксами
[ThinkingManager]. Следите за консолью Django во время разработки для отслеживания потока рассуждений. - Если Matplotlib отсутствует, система продолжает работу без вывода PNG, но логирует ошибку импорта.
Структура репозитория (выборочно)
speech/
├── context_manager/
│ ├── ThinkingManager.py # Python оркестратор
│ └── Kievan Rus/ # Нативный мыслитель на C++ (модуляризированные исходники)
├── gemini/
│ └── agent.py # Python обертка клиента Gemini
plotting/
├── graphing.py # Отрисовщик деревьев мыслей на Matplotlib
README.md
Makefile
Бэкенд Providentia Network спроектирован для итеративного экспериментирования: обновляйте промпты, настраивайте эвристики оценки или расширяйте бинарный формат по мере необходимости. make run поддерживает синхронизацию C++ помощника, чтобы вы могли сосредоточиться на логике рассуждений. Удачного хакинга!
