WeKnora 제품 소개
WeKnora(위나라)는 Tencent가 오픈 소스로 공개한 지식 베이스 질의응답 시스템으로, PDF, Word, 웹페이지와 Feishu, Notion, Yuque 등의 플랫폼에 있는 자료를 가져올 수 있습니다. 사용자는 이 자료에 관해 질문하고, 답변의 인용을 통해 원문을 확인할 수 있습니다.
시스템은 검색 증강 생성(RAG)을 사용합니다. 먼저 문서를 파싱하고 인덱스를 구축한 다음, 질문에 따라 관련 청크를 검색하고 대규모 언어 모델로 답변을 생성합니다.
시스템은 Go 백엔드, Vue 3 프런트엔드, Python 문서 파싱 서비스 docreader로 구성되며, Docker Compose, Helm, Lite 단일 바이너리, 데스크톱 앱 등의 배포 방식을 지원합니다.
스크린샷 준비 중
WeKnora 메인 화면: 왼쪽의 지식 베이스와 대화, 오른쪽의 질의응답 영역
로그인 후 메인 화면 전체를 보여주세요. 사이드바(지식 베이스, 에이전트, 설정 메뉴)와 인용이 포함된 질의응답 한 차례를 표시해요.
website-docs/public/screenshots/introduction-overview.png활용 시나리오
| 요구 사항 | 기능 |
|---|---|
| 다양한 문서 형식과 구조화하기 어려운 PDF/스캔본/표 | 문서 처리 과정에서 PDF 레이아웃 분석, 스캔본 OCR, Office 변환, 웹페이지 수집, 이미지 설명을 지원하며, OpenDataLoader/Docling 하이브리드 파싱을 선택할 수 있습니다 |
| 벡터 검색만으로는 불안정한 검색 결과 | 벡터 + 키워드(BM25) 하이브리드 검색, RRF 융합, Rerank 리랭킹을 지원하며, 지식 그래프(GraphRAG)와 Wiki 탐색을 선택할 수 있습니다 |
| 단일 공급업체에 종속된 모델 | 모델 추상화 계층: Ollama 로컬 모델과 OpenAI 호환 원격 인터페이스 모두 사용 가능하며, LLM / Embedding / Rerank / VLM / ASR을 분류 관리합니다(internal/types/model.go 참고) |
| 데이터 보안과 프라이빗 배포 | 전체 스택을 프라이빗 환경에 배포할 수 있습니다. 민감한 자격 증명(API Key 등)은 AES-256으로 암호화하여 디스크에 저장합니다(SYSTEM_AES_KEY). 멀티테넌트 격리 + RBAC 역할 권한 검증을 제공합니다 |
| 다단계 작업과 도구 호출 | 내장 Agent(ReAct 다단계 추론), MCP 도구 연결, Agent Skills 샌드박스 실행, 웹 검색(SearXNG 등), 데이터 분석(CSV/Excel에 SQL 실행)을 제공합니다 |
| 팀 협업 | 테넌트(작업 공간) + 멤버 역할 + 조직(Organization)을 통한 테넌트 간 지식 베이스 공유 + 초대 기능 |
핵심 개념
지식 베이스는 자료를 정리하고, 작업 공간은 멤버와 리소스 권한을 관리하며, 에이전트는 답변에 사용할 모델과 도구를 결정합니다. 다음 용어는 화면의 옵션에 대응하며, 전체 타입 정의는 internal/types/에 있습니다.
테넌트와 신원
| 개념 | 설명 |
|---|---|
| 테넌트 Tenant | 지식 베이스, 모델, 에이전트, 대화, 저장 용량 할당량을 관리하는 작업 공간입니다. 자세한 내용은 공간과 권한을 참고하세요 |
| 사용자 User | 로그인 계정으로, 한 사용자가 여러 작업 공간에 참여할 수 있습니다 |
| 멤버 TenantMember | 특정 공간에서 사용자의 멤버 관계로, 역할과 상태를 포함합니다 |
| 역할 TenantRole | Owner, Admin, Contributor, Viewer의 4단계로, 사용자가 공간에서 수행할 수 있는 작업을 결정합니다 |
| API Key(TenantAPIKey) | 프로그램 접근 자격 증명으로, 특정 기능을 부여하고 지식 베이스 범위를 제한할 수 있습니다. 공간 Key와 플랫폼 Key의 권한은 별도로 관리합니다 |
| 조직 Organization | 여러 작업 공간을 연결하고, 조직 멤버 역할에 따라 지식 베이스와 에이전트를 공유합니다 |
지식 도메인
| 개념 | 설명 |
|---|---|
| 지식 베이스 KnowledgeBase | 관련 자료를 정리하고 모델, 청크, 인덱스 전략을 설정합니다. 문서, FAQ, Wiki 유형을 지원합니다 |
| 지식 Knowledge | 지식 베이스에 있는 파일, 웹페이지 또는 직접 작성한 콘텐츠 하나로, 등록 후 파싱 상태를 확인할 수 있습니다 |
| 청크 Chunk | 문서 파싱 후의 검색 단위로, 텍스트, 이미지 인식 결과, 표 또는 기타 인덱스 콘텐츠를 포함할 수 있습니다 |
| FAQ | 표준 질문, 유사 질문, 반례 질문과 답변을 관리하는 질의응답 항목입니다. 자세한 내용은 FAQ 기능을 참고하세요 |
| Wiki 페이지 WikiPage | 문서에서 생성한 주제별 페이지로, 출처 인용과 페이지 링크를 포함하며 편집과 버전 관리를 지원합니다 |
| 지식 그래프 Entity / Relationship | 문서의 엔터티와 관계를 Neo4j에 저장하여 연관 콘텐츠 검색을 보완합니다 |
| 데이터 소스 DataSource | 외부 자료를 지속적으로 동기화하는 연결입니다. Feishu, Lark, GitLab, IMA, Notion, Yuque, RSS를 지원합니다. 자세한 내용은 데이터 소스 가져오기를 참고하세요 |
| 검색 설정 RetrievalConfig | 후보 수, 일치 임계값, 융합 가중치, 리랭킹 결과를 제어합니다. 자세한 내용은 검색 엔진을 참고하세요 |
대화와 에이전트
| 개념 | 설명 |
|---|---|
| 세션 Session | 여러 차례의 질의응답과 선택한 에이전트, 모델, 지식 범위, 도구 설정을 저장합니다 |
| 메시지 Message | 질문 또는 답변 하나로, 이미지, 첨부 파일, 인용, 도구 실행 결과를 연결할 수 있습니다 |
| 모델 Model | 대화, 벡터화, 리랭킹, 시각 또는 음성 기능을 제공하는 모델 연결입니다. 자세한 내용은 모델 관리를 참고하세요 |
| Agent(사용자 정의 에이전트) CustomAgent | 작업에 맞춰 모델, 자료 범위, 도구를 설정하며, 빠른 질의응답과 지능형 추론을 지원합니다 |
| 내장 Agent | 빠른 질의응답, 지능형 추론, 데이터 분석, Wiki 에이전트가 미리 설정되어 있습니다. 자세한 내용은 Agent 엔진을 참고하세요 |
| 스킬과 샌드박스 | 공간의 스킬 카탈로그에 패키지를 저장하고 샌드박스 설정에 따라 설치한 뒤 에이전트에 연결하여 사용합니다. Docker/Cube/E2B, 개인 변수, 생성 파일을 지원합니다. 스킬과 샌드박스를 참고하세요 |
| 장기 기억 | 공간과 호출자별로 자료/선호/사실/할 일/관심사를 저장합니다. 기본적으로 꺼져 있으며, 활성화와 개인 관리는 장기 기억을 참고하세요 |
| MCP 서비스 MCPService | 에이전트에 외부 도구를 연결하며, SSE와 Streamable HTTP를 지원합니다. 인증은 API Key, Bearer, OAuth 2.0 중 선택할 수 있습니다 |
개념 관계도
기능 목록
- 문서 연결: 파일 업로드(PDF/Word/PPT/Excel/Markdown/HTML/이미지/음성 등), URL 수집, Markdown 직접 작성, 전체 디렉터리 업로드, Feishu / Lark / Notion / Yuque / RSS 정기 동기화.
- 문서 이해: 레이아웃 분석, 스캔본 OCR, 표 추출, 이미지 멀티모달 설명(VLM), 음성 전사(ASR), 파일 유형별 파싱 엔진 선택(
ParserEngineRules, MinerU / OpenDataLoader 연결 가능). - 인덱스 파이프라인: 청크 설정(부모-자식 청크 및 적응형 전략 포함), 벡터 인덱스, 키워드 전문 인덱스, FAQ 인덱스, Wiki 생성, 지식 그래프 추출, 사전 질문 생성(question generation).
- 검색: 벡터 + BM25 하이브리드 검색, RRF 융합, Rerank 리랭킹, 쿼리 재작성 및 확장, 의도 인식(greeting/chitchat/web_search 등,
config/prompt_templates/intent_prompts.yaml참고). - 질의응답과 Agent: SSE 스트리밍 질의응답, 다중 턴 문맥 압축, 인용 출처 추적. ReAct Agent(도구:
knowledge_search,grep_chunks,wiki_search,data_analysis등), MCP 외부 도구, Agent Skills(Docker, Cube 또는 E2B 샌드박스에서 스크립트 실행), 웹 검색. - 멀티테넌트와 보안: RBAC 역할 권한 검증(기본 활성화,
WEKNORA_TENANT_ENABLE_RBAC), 감사 로그(기본 90일 보관), 초대 전용 가입(auth.registration_mode=invite_only, 이전 변수DISABLE_REGISTRATION=true도 사용 가능), OIDC 통합 로그인, SSRF 방어, 민감 필드 AES-256 암호화. - 관측 가능성: Langfuse 전체 경로 추적(LLM/Embedding/Rerank/VLM/ASR 호출 및 토큰 통계), 상태 확인, Swagger API 문서(
GIN_MODE=debug일 때). - 생태계: REST API(
/api/v1) + API Key, 독립 MCP Server(WeKnora를 다른 Agent에 도구로 노출), CLI(cli/), WeChat 미니 프로그램(miniprogram/), 브라우저 확장 프로그램 채널.
시스템 구성 요소 개요
| 구성 요소 | 기술 스택 | 소스 위치 | 기본 포트 | 역할 |
|---|---|---|---|---|
| app(백엔드) | Go / Gin | cmd/server, internal/ | 8080 | REST API, 검색 질의응답, Agent 엔진, 비동기 작업(Asynq) |
| frontend(프런트엔드) | Vue 3 + Nginx | frontend/ | 80 | 웹 콘솔, Nginx가 /api를 app으로 리버스 프록시 |
| docreader | Python / gRPC | docreader/ | 50051(컨테이너 네트워크 내부 전용) | 파일을 Markdown으로 변환, 웹페이지 수집, 이미지 추출 |
| postgres | ParadeDB(PostgreSQL 17 + BM25/벡터 확장) | 이미지 paradedb/paradedb | 5432 | 주 데이터베이스 + 기본 하이브리드 검색 엔진(RETRIEVE_DRIVER=postgres) |
| redis | Redis 7 | — | 6379 | 스트림 관리(SSE 복구), Asynq 작업 큐 |
| sandbox | Python 3.12 + Node 20 | docker/Dockerfile.sandbox | — | Agent Skills의 세션 샌드박스 컨테이너 이미지 |
| 선택: qdrant / milvus / weaviate / doris | — | docker-compose.yml profiles | 6334 / 19530 / 9035 / 9030 | 대체하거나 함께 사용하는 벡터 검색 엔진(RETRIEVE_DRIVER) |
| 선택: opensearch | — | docker-compose.dev.yml에만 제공 | 9200 | 개발 환경용이며, 프로덕션에서는 클러스터를 직접 준비해야 합니다 |
| 선택: elasticsearch / tencent_vectordb | — | compose에 포함되지 않음 | — | 코드에서 지원하지만 직접 배포한 후 RETRIEVE_DRIVER로 연결해야 합니다 |
| 선택: neo4j | Neo4j | profile neo4j | 7474 / 7687 | 지식 그래프 저장소(GraphRAG) |
| 선택: minio | MinIO | profile minio | 9000 / 9001 | S3 호환 객체 스토리지(STORAGE_TYPE=minio) |
| 선택: searxng | SearXNG | profile searxng | 8888 | 자체 호스팅 웹 검색 엔진 |
| 선택: langfuse 스택 | Langfuse 3 + ClickHouse + MinIO | profile langfuse | 3000 | LLM 관측 가능성 |
| 선택: mcp | Python | mcp-server/, profile full | 8082 | WeKnora API를 MCP Server로 래핑 |
| 선택: odl-hybrid | Docling | profile odl-hybrid | 5002 | OpenDataLoader PDF 하이브리드 파싱 백엔드 |
