SymbolicAI: LLM에 대한 신경-기호적 관점
(github.com/ExtensityAI)- SymbolicAI는 신경-기호적 프로그래밍 프레임워크로, Python 프로그래밍과 LLM을 자연스럽게 결합함
- 기본 단위인 Symbol 객체를 통해 문법적(syntactic)과 의미적(semantic) 조작을 모두 지원함
- 계약(Contracts) 기능은 LLM의 예측에 데이터 유효성 검사와 자동 수정 로직을 적용해 신뢰성과 견고함을 보장함
- 다양한 외부 엔진(OpenAI, Anthropic, huggingface 등) , 웹검색, 이미지 생성, 음성 처리와 연계 운용이 가능함
- 우선순위에 기반한 구성 관리 시스템과 강력한 커스터마이즈 기능이 특징임
SymbolicAI: 프로젝트 개요 및 중요성
- SymbolicAI는 고전적인 Python 프로그래밍과 차별화된, 프로그래머블한 LLM(대형 언어 모델) 의 결합을 자연스럽게 지원하는 신경-기호적(Neuro-Symbolic) 라이브러리임
- 모듈러 설계 덕분에 손쉽게 확장, 엔진 교체, 툴 연동이 가능함
- Local 엔진, 웹 검색, 이미지 생성 등 다양한 도구와 연동되어 실험적·실용적 활용에 모두 적합함
주요 개념 소개
Primitives
-
Primitives는 기본 구성 단위로, 핵심은
Symbol
객체임 -
Symbol
객체는 문법적(syntactic) 및 의미적(semantic) 모드 모두 지원함- 문법적(syntactic): 일반 Python 값처럼 동작하며 비교, 연산 등 안전하고 빠른 동작 구현
- 의미적(semantic): 신경-기호적 엔진과 연결되어 의미와 맥락을 이해하며, 유연한 의미 비교/조작 가능
-
문법적 모드가 기본이며, 엔진 동작이 필요한 경우에만 의미적 처리로 전환 가능함
의미적/문법적 모드 전환 방법
- 생성 시 semantic=True 옵션 지정
-
.sem
(semantic),.syn
(syntactic) 속성으로 자유롭게 전환 - 의미적 함수 호출(map 등) 시 자동 의미 모드 변환
연산 예시
-
==
: 문법적은 리터럴 비교, 의미적은 의미론적 동등성(예: 'Hi' == 'Hello' True) -
+
,&
,.startswith()
,.choice()
,.foreach()
,.cluster()
,.similarity()
등 - 복합적인 의미 기반 조작과 논리적 체이닝이 가능함
Contracts
- LLM의 불확실성을 보완하는 Design by Contract 원칙 도입
- 데이터 모델과 유효성 검사 규칙을 데코레이터로 지정
- 잘못된 입력/출력에 대해 자동으로 오류 수정, 재시도, 히스토리 누적 등 다양한 안정성 기능 지원
- Pydantic의 데이터 모델 호환 및 필드 검증, 자동 프롬프트 생성, 오류 처리 등 내장
계약(Contract) 기능 주요 특징
- pre_remedy/post_remedy: 입력/출력 오류 자동 수정
- accumulate_errors: 오류 히스토리 입력
- remedy_retry_params: 재시도 제어 파라미터(시도 횟수, 딜레이, 백오프 등) 지정
상세 예제 및 추가 설명은 공식 문서 및 DeepWiki 페이지 참고 가능
외부 엔진 및 기능 확장성
- 현재 OpenAI, Anthropic 등 다양한 신경-기호 엔진 지원(API/로컬)
- {huggingface, llama.cpp} 등 자체 엔진 로컬 구동 가능
- 음성, 이미지, 웹검색 등 추가 엔진 연동 가능(별도 의존성 패키지 설치 필요)
- 검색, 클러스터링, OCR, 인덱싱 등 실전 ML/AI 기능을 통합적으로 제공
구성(Configuration) 관리 시스템
우선순위 기반 구성 파일 관리
-
디버그 모드(프로젝트 폴더): 개발·테스트용
-
파이썬 환경별 설정({python_env}/.symai/)
-
글로벌 설정(~/.symai/): 기본/백업용
-
세 가지 위치에서 우선순위 높은 항목을 자동 적용
주요 구성 파일
- symai.config.json: SymbolicAI 주요 옵션 관리
- symsh.config.json, symserver.config.json: 셸, 서버용 설정
구성 파일 예시
- API Key, 모델명, 엔진 종류 등 명시적 지정
- SUPPORT_COMMUNITY 옵션으로 데이터 수집 동의(연구 및 품질 향상 목적)
- 사용자 경고(SYMAI_WARNINGS) 환경변수로 켜기/끄기 제어 가능
환경셋팅 및 테스트
- ffmpeg(음성), chromedriver(웹크롤러) 등 외부 패키지 필요
- 테스트 실행은
pytest
, 커버리지 확인 지원
참고 자료 및 활용 가이드
- DeepWiki와 공식 깃북에 풍부한 참고자료 및 동영상 튜토리얼 제공
- Arxiv 공개 논문에서 이론 및 프레임워크 상세 설명
- BSD-3-Clause 라이선스 적용
결론
- SymbolicAI는 기호 시스템의 명확성과 신경망의 유연성을 결합해 LLM 기반 신뢰성 중심 서비스 및 실험적 연구에 매우 적합한 프레임워크임
- 구성, 확장성, 신뢰성 확보에 초점을 둔 설계로, 스타트업 및 IT 실무자에게 다양한 응용 가능성을 제공함
개발자와 커뮤니티 지원
- 컨트리뷰션 자원, 연락처 및 지원 채널(이메일, 웹사이트, Discord) 적극 공개
Hacker News 의견
-
이런 식의 부두 마법이 정말 흥미로움.
내가 재미있게 봤던 예시로는 의미론적 map lambda 사용,
예를 들어 S라는 Symbol 리스트가 있을 때 S.map('모든 과일을 야채로 변환') 호출 시 과일만 야채로 바뀌고 다른 것은 그대로 유지됨
또 맥락에 따라 parameter를 받아서 비교할 수도 있음. 예를 들어 인사말 문맥 안에서 'Hello, good morning!'과 'Hi there, good day!'가 같은 의미인지 판별, 혹은 공손함 레벨로 'Good morning, sir.'와 'Hey, what’s up?'을 비교도 가능
또한 비트 연산자처럼 의미론적으로 논리적 결합도 가능. 불렛처럼 규칙과 관찰을 &로 합쳐서 결론 도출
interpret() 함수가 파워풀해 보임
OP에게 이 프로젝트에 영감을 준 요소, 실제 적용한 분야, 그리고 가장 좋아하는 활용사례가 뭔지 궁금함-
Lotus라는 python dataframe 라이브러리 추천
모든 핵심 관계형 연산자를 쉽게 의미론적으로 확장해서 사용 가능
각 호출이 ‘모델’ 포인트가 돼서 나중에 머신러닝 쪽 확장도 쉬움
snowflake 같은 클라우드 SQL도 점점 이런 방향으로 가는 느낌
louie.ai에서 유사한 시스템 구현함. AI notebook, dashboard, API를 통해 (splunk, databricks, 그래프 db 등) 데이터를 대화식으로 다루고, 문맥 기반으로 symbolic + semantic operator 자동 파악함
실무에서 정말 도움 됨
내 주요 use case는:
semantic map으로 splunk 인덱스에서 경고 가져와 의심스러운 것에 플래그 추가, 설명란도 넣고,
이를 semantic reduce로 요약해서 자연어로 리포트까지 만듦 -
당근이 사과의 야채 변환 결과인 이유가 뭐냐는 질문
-
답변하려면 매우 길어질 내용임
2022년 말부터 프로젝트가 시작됐지만, 최근에는 모델이 좋아졌을 뿐 기초적인 부분들은 이미 GPT-3 시절부터 있었음
최근에 등장한 DbC(Design by Contract)이 정말 독특함
에이전트 관련해서 내가 겪었던 모든 문제를 해결함. 특히 여러 contract를 체인으로 연결하면 guardrail이 자연스럽게 전파돼서 효과적임
거의 모든 커스텀 툴을 직접 구현
예를 들면 OpenAI의 web search가 좋긴 하지만 커스터마이즈가 부족해서, 자신만의 deep research agent를 개발해 활용 중임
첫날 결과물 사례 스레드
회사 운영 중이며, contract 3개를 연결해 e2e 문서 생성 자동화도 구축함
데모 PDF 참고
입력 프롬프트는,
“파일에서 패턴 분석, 다양한 프롬프트 포맷(XML, markdown 등), 아첨 경향, 도구 사용 방식, 윤리적 가드레일, 아키텍처적 특이점 등 전반 비교해 리포트 생성” 요구
contract는 2025년 3월 이 포스팅에서 소개했고, 이후 많이 진화했지만 기본 취지와 동기는 동일함
-
-
의미론적 ==, + 같은 연산자를 쓸 수 있다는 게 신선한 아이디어에 비료를 주는 느낌
워드 임베딩 나오던 초기에 ‘King - Man + Woman = Queen’과 비슷하게 개념 대수라는 걸 처음 접했을 때 같은 흥분
다만 여기서의 신경망과 기호(logic) 통합은 대부분 시스템들과 마찬가지로 아직 얕거나 구분돼 있음
참조
진짜 혁신은 앞으로 훨씬 근본적인 통합이 이뤄질 때 가능할 것
우리 회사(Onton)에서도 그걸 향해 연구 중임
목표는 1) 완전히 통합된 표현(심볼릭/딥러닝 모두 아님), 2) 적은 노이즈 데이터로도 연속 학습(망각 X), 3) 수학/심볼 연산 신뢰성 100%, 4) 환각(hallucination) 제로
지금은 핫글루 식의 여러 시스템 붙이기가 유용하긴 하지만, 통합형 아키텍처가 판을 갈아엎을 것 같음 -
코드 내 오류 제보(‘correctness contracts’에서 valid_sizes가 정의 안 됨)
- 피드백 감사합니다. 리팩토링 과정의 흔적이 남은 것임. 이제 수정함
-
이 주제에 대해 의견을 주고 지원해준 모든 분들께 감사
이런 반응은 기대 안 했고, 언제든 메일/트윗으로 소통 가능
여러분과 대화해서 정말 좋았음 -
아쉬움이 있음
‘Symbolic AI’라는 용어 자체가 이미 엄연히 정의돼 있음- 그 의견 충분히 들었음
조만간 이름 바꿀 수도 있을 듯
논문에도 명명 이유를 각주로 넣었고, 기초 연구를 이끈 Newell과 Simon에 대한 존경의 의미로 프로젝트 명명함
- 그 의견 충분히 들었음
-
궁금한 점이 있음
비용 정책이 어떻게 되나
자연어 연산 포함된 한 줄을 실행할 때마다(외부 API 쓰면 더더욱) LLM 추론 비용을 계속 치르게 되는 구조인지
예를 들어 "symbolic" 함수가 반복문에서 계속 호출될 때도 그런지-
맞음
예를 들어 openai API 사용 시 의미론적 연산마다 openai 호출이 일어나 비용 발생
llama.cpp 등으로 로컬 LLM 직접 호스팅하면 호스팅 비용만 들고 별도 추론 비용 없음 -
반드시 캐시 같은 게 필요할 거임
-
-
기대 안 했는데 갑자기 인기가 많아져서 좀 놀람
원래 자고 있었어야 했는데 현재 수면 부족 경험치를 살려 대화에 계속 참여 중임 -
함수형 프로그래밍(FP)처럼 모든 Symbol이 순수 값으로 동작
연산들이 깨끗하고 트레이스 가능한 플로우로 합성됨
애매한 단계에선 모델이 개입
FP의 IO 연산처럼 생성 모델 호출이 범위 내 부수효과로 취급
평상시엔 reasoning 그래프가 결정적이고 필요할 때만 모델에 위임함
데모가 정말 신기함- 거의 맞음
처음부터 함수형으로 설계함
로우 레벨에서도 전부 함수형 원칙이고 내부적으로도 functional.py나 core.py로 불림
데코레이터도 도처에서 쓰고 있어서 리팩토링/확장/버그 관리 등에 큰 도움이 됨
- 거의 맞음
-
요즘 LLM이 코드를 다 만들기도 하는데,
Symbol 같은 문맥을 담으며 python operator로 쉽게 조작되는 구조가
사람이 일일이 체크해가며 코드 짜는 것에 비해 어떤 강점이 되는지 궁금함
예를 들어 의미론적 변환을 저런 식 문법으로 직접 할 수도 있지만, 그냥 LLM에게 과일 리스트를 야채로 변환하는 프로그램 만들어달라고 프롬프트해도 되는 거 아닌가
본질적 차이가 뭔지 이해하고 싶음- 환각(hallucination) 방지 효과가 있다고 봄
LLM이 포멀 시스템을 생성하게 하면, 범용 시스템보다 검증이 훨씬 쉬움
- 환각(hallucination) 방지 효과가 있다고 봄