Providentia Network는 Google의 Gemini 모델, 네이티브 C++ 코프로세서, 그리고 선택적 사고 그래프 시각화를 통해 다중 분기 추론을 조율하는 Django 기반 백엔드입니다. 이 문서는 현재 아키텍처를 요약하고 시스템을 로컬에서 빌드 및 실행하는 데 필요한 명령어를 제공합니다.
https://www.promptingguide.ai/techniques/tot
Yao et el. (2023) and Long (2023)
최근 제안된 Tree of Thoughts(ToT)는 연쇄 사고 프롬프팅을 일반화하고, 언어 모델을 사용한 일반 문제 해결을 위한 중간 단계 역할을 하는 생각에 대한 탐색을 장려하는 프레임워크입니다.
ToT는 생각의 트리를 유지하며, 여기서 생각은 문제 해결을 위한 중간 단계 역할을 하는 일관된 언어 시퀀스를 나타냅니다. 이 접근 방식은 LM이 의도적인 추론 과정을 통해 문제 해결을 위한 중간 생각의 진행 상황을 자체 평가할 수 있게 합니다. 그런 다음 LM의 생각 생성 및 평가 능력은 검색 알고리즘(예: 너비 우선 검색 및 깊이 우선 검색)과 결합되어 선견 및 역추적을 통한 체계적인 생각 탐색을 가능하게 합니다.
시스템 아키텍처
고수준 데이터 흐름
클라이언트 -> /speech/simple_response (Django REST 뷰)
-> Python ThinkingManager (speech/context_manager/ThinkingManager.py)
-> C++ "Kievan Rus" 사고 엔진 (speech/context_manager/Kievan Rus/*.cpp)
-> Gemini API (JSON over HTTPS)
-> 바이너리 페이로드 (상태 + 컨텍스트 + 요약)
-> Python 역직렬화 및 분기 확장
-> 선택적 PNG 그래프 (speech/context_manager/graphs/)
-> Django 응답 텍스트
핵심 구성 요소
Django REST 엔드포인트 (
speech/views.py)
사용자 프롬프트를 수신하고ThinkingManager를 인스턴스화하며, 에이전트가 반환한 최종 명령 텍스트를 전달합니다.Python Thinking Manager (
speech/context_manager/ThinkingManager.py)
사고 트리를 유지 관리하고 아키텍처 규칙을 적용합니다:- 현재 메시지, 분기 레이블 및 반복 메타데이터와 함께 네이티브 C++ 헬퍼를 하위 프로세스로 생성합니다.
- 바이너리 응답(1바이트 상태, 4바이트 길이, UTF-8 페이로드)을 파싱하고
ContextStruct(Pydantic)에 대해 JSON을 검증합니다. - 분기별
probability_of_success, 증분potential_score,possible_setbacks및 분기 레이블을 기록합니다. - 레벨당 최소 두 개의 분기 탐색을 보장하고 누적 잠재 점수를 집계합니다.
- 텍스트 트리를 출력하고 선택적으로 PNG 다이어그램을 렌더링합니다(아래 참조).
C++ "Kievan Rus" 사고 엔진 (
speech/context_manager/Kievan Rus/)
인수 파싱, 환경 로딩, Gemini HTTP 호출(libcurl), 프롬프트 구성 및 바이너리 직렬화를 위해 헤더/소스로 모듈화되었습니다.- 프로세스 환경 또는
.env에서 Gemini API 키를 읽습니다. - 두 개의 Gemini 요청을 발행합니다: 하나는 구조화된 분석용, 다른 하나는 내러티브 요약용입니다.
- 구조화된 컨텍스트와 요약을 Python에서 사용하는 이식 가능한 바이너리 형식으로 인코딩합니다.
- 루트 Makefile 대상
build-thinker는 모듈(g++17,-lcurl)을 재컴파일하며 서버 실행 시 자동으로 연결됩니다.
- 프로세스 환경 또는
그래프 렌더링 (
plotting/graphing.py)
Matplotlib(Agg 백엔드)을 사용하여 최종 사고 트리를 시각화합니다. 각 노드에는 분기 레이블, 래핑된 계획 텍스트, 확률, 단계별 잠재 델타, 누적 잠재력이 포함되며 "최종" 또는 "후회" 상태가 강조 표시됩니다. 이미지는speech/context_manager/graphs/에 저장됩니다.Gemini 에이전트 (
speech/gemini/agent.py)
Google의genai클라이언트를 감싸는 경량 래퍼입니다. 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 환경 권장).
- C++17 지원 및 libcurl 개발 헤더가 있는
g++. .env또는 프로세스 환경에 배치된 Gemini API 키(GEMINI_API_KEY)에 대한 액세스.- (선택 사항) PNG 그래프 생성을 위한 Matplotlib; 없으면 시스템이 경고를 기록하고 플로팅을 건너뜁니다.
환경 생성
make update # conda/micromamba를 통해 environment.yml 사용
기본값 재정의:
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
서버는 KIEVAN_RUS_ENV_PATH가 설정되지 않은 경우 프로젝트 루트에서 .env를 예상합니다.
일반적인 Make 대상
| 대상 | 설명 |
|---|---|
make run |
C++ 헬퍼 빌드 및 Django 개발 서버 시작 |
make migrate |
마이그레이션 실행 (makemigrations + migrate) |
make prepare |
environment.yml에서 Conda 환경 생성 |
make update |
정리와 함께 Conda 환경 업데이트/생성 |
make build-thinker |
C++ 추론 모듈 재컴파일 |
make help |
사용 가능한 대상 나열 (Makefile에 정의된 경우) |
필요에 따라 PY=...를 사용하여 특정 인터프리터를 지정하거나 DJANGO_SETTINGS_MODULE을 재정의합니다.
구성 참고 사항
.envGEMINI_API_KEY=your-key # 선택적 Django 설정...KIEVAN_RUS_ENV_PATH(환경 변수)는 C++ 프로세스의.env위치를 재정의할 수 있습니다.그래프는
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++ 헬퍼를 동기화 상태로 유지하므로 추론 로직에 집중할 수 있습니다. 즐거운 해킹 되세요!
