수학 연구를 위한 AI 에이전트: 맥 미니에서 월프램 엔진 + 쿠웬 코드 CLI
메시징 앱을 통해 접근 가능한 완전 자율형 수학 연구 실험실이 탄생했습니다—클라우드 API, 외부 서버, 코드와 데이터에 대한 통제권 상실 없이 말이죠. 이 시스템은 맥 미니에서 로컬로 구동되며, 델타 챗으로부터 작업을 수신하고, 쿠웬 코드 CLI를 사용해 월프럼 언어로 알고리즘을 생성한 뒤 월프럼 엔진을 통해 실행하고, 그래프와 함께 결과를 직접 채팅으로 반환합니다. 이는 이미 만들어진 솔루션의 인터페이스가 아니라 문제 정의부터 검증까지 모든 사고 과정을 포착하는 연구 환경입니다.
중간 서비스가 없는 아키텍처
메시지 처리 전체 파이프라인은 제3자 API나 SaaS 플랫폼에 의존하지 않는 로컬 워크플로로 구현되었습니다. 가장 큰 장점은 입력 프롬프트, 실행된 코드, 그리고 데이터 라이프사이클 전반에 걸친 완전한 통제권입니다. 숨겨진 클라우드 호출도 없고, 코드를 LLM 서비스로 자동 전송하거나 사용자 기계 밖에서 메트릭을 수집하는 일도 없습니다.
델타 챗의 메시지(IMAP/SMTP를 통해)는 파이썬 봇 math_bot.py로 들어가는데, 여기서:
- 발신자를
WHITELIST_EMAIL목록과 비교해 유효성을 검사합니다; - 새 세션을 시작하거나 기존 세션을 재개합니다;
QWEN_PREAMBLE에서 제공되는 시스템 프리앰블과 이전 단계의 컨텍스트를 포함한 원자적 프롬프트를 구성합니다;qwen을--yolo --continue플래그와 함께 헤드리스 모드로 실행합니다;- stdout을 JSON 형식으로 캡처합니다;
/tmp/mrl_graphics/폴더에서.png,.jpg,.svg,.pdf확장자를 가진 그래픽 파일을 파싱합니다;- 결과를 채팅으로 다시 전송하면서 세션 기록을
sessions/디렉토리에 저장합니다.
특히, 쿠웬 코드 CLI는 ‘블랙박스’로 사용되지 않습니다. 로컬 서브프로세스로 실행되며, 모든 wolframscript 명령은 경로가 명확히 지정된 특정 디렉토리에서만 수행됩니다. 그래프는 오직 별도의 임시 폴더에만 내보내지며, 홈 디렉토리나 ~/Downloads에는 어떠한 부작용도 기록되지 않습니다.
환경 요구사항 및 실행 보안
이 시스템은 macOS 14 이상을 대상으로 설계되었지만, 크로스플랫폼 구성 요소를 통해 Linux와 Windows에서도 호환됩니다. 핵심 종속성은 다음과 같습니다:
- 월프럼 엔진 14.1 이상—개인 사용을 위한 무료 버전의 엔진입니다. pkg 패키지를 통해 설치되며,
wolframscript바이너리를 PATH에 추가합니다. 모든 계산은 로컬에서 이루어지며, 월프럼 클라우드로 표현식이 전송되는 일은 없습니다. - 쿠웬 코드 CLI v3.5 Plus—Node.js에서 실행되는 헤드리스 버전의 모델입니다. API 키가 필요하지 않습니다. 모델은 로컬로 로드되며, 용량은 약 2.1GB(양자화된 GGUF)이고,
qwenCLI를 통해--model qwen3.5-plus.Q4_K_M.gguf옵션으로 실행됩니다. - 델타 챗 RPC 서버—메일함과의 연결을 관리하는 네이티브 바이너리(
deltachat-rpc-server)입니다. 로컬 사용 시에만--no-verify-ssl모드로 작동하며, 종단 간 보호를 위해 QR 코드를 통한 PGP 암호화를 권장합니다.
보안 설정은 세 가지 수준에서 이루어집니다:
- 네트워크: 델타 챗은 포트 포워딩, VPN, 또는 화이트리스트 IP 없이 표준 IMAP/SMTP 포트를 사용합니다. 트래픽은 TLS 1.3으로 암호화됩니다.
- 프로세스: 쿠웬은
QWEN_TIMEOUT=600타임아웃으로 실행되며, 복잡한 작업의 실행 시간을 제한합니다. 제한 시간을 초과하면subprocess.run(..., timeout=...)방식으로 강제 종료됩니다. - 파일: 모든 그래프는 오직
/tmp/mrl_graphics/에만 저장되고, 세션은PROJECT_DIR/sessions/에 보관됩니다.GRAPHICS_DIR경로는 사용 전에is_dir()함수로 절대 유효성과 존재 여부를 확인합니다.
세션 라이프사이클 구현
봇은 세션 관리 명령 7가지를 지원하며, 각 명령은 SESSIONS_DIR 디렉토리의 상태를 수정합니다:
/start—유니크한 UUID로 새 세션을 생성하고,session_YYYYMMDD_HHMMSS.md와_assets/를 초기화합니다./continue—마지막 활성 세션을 재개합니다./resume <id>—특정 ID로 세션을 열어줍니다./peek—현재 로그의 마지막PEEK_LINES=40줄을 표시합니다./archive—세션을archived/디렉토리로 이동시키고, 인덱스에서 제거합니다./close—세션을 최종적으로 마무리합니다:solution.wl을algorithms/로 복사하고,summary.md를 생성한 뒤_assets/를 비웁니다./help—내부 경로에 접근하지 않고 도움말을 출력합니다.
각 세션은 대화 내용을 연대순으로 기록한 마크다운 파일로, 모든 단계에는 반드시 네 가지 필수 블록이 포함됩니다:
- 구두 알고리즘(번호 매겨진 단계);
- 월프럼 언어 코드(실행 가능한 정확한 텍스트);
wolframscript의 실제 출력(stdout/stderr);- 결과 해석(1~2문장).
이렇게 하면 재현성이 보장됩니다: 어떤 단계든 wolframscript -code "..." 명령으로 수동으로 반복할 수 있고, 모든 그래프는 Export[...] 명령으로 다시 생성 가능합니다.
작업 예시
사용자가 채팅에 다음과 같은 메시지를 보냅니다:
함수 y = x^2와 y = 2x + 3의 교차점을 찾고, 그래프를 그려주세요.
봇은 프리앰블을 포함한 요청을 쿠웬 코드 CLI로 전달합니다:
오직 월프럼 스크립트만 사용하세요(파이썬은 안 됩니다). 그래프는 /tmp/mrl_graphics/에 저장하세요. 그래프의 레이블은 라틴 문자로 작성해야 합니다.
함수 y = x^2와 y = 2x + 3의 교차점을 찾고, 그래프를 그려주세요.
쿠웬은 구조화된 응답을 반환합니다:
- 구두 알고리즘
1. 두 함수를 동일하게 설정: x^2 == 2x + 3
2. 표준 형태로 정리: x^2 - 2x - 3 == 0
3. 이차 방정식을 풀기
4. 두 함수를 같은 그래프에 그림
- 월프럼 코드
---wl---
eq = x^2 == 2 x + 3;
solutions = Solve[eq, x];
Plot[{x^2, 2 x + 3}, {x, -3, 5},
Epilog -> {Red, PointSize[Large],
Point[{x, x^2} /. solutions]},
PlotLabel -> "y=x^2와 y=2x+3의 교차점",
AxesLabel -> {"x", "y"}]
Export["/tmp/mrl_graphics/intersection.png", %]
---wl---
- 월프럼 스크립트 결과
{{x -> -1}, {x -> 3}}
$Graphics$
- 결과 해석
교차점: (-1, 1)과 (3, 9). 그래프는 intersection.png로 저장됩니다.
봇은 /tmp/mrl_graphics/에서 PNG를 추출해 채팅으로 전송하고, 이 블록을 세션 로그에 추가합니다.
중요한 점
- 로컬 실행은 개인정보 보호를 보장합니다: 수학 객체, 공식, 또는 그래프는 결코 사용자 기계 밖으로 나가지 않습니다.
- 월프럼 엔진은 파이썬의 대체물이 아닙니다—특화된 계산기입니다: 정밀한 기호 대수, 시각화, 그리고 수치적 방법을 제공하며, 맞춤형 솔버를 작성할 필요가 없습니다.
- 쿠웬 코드 CLI는 솔버가 아니라 코드 생성기 역할을 합니다: 모델은 결코 ‘최종 답’을 출력하지 않고, 오직 실행 가능한 코드를 생성한 뒤
wolframscript의 실제 출력을 기다립니다. - 델타 챗은 서버 없이 종단 간 암호화를 제공합니다: PGP 키는 QR 코드로 교환되고, 메시지는 기기 내에서 암호화됩니다.
algorithms/구조는 재현 가능한 솔루션의 저장소를 만듭니다: 각 알고리즘에는description.md,reasoning.md, 그리고solution.wl이 포함되어 있어 CI/CD 파이프라인이나 문서화에 바로 통합할 수 있습니다.
설정 및 배포
배포하려면 다음을 수행해야 합니다:
- 공식 웹사이트에서 월프럼 엔진을 설치하고
wolframscript --install명령을 실행합니다. - Node.js 20 이상을 설치하고
npm install -g qwen-cli명령을 실행합니다. - conda 환경을 생성합니다:
conda create -n mathbot python=3.12 && conda activate mathbot. - 종속성을 설치합니다:
pip install -r requirements.txt. config.py를 설정합니다:WHITELIST_EMAIL,PROJECT_DIR, 그리고QWEN_CMD를 지정합니다.- 초기화를 실행합니다:
bash init.sh—이 명령은sessions/,algorithms/, 그리고_index.md를 생성합니다. - 봇을 시작합니다:
python math_bot.py.
시작 후, 봇은 30초마다 메일함을 폴링하기 시작합니다. 테스트를 위해서는 인증된 이메일 주소에서 /start 명령을 보내면 됩니다. 세션은 실시간으로 기록되고, 오류는 math_bot.log에 기록됩니다.
— Editorial Team
아직 댓글이 없습니다.