폴더에 파일을 넣기만 하면 자동으로 감지 → 텍스트 추출 → LLM 분류 → 청킹 → 임베딩 → Teradata 저장 → 웹 채팅에서 검색되는 자동 수집형 지식 베이스.
inbox/ 에 파일 저장 → Watcher 감지 → processing/ 이동 → hash→parse→classify→chunk→embed→save→store
→ 성공: library/<카테고리>/<서브카테고리>/ 실패: failed/
처리에 성공하면 원본 파일이 업무 분류 체계에 맞춰 library/ 아래로 자동 정리됩니다
(예: library/03_System_Config/Hardware_Sizing/tcore_cds_config.md). 분류 체계는
backend/app/ingestion/taxonomy.py에서 정의·수정하며, 폴더는 시작 시 자동 생성됩니다.
LLM이 각 문서를 이 체계의 (카테고리 → 서브카테고리)로 매핑하고, 해당 없으면 99_Unsorted/로 보냅니다.
- Backend: FastAPI + watchdog(디렉토리 감시) + 백그라운드 워커, SSE 실시간 피드
- AI: Ollama (분류·RAG 답변) + bge-m3 임베딩(1024-dim)
- 저장소: Teradata 20 (
SB_Document,SB_DocumentChunk,SB_IngestionFile,SB_IngestionLog,SB_DocumentCategory) - Frontend: Next.js 14 + Tailwind + Framer Motion + lucide-react (다크 우선 UI)
벡터 검색은 임베딩을 CLOB(JSON)으로 저장하고 인앱 코사인 유사도로 랭킹합니다
(app/llm/vector_search.py의 인터페이스 뒤에 있어 추후 네이티브 TD_VECTORDISTANCE로 교체 가능).
cp .env.docker.example .env
# .env에 TD_HOST, TD_USER, TD_PASSWORD, TD_DATABASE 값을 입력
docker compose --profile init run --rm init-db # 최초 1회: 테이블 생성 + 카테고리 시드
docker compose up -d --build- Frontend: http://localhost:3000
- Backend API: http://localhost:8077
- 로컬
second-brain/폴더가 컨테이너의/data/second-brain으로 마운트됩니다. - Ollama를 호스트 머신에서 실행하는 경우 기본값
http://host.docker.internal:11434를 사용합니다. - 웹 프론트는 외부 CDN/Google Fonts를 호출하지 않도록 구성되어 폐쇄망에서도 렌더링됩니다.
중지:
docker compose downcd backend
uv venv --python 3.12 && uv pip install -e .
# .env 에 Teradata/Ollama 접속정보가 설정되어 있어야 함 (.env.example 참고)
.venv/bin/python -m app.db.init_db # 테이블 생성 + 카테고리 시드 (최초 1회)
.venv/bin/uvicorn app.main:app --port 8077 # API + 워커 + 워처 기동cd frontend
npm install
npm run dev # http://localhost:3000second-brain/inbox/ 폴더에 .md/.txt/.pdf/.docx/.pptx/.xlsx/.html/.url/.sql/.json/.yaml/.ini/.conf/.cfg/.toml/.xml 파일을 넣으면
자동으로 처리되어 Inbox Monitor에 실시간 표시되고, Chat에서 질문할 수 있습니다.
세컨드브레인 위키 기능을 위해 다음 테이블이 추가되었습니다.
SB_Note: 직접 편집하는 위키 노트SB_KnowledgeLink: 노트·문서·프로젝트 간 연결/백링크SB_Conversation,SB_ConversationTurn: 채팅 이력 저장
기존 DB에는 아래 명령을 한 번 다시 실행해 새 테이블을 생성합니다.
cd backend
.venv/bin/python -m app.db.init_dbPhase 2에서는 위키 노트 작업 흐름이 추가되었습니다.
/wiki: 위키 노트 생성·검색·편집- 노트 본문에
[[다른 노트 제목]]을 쓰면 저장 시 자동 링크/백링크 생성 - 문서 상세의 위키 노트 버튼으로 문서를 편집 가능한 노트로 전환
- 채팅 답변의 위키 노트로 저장 버튼으로 답변과 근거 문서를 노트로 저장
Phase 3에서는 검색 품질을 개선했습니다.
- RAG 검색이 문서 청크와 위키 노트를 함께 검색합니다.
- 문서 청크는 임베딩 유사도와 키워드 매칭을 결합한 하이브리드 점수를 사용합니다.
- 위키 노트는 제목·요약·본문 키워드 매칭으로 검색에 포함됩니다.
- 채팅 출처에는
semantic,keyword,wiki keyword점수 근거가 표시됩니다. - 노트 출처를 클릭하면
/wiki?note=<id>로 이동합니다.
Phase 4에서는 문서에서 작업 지식 항목을 자동 추출합니다.
SB_KnowledgeItem:FACT,DECISION,TASK,RISK저장- 수집 파이프라인이 문서별 핵심 사실, 결정사항, 액션 아이템, 리스크를 추출합니다.
/briefing: 추출 항목을 브리핑 형태로 확인합니다./tasks: 작업과 리스크 상태를 추적합니다.
Phase 5에서는 재발견과 반추 흐름을 추가했습니다.
/review: 데일리 리뷰, 미분류/실패/오래된 지식/열린 작업 점검/graph: 노트·문서·프로젝트 연결 그래프/api/review/daily: 리뷰 집계/api/review/graph: 지식 그래프 노드/엣지
| Method | Path | 설명 |
|---|---|---|
| GET | /api/stats |
대시보드 지표 |
| GET | /api/ingestion/files |
수집 파일 목록 |
| GET | /api/ingestion/files/{id} |
파일 상세 + 단계 로그 |
| POST | /api/ingestion/files/{id}/retry |
실패 파일 재처리 |
| GET | /api/ingestion/stream |
SSE 실시간 상태 |
| GET | /api/documents, /api/documents/{id} |
문서 목록/상세 |
| GET | /api/categories |
카테고리 + 문서 수 |
| POST | /api/chat |
SSE RAG 답변 스트리밍 |
| GET/POST/PATCH | /api/notes |
위키 노트 관리 |
| GET/POST/DELETE | /api/links |
지식 객체 연결/백링크 |
| GET | /api/conversations |
저장된 채팅 이력 |
| GET/PATCH | /api/items |
Fact/Decision/Task/Risk 항목 |
| GET | /api/review/daily, /api/review/graph |
데일리 리뷰와 지식 그래프 |
특정 주제에 대해 엑셀 양식을 지식베이스 참조로 자동 채워 생성합니다. 웹 UI의 Templates 메뉴에서 스킬 선택 → 파라미터 입력 → 생성(KB 자동 채움) → 셀 수동 보완 → 엑셀 다운로드.
스킬은 backend/skills/<id>/ 폴더로 정의하며, 폴더만 추가하면 새 스킬이 자동 등록됩니다(코드 재배포 불필요):
skill.json— 메타데이터 + 입력 파라미터 + 출력 skeleton(표 구조)instructions.md— LLM 채움 지시문
첫 스킬 system_config는 두 가지 표를 생성합니다:
- 하드웨어 BOM 표 (구분/P/N/Description/수량, 노드별 셀 병합·하이라이트)
- DBMS 사이징 비교 매트릭스 (지표 × 구성안)
엔드포인트: GET /api/skills, POST /api/skills/{id}/generate(미리보기 JSON), POST /api/skills/{id}/render(xlsx 다운로드).
설계 문서: docs/IMPLEMENTATION_PLAN.md