TRENDSHIFT 딥다이브 · 일간 #16 · 2026-06-18

yifanfeng97/Hyper-Extract 딥다이브
— 문서를 '구조화된 지식'으로 바꾸는 LLM 추출 CLI

Hyper-Extract(PyPI 패키지 hyperextract, 명령어 he)는 비정형 텍스트를 강타입(strongly-typed) '지식 추상(Knowledge Abstract)'으로 바꾸는 LLM 기반 지식 추출 프레임워크다. 단순 리스트·집합부터 지식 그래프, 하이퍼그래프, 시공간 그래프까지 8가지 구조를 명령어 한 줄로 뽑아낸다. 슬로건은 "Stop reading. Start understanding(읽기를 멈추고, 이해를 시작하라)". (저장소: yifanfeng97/Hyper-Extract · Python ≥3.11 · Apache-2.0 · ★약 1,600 · 2026년 1월 신생 · v0.2.0 알파)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

한 문장으로 이 프로젝트가 뭘 하는지부터.

Hyper-Extract = "문서를 들이밀면, 사람이 읽지 않아도 컴퓨터가 다룰 수 있는 '지식 구조물'로 바꿔 주는 명령줄 도구." 우리가 가진 정보 대부분은 줄글(비정형 텍스트)이다. 사람은 읽으면 이해하지만, 프로그램은 줄글을 곧바로 계산·검색·연결하지 못한다. Hyper-Extract는 LLM에게 텍스트를 읽혀서, 미리 정해 둔 '틀(스키마)'에 맞는 강타입 데이터로 뽑아낸다. 그 결과물이 엔티티(노드)와 관계(엣지)로 이뤄진 지식 그래프, 또는 셋 이상을 한 번에 묶는 하이퍼그래프다.

🧩 한 줄 비유

"두꺼운 보고서를 통째로 읽는" 대신, "그 안의 인물·사건·관계를 자동으로 뽑아 관계도로 그려 주는 비서"

테슬라 전기를 한 권 받았다고 하자. 사람이 읽으면 "에디슨 밑에서 일했고, 웨스팅하우스와 손잡았고…"를 머릿속에 그린다. Hyper-Extract는 그 과정을 자동화한다 — 인물·회사·발명을 점(노드)으로, '함께 일했다/경쟁했다'를 선(엣지)으로 뽑아 검색 가능한 관계도를 만든다.

게다가 "君臣佐使로 짜인 한약 처방"처럼 셋 이상이 한 덩어리로 얽히는 관계는 보통 그래프로 표현이 어색한데, Hyper-Extract는 그걸 하이퍼엣지(hyperedge) 하나로 통째로 묶어 버린다. 이게 이름에 'Hyper'가 붙은 이유다.

용어
비정형 텍스트 (Unstructured Text)
표·DB처럼 칸이 나뉘어 있지 않은 '그냥 줄글'. 논문·기사·계약서·진료기록 대부분이 여기 속한다. 사람은 잘 읽지만 프로그램이 직접 다루기 어려워서, 먼저 '구조화'가 필요하다.
용어
지식 추상 (Knowledge Abstract, KA)
Hyper-Extract가 만들어 내는 결과물 한 덩어리. 실제로는 하나의 폴더이며 안에 추출된 데이터(data.json), 메타정보(metadata.json), 검색용 인덱스(index/)가 들어 있다. "텍스트에서 짜낸 지식을 담아 두는 캡슐"이라고 보면 된다.
용어
강타입 / 스키마 (Strongly-typed / Schema)
결과의 '모양'을 미리 못 박아 두는 것. 예: "노드는 반드시 name·type을 갖는다"를 Pydantic 모델로 정의하면, LLM은 그 틀에 맞춰서만 답한다. 덕분에 결과가 들쭉날쭉하지 않고 예측 가능해져서 곧바로 프로그램에 쓸 수 있다.

핵심 정체성을 정리하면 세 가지다. ⑴ LLM으로 추출한다(규칙 기반 파서가 아니라 언어모델이 읽고 판단). ⑵ 결과가 강타입 구조물이다(리스트·모델·그래프·하이퍼그래프·시공간 그래프 등 8종). ⑶ 점진적으로 키운다 — 새 문서를 계속 먹이면(he feed) 기존 지식 베이스가 중복을 합치며 커진다(저자는 이를 '지식 진화, knowledge evolution'라 부른다).

2왜 주목받는가

TrendShift 일간 16위 — GraphRAG 도구가 쏟아지는 와중에 이게 눈에 띈 이유.

2024~2026년은 "RAG에서 GraphRAG로" 넘어가는 흐름이 뜨겁다. 단순히 문서 조각을 검색해 붙이는 RAG의 한계를 넘어, 지식을 그래프로 구조화해 추론까지 노리는 접근(Microsoft GraphRAG, LightRAG, KG-Gen 등)이 줄줄이 나왔다. Hyper-Extract는 그 경쟁의 한복판에서 다음 네 가지로 차별화한다.

① 그래프를 넘어 '하이퍼그래프'와 '시공간'까지

대부분의 도구는 둘씩 잇는 보통 그래프(binary graph)에서 멈춘다. Hyper-Extract는 셋 이상을 한 번에 묶는 하이퍼그래프, 그리고 시간·장소가 붙은 시공간 그래프까지 1급 시민으로 다룬다. README의 비교표에서 이 도구만 'Spatial Graph + Hypergraph + Domain Templates' 세 칸을 동시에 채운다고 주장한다 — 이게 가장 큰 세일즈 포인트다.

② "코드 0줄" 도메인 템플릿 80여 종

금융·법률·의료·한의학(TCM)·산업·일반 도메인에 맞춘 YAML 템플릿이 미리 들어 있다. 사용자는 파이썬을 한 줄도 안 쓰고 he parse 문서 -t finance/...처럼 템플릿 이름만 고르면 된다. "추출이 뭘 뽑아야 하는지"를 코드가 아니라 설정 파일로 갈아끼우는 설계다.

③ 10여 종 추출 엔진을 한 지붕 아래에

GraphRAG·LightRAG·iText2KG·KG-Gen 같은 유명 논문 방식들을 재구현methods/ 폴더에 모아 뒀다. he parse -m hyper_rag처럼 방법만 바꿔 끼우며 같은 입력에 여러 알고리즘을 비교할 수 있다. "여러 GraphRAG 구현을 각각 깔지 말고, 한 CLI에서 스위치로 돌려 보라"는 제안이다.

④ 데이터가 밖으로 안 나가는 '완전 로컬' 옵션

OpenAI뿐 아니라 vLLM 로컬 서버(예: Qwen3.5-9B + bge-m3 임베딩)를 1급으로 지원한다. 민감한 의료·법률 문서를 내 GPU 안에서만 처리할 수 있다는 점은 기업·연구실에 큰 매력이다.

도구성격Hyper-Extract와의 차이
Microsoft GraphRAG그래프 기반 RAG의 대표보통 그래프 중심·무겁다. Hyper-Extract는 하이퍼/시공간 + 가벼운 CLI + 도메인 템플릿.
LightRAG경량 GraphRAG속도·간결함이 강점. Hyper-Extract는 그걸 -m light_rag 엔진으로 흡수하고 8개 구조로 확장.
KG-Gen / iText2KG지식그래프 생성기그래프 생성에 특화. Hyper-Extract는 같은 계열을 엔진으로 품고 하이퍼그래프까지.
Hyper-Extract추출 '프레임워크' + CLI8종 구조·9개 엔진·80+ 템플릿·로컬 LLM·증분 진화를 하나로 묶음.
강점
"한 가지 추출기"가 아니라 "추출의 플랫폼"

이 레포의 진짜 가치는 특정 알고리즘이 아니라 3층 구조(템플릿 → 엔진 → 자료형)다. 쉬운 사람은 템플릿만, 중간은 엔진 선택, 고급은 파이썬 API로 자기 스키마를 직접 짠다. 난이도별로 같은 엔진을 공유하므로, 입문자가 점점 깊이 들어가도 도구를 갈아탈 필요가 없다.

냉정하게 보기
핵심 로직 상당수가 '저자의 다른 라이브러리'에 있다

겉보기엔 Hyper-Extract 한 레포지만, 무거운 일(저장·병합·중복 제거·시각화)은 같은 저자(Yifan Feng)가 만든 ontomem·ontosight·semhash가 처리한다. 즉 이 레포 자체는 '오케스트레이션 + 스키마 + 템플릿' 층에 가깝다. 또한 2026년 1월에 막 시작된 v0.2.0 알파라 API가 바뀔 수 있고, 비교표의 "유일하게 다 된다"식 주장은 저자 측 표현이니 직접 검증하며 받아들이는 게 좋다.

3기술 스택 전체 지도

pyproject.toml · uv.lock · 소스를 직접 열어 확인한 실제 구성. 순수 파이썬 프로젝트다.

먼저 큰 그림 — Hyper-Extract는 웹 서버·프런트엔드가 없는 순수 파이썬 CLI다(Python ≥3.11, 빌드 백엔드 hatchling). 외부 서비스는 'LLM + 임베딩' 두 가지뿐이고, 나머지는 전부 파이썬 라이브러리다. 스택은 ⓐ LLM 오케스트레이션, ⓑ 저장·검색, ⓒ CLI/UX, ⓓ 저자 제작 핵심 엔진 네 묶음으로 나뉜다.

ⓐ LLM 오케스트레이션 — 텍스트를 모델에 먹이고 구조로 받기

구성요소역할
langchain / langchain-core프롬프트 템플릿(ChatPromptTemplate), 구조화 출력(with_structured_output), 동시 호출(.batch()), 텍스트 분할(RecursiveCharacterTextSplitter)을 제공하는 뼈대.
langchain-openai실제 LLM·임베딩 클라이언트. OpenAI 호환이면 무엇이든 ChatOpenAI/OpenAIEmbeddings로 호출(국산·중국·로컬 엔드포인트 포함).
langchain-anthropic · langchain-google-genai선택 의존성(extras). Anthropic·Google 모델을 쓰려면 pip install "hyperextract[all]"로 추가.

ⓑ 저장·검색 — 뽑은 지식을 담고 다시 찾기

구성요소역할
faiss-cpu벡터 인덱스 백엔드. 노드·엣지를 임베딩해 저장하고 의미 검색(semantic search)을 수행. CPU판이라 GPU 불필요.
semhash의미 기반 근접 중복 탐지. 표현만 다르고 뜻이 같은 항목을 걸러 낸다(저자 제작).

ⓒ CLI · UX · 설정

구성요소역할
typerhe 명령 트리(parse/feed/search/talk/show…)를 구성하는 CLI 프레임워크.
rich터미널 표·패널·스피너·아스키 로고 같은 예쁜 출력.
python-dotenv · tomli-w.env 읽기, 그리고 ~/.he/config.toml 설정 파일 쓰기.
structlog구조화 로깅.

ⓓ 저자 제작 핵심 엔진 — 진짜 무게가 실린 곳

아래 세 라이브러리는 모두 같은 저자(Yifan Feng)가 만든 것으로, Hyper-Extract의 '심장부'다. 이 레포만 봐서는 안 보이는 알맹이가 여기 있다.

구성요소역할
ontomemOMem(객체 메모리 저장소) + 병합 전략(MergeStrategy, create_merger). 모든 자료형 밑에서 중복 제거·병합·색인을 담당하는 엔진.
ontosight그래프·하이퍼그래프 시각화(view_graph, view_hypergraph). he show 명령의 실체.
semhash위 ⓑ에 등장. 의미 해시 기반 중복 제거.
용어
구조화 출력 (Structured Output)
LLM이 자유 문장이 아니라 정해진 JSON 스키마에 맞춰 답하게 강제하는 기능. LangChain의 llm.with_structured_output(스키마)가 모델의 함수호출/JSON 모드를 이용해 이를 보장한다. Hyper-Extract의 '하드 요구사항' — 이 기능을 지원하는 모델만 쓸 수 있다.
용어
임베딩 / FAISS
임베딩은 문장을 '의미 좌표(숫자 벡터)'로 바꾸는 것. 비슷한 뜻이면 좌표도 가깝다. FAISS는 그 벡터들 사이에서 "가장 가까운 것"을 빠르게 찾아 주는 검색 엔진(메타 제작 오픈소스). he search·he talk가 이걸로 돌아간다.
용어
Pydantic
파이썬에서 데이터의 '모양과 타입'을 클래스로 선언하고 자동 검증하는 라이브러리. 여기선 "노드/엣지가 어떤 필드를 갖는지"를 Pydantic 모델로 정의하고, 그걸 그대로 LLM의 출력 스키마로 넘긴다.

4아키텍처 심화 분석

텍스트 한 덩이가 그래프가 되기까지 — 그리고 '3층 구조'가 왜 영리한가.

아키텍처는 두 축으로 본다. (1) 가로축: 사용자 접근 3층(템플릿 → 엔진 → 자료형) — 쉬운 길과 유연한 길을 같은 엔진 위에 쌓은 구조. (2) 세로축: 추출 파이프라인 — 원본 텍스트가 LLM을 거쳐 색인된 그래프가 되는 흐름. 먼저 3층부터.

가로축 — 사용자 접근 3층

[쉬움] Templates (80+ YAML 프리셋) "코드 0줄, 도메인만 선택" │ he parse 문서 -t tcm/formula_composition ▼ [중간] Methods (9개 추출 엔진) GraphRAG·LightRAG·Hyper-RAG... │ he parse 문서 -m hyper_rag ▼ [유연] Auto-Types (8종 자료 구조) AutoGraph·AutoHypergraph... │ 파이썬 API로 내 스키마 직접 정의 ▼ LLM + 임베딩 (OpenAI 호환 / vLLM 로컬)

핵심은 세 층 모두 결국 같은 Auto-Type 엔진을 인스턴스화한다는 점이다. 템플릿(YAML)도, 메서드(엔진)도 내부적으론 AutoGraph·AutoHypergraph 같은 객체를 만들 뿐이다. 그래서 입문자가 템플릿으로 시작했다가 나중에 파이썬 API로 내려가도 개념이 그대로 이어진다.

세로축 — 추출 파이프라인 (텍스트 → 그래프)

원본 텍스트 (.txt / .md / stdin) │ ▼ ┌─────────────────────────────────────────────────────────┐ │ BaseAutoType 파이프라인 (템플릿 메서드 패턴) │ │ │ │ ① 청크 분할 RecursiveCharacterTextSplitter │ │ (2048자, 256자 겹침 · 한/영 문장부호 모두 인식) │ │ │ │ │ ▼ │ │ ② LLM 추출 prompt | llm.with_structured_output(스키마) │ │ 여러 청크는 .batch(max_concurrency=10)으로 동시 호출 │ │ │ │ │ ▼ │ │ ③ None 거르기 (구조화 실패분 제거, 인덱스 정렬 유지) │ │ │ │ │ ▼ │ │ ④ 병합 merge_batch_data → ontomem 머저로 중복 합치기 │ │ (기본 MergeStrategy.LLM.BALANCED = LLM 보조 병합) │ │ │ │ │ ▼ │ │ ⑤ 저장(OMem) → ⑥ FAISS 인덱싱 │ └─────────────────────────────────────────────────────────┘ │ ▼ 지식 추상(KA) 폴더: data.json · metadata.json · index/

핵심 설계 패턴 ① — 템플릿 메서드 패턴(Template Method)

추상 클래스 BaseAutoType이 위 파이프라인 '전체 골격'을 소유하고, 8개 자료형은 빈칸(훅)만 채운다. 예: _init_data_state(초기 상태), merge_batch_data(병합 방식), build_index(색인), search(검색), _default_prompt(기본 프롬프트). 실제 추출의 심장은 이 한 줄이다:

# BaseAutoType: 프롬프트와 '구조화 출력 LLM'을 파이프로 연결
self.data_extractor = self.prompt_template | self.llm_client.with_structured_output(self._data_schema)

# _extract_data: 짧으면 한 번, 길면 청크로 쪼개 동시 호출
if len(text) <= self.chunk_size:
    extracted = [self.data_extractor.invoke({"source_text": text})]
else:
    chunks = self.text_splitter.split_text(text)
    inputs = [{"source_text": c} for c in chunks]
    extracted = self.data_extractor.batch(inputs, config={"max_concurrency": self.max_workers})
extracted = self._filter_none_results(extracted)   # 실패분 제거
merged = self.merge_batch_data(extracted)           # ontomem 머저로 병합

핵심 설계 패턴 ② — 하이퍼그래프는 '노드/엣지 분리 저장 + 이중 색인'

보통 그래프와 하이퍼그래프의 차이는 개념이 아니라 코드에 박혀 있다. 하이퍼엣지는 둘이 아니라 참여자 전체를 담은 튜플이다. 그래서 중복을 합치려면 참여자를 정렬해 '순서 무관' 키를 만들어야 한다.

# 보통 그래프: 엣지 = (출발, 도착) 2-튜플
nodes_in_edge_extractor = lambda x: (x.source, x.target)

# 하이퍼그래프: 엣지 = 참여자 전원 튜플 (2개 이상)
nodes_in_edge_extractor = lambda x: tuple(x.members)
edge_key_extractor      = lambda x: f"{x.type}_{'_'.join(sorted(x.members))}"
# ↑ sorted(): {A,B,C}=={C,B,A} 로 보게 만들어 중복 제거가 동작

그리고 AutoHypergraph노드용 OMem과 엣지용 OMem을 따로 두고, FAISS 인덱스도 node_index/·edge_index/ 둘로 나눈다. 검색은 (노드들, 엣지들) 튜플을 돌려주고, RAG 챗은 이를 "=== 관련 노드 ===", "=== 관련 엣지 ===" 두 블록으로 나눠 모델에 보여 준다.

설계 디테일
하이퍼그래프의 '엄격한 가지치기'

보통 그래프는 한쪽 끝점만 없어도 엣지를 버린다. 하지만 하이퍼엣지는 참여자가 여럿이라, _prune_dangling_edges"참여자 전원이 노드 목록에 존재할 때만" 그 하이퍼엣지를 살린다(하나라도 빠지면 폐기). 다대다 관계의 일관성을 지키려는 의도된 보수성이다.

핵심 설계 패턴 ③ — 시공간 그래프는 '복합 키 + 관측 기준점 주입'

AutoSpatioTemporalGraphAutoGraph를 상속해 두 가지를 더한다. ⑴ 같은 관계라도 시간·장소가 다르면 다른 것으로 보도록 복합 키 "{관계} @ {시간} at {장소}"를 만든다. ⑵ 프롬프트에 observation_time(기본=오늘)·observation_location을 주입해, LLM이 "작년", "여기", "현재" 같은 상대 표현을 절대값으로 환산하게 한다. 또한 "시간을 노드로 뽑지 말라(시간은 관계의 속성이다)"를 명시한다.

용어
하이퍼그래프 / 하이퍼엣지 (Hypergraph / Hyperedge)
보통 그래프의 선(엣지)은 점 2개만 잇는다. 하이퍼엣지는 점을 몇 개든 한 번에 묶는다. 예: "철수·영희·민수가 같은 프로젝트 팀" → 셋을 하나의 하이퍼엣지로. 한약 처방(군신좌사)·논문 공저·화학 반응처럼 '여럿이 한 덩어리'인 관계에 자연스럽다.
용어
템플릿 메서드 패턴 (Template Method Pattern)
부모 클래스가 작업의 '전체 순서(골격)'를 정해 두고, 자식 클래스가 그 안의 특정 단계만 바꿔 끼우는 객체지향 패턴. 여기선 BaseAutoType이 추출 파이프라인을 고정하고, 그래프·하이퍼그래프 등이 병합·색인 같은 단계만 다르게 구현한다.
용어
증분 진화 (Incremental Evolution)
한 번에 끝내지 않고 문서를 계속 추가로 먹여 지식 베이스를 키우는 방식. he feed KA폴더 새문서를 하면 기존 메타데이터의 템플릿·언어를 재사용해 추출하고, 중복은 합쳐서 그래프를 확장한다.

5디렉토리 구조 해부

저장소를 클론하면 어디부터 봐야 하는가 — types/가 본체다.

공부 순서 추천: README.mdexamples/(돌려보며 감 잡기) → hyperextract/types/base.py(파이프라인 골격) → types/hypergraph.py(간판 자료형) → utils/client.py(LLM 연결). 가장 중요한 폴더는 types/(8개 자료형)methods/(9개 엔진)다.

Hyper-Extract/ ├── hyperextract/ ★ 설치되는 파이썬 패키지 │ ├── __init__.py 공개 API: 8개 AutoType, Template, create_client │ ├── cli/ Typer CLI ("he") │ │ ├── cli.py 메인 앱 + parse/feed/build-index/info/search/talk/show │ │ ├── config.py ConfigManager, ~/.he/config.toml 관리 │ │ └── utils.py LOGO, read_input(파일/디렉토리/stdin) │ ├── types/ ★★ 8개 AutoType 자료 구조 (핵심) │ │ ├── base.py BaseAutoType — 파이프라인 골격(템플릿 메서드) │ │ ├── graph.py AutoGraph — 2자 엣지 지식그래프 │ │ ├── hypergraph.py AutoHypergraph — n자 하이퍼엣지 │ │ ├── spatio_temporal_graph.py / spatial_graph.py / temporal_graph.py │ │ └── model.py / list.py / set.py 단순 구조(모델/리스트/집합) │ ├── methods/ ★ 미리 만든 추출 엔진들 │ │ ├── registry.py 9개 엔진 등록(이름→클래스→자료형 매핑) │ │ ├── rag/ graph_rag · light_rag · hyper_rag · hypergraph_rag · cog_rag │ │ └── typical/ atom · itext2kg · itext2kg_star · kg_gen │ ├── templates/ │ │ ├── presets/ 도메인별 YAML 프리셋(finance/legal/medical/tcm/...) │ │ └── DESIGN_GUIDE.md 템플릿 작성 가이드 │ └── utils/ │ ├── client.py create_client/llm/embedder(공급자 팩토리) │ └── template_engine/ YAML→AutoType 변환(factory·gallery·parsers) ├── hyperextract-skills/ ★ 번들된 Claude Code 스킬 팩(템플릿 설계 도우미) ├── examples/ en + zh 실행 예제(autotypes/methods/providers/templates) ├── docs/ MkDocs 이중언어 문서 사이트(약 130개 .md) ├── tests/ pytest(types·template_engine·cli·integration) ├── pyproject.toml · uv.lock · mkdocs.yml · .env.example · README.md / README_ZH.md
위치역할
hyperextract/types/레포의 심장. 8개 강타입 자료 구조. base.py가 골격, graph.py·hypergraph.py가 간판.
hyperextract/methods/유명 논문 방식(GraphRAG·LightRAG·iText2KG·KG-Gen 등)을 재구현한 9개 엔진. registry.py가 이름↔클래스 연결.
hyperextract/templates/presets/코드 없이 쓰는 도메인 YAML 프리셋. 예: tcm/formula_composition.yaml(한약 처방).
utils/template_engine/YAML 한 장을 실제 AutoType 객체로 바꾸는 변환기(파서들).
hyperextract-skills/이 레포가 함께 배포하는 Claude Code 스킬 팩 — YAML 템플릿을 '설계'하도록 돕는 워크플로(아래 학습 포인트 참고).
examples/ · docs/영/중 실행 예제와 MkDocs 문서. 입문자는 여기서 시작하는 게 가장 빠르다.
흥미로운 점
레포가 '자기를 쓰는 법'을 스킬로 동봉했다

hyperextract-skills/ 안엔 brainstorm·graph-designer·yaml-validator·template-optimizer 같은 스킬이 들어 있다. 즉 "어떤 스키마/템플릿을 만들지"를 Claude Code 같은 에이전트와 함께 설계하라는 것. 이 공부 프로젝트(스킬 기반 자동화)와도 잘 맞는 부분이라 한 번 열어 볼 가치가 있다.

6학습 포인트 (기술별)

이 레포에서 실제로 무엇을 배울 수 있는가 — 기술별 + 실습 아이디어.

학습 포인트 ①

LLM '구조화 출력'으로 신뢰 가능한 추출 만들기

가장 큰 배움. LLM에게 자유 문장이 아니라 Pydantic 스키마로 답을 강제하면, 결과를 곧장 프로그램에 쓸 수 있다. prompt | llm.with_structured_output(schema) 한 줄이 "추출의 신뢰성"을 어떻게 끌어올리는지, 실패분을 None으로 거르는 처리까지 한 세트로 배운다.

실습 아이디어: 간단한 Entity(name, type) 스키마를 만들어 기사 한 편에서 인물·기관을 뽑아 보고, 스키마에 필드를 더했을 때 결과가 어떻게 달라지는지 본다.

학습 포인트 ②

그래프 vs 하이퍼그래프 — 모델링 감각

"이 관계는 둘인가, 여럿인가?"를 구분하는 눈. 공저·팀·처방·반응처럼 다대다가 본질인 관계를 보통 그래프로 욱여넣으면 정보가 깨진다. 하이퍼엣지 = 참여자 정렬 튜플이라는 표현, '순서 무관 중복 제거', '전원 존재해야 살리는 가지치기'를 코드로 배운다.

실습 아이디어: 같은 문단을 AutoGraphAutoHypergraph로 각각 추출해, 결과 그래프의 모양 차이를 he show로 시각 비교한다.

학습 포인트 ③

벡터 검색 + RAG 파이프라인 직접 보기

추출만이 아니라 FAISS 색인 → 의미 검색 → RAG 챗까지 한 흐름에 들어 있다. 노드·엣지를 따로 임베딩해 (노드, 엣지)로 검색하고, 그걸 프롬프트에 블록으로 끼워 답을 만드는 GraphRAG식 검색 증강의 실제 구현을 읽을 수 있다.

실습 아이디어: he searchhe talk의 결과를 비교하고, top_k(가져오는 개수)를 바꿔 답 품질이 어떻게 변하는지 관찰한다.

학습 포인트 ④

'설정으로 추출을 갈아끼우는' 템플릿 엔진 설계

YAML 한 장을 읽어 동적으로 Pydantic 스키마와 프롬프트를 만들어 내는 template_engine/은 좋은 설정 기반 설계(config-driven) 교본이다. "코드를 고치지 않고 동작을 바꾸는" 구조를, 파서가 어떻게 식별자·출력·가이드라인을 분리해 다루는지로 배운다.

실습 아이디어: 기존 프리셋 YAML 하나를 복사해 내 도메인(예: 게임 캐릭터 관계)용으로 고쳐 보고, yaml-validator 스킬로 검증한다.

학습 포인트 ⑤

다중 LLM 공급자 추상화 + 완전 로컬 추론

OpenAI·Bailian(알리바바)·vLLM을 provider:model@url 한 형식으로 통일한 client.py공급자 교체를 깔끔히 추상화한 예다. 특히 vLLM 로컬 엔드포인트의 까다로운 임베딩 입력을 우회하는 CompatibleEmbeddings처럼, 실전에서 부딪히는 호환성 문제를 어떻게 감싸는지 배운다.

실습 아이디어: OpenAI로 한 번, 로컬 Ollama/vLLM로 한 번 같은 문서를 추출해 결과·속도·비용을 비교한다.

7시스템 요구사항

무엇이 있어야 돌릴 수 있나 — 도구 자체엔 GPU가 필요 없다.

좋은 소식 — Hyper-Extract 자체는 가벼운 순수 파이썬이다. faiss-cpu를 쓰고 무거운 연산(LLM·임베딩)은 외부 API/서버에 맡기므로, 도구를 돌리는 데 GPU가 필요 없다. GPU는 모델을 직접 자체 호스팅(vLLM)할 때만 필요하다.

항목요구사항 / 비고
Python3.11 이상(CI는 3.11·3.12 테스트). 설치는 uv tool install hyperextract 또는 pip.
LLM 엔드포인트구조화 출력(JSON 스키마/함수호출)을 지원하는 OpenAI 호환 채팅 모델. 기본값 gpt-4o-mini.
임베딩 엔드포인트색인·검색·챗에 필요. 기본값 text-embedding-3-small. 없으면 search/talk가 동작하지 않음.
API 키 / 설정he config init -k 키~/.he/config.toml에 저장, 또는 OPENAI_API_KEY·OPENAI_BASE_URL 환경변수.
GPU도구엔 불필요. vLLM으로 Qwen3.5-9B 등을 로컬 구동할 때만 GPU 필요.
입력 형식.txt/.md 파일, 그 디렉토리, 또는 stdin(-). (README의 PDF 예시는 마크다운 우선 워크플로 기준.)
실무 팁
"클라우드로 감 잡고, 민감 문서는 로컬로"

처음엔 gpt-4o-mini로 빠르게 결과를 보고 추출 품질을 가늠하라 — 가장 저렴하고 빠르다. 이후 의료·법률처럼 밖으로 나가면 안 되는 데이터는 vLLM 프리셋(provider:model@url)으로 갈아끼우면 같은 명령·같은 템플릿으로 완전 오프라인 처리가 된다.

8직접 해볼 수 있는 실습 과제

난이도별로 — 30초 퀵스타트부터 내 도메인 템플릿 제작까지.

먼저 설치와 30초 퀵스타트. 이게 전체 사용 흐름의 축소판이다.

# 설치 + API 키 등록
uv tool install hyperextract
he config init -k YOUR_OPENAI_API_KEY

# ① 추출: 테슬라 전기를 '인물 전기 그래프' 템플릿으로 → ./output/
he parse examples/en/tesla.md -t general/biography_graph -o ./output/ -l en

# ② 질문: 만들어진 지식 추상에 자연어로 검색
he search ./output/ "What are Tesla's major achievements?"

# ③ 확인: 그래프를 시각화해서 보기
he show ./output/
실습 1

퀵스타트 그대로 따라 하기난이도 ★☆☆ 입문

위 4줄을 그대로 실행해 ./output/ 폴더가 생기는 걸 확인한다. 안의 data.json·metadata.json·index/를 열어 "추출 결과가 실제로 어떤 JSON으로 저장되는지"를 눈으로 본다. he info ./output/로 노드·엣지 개수도 확인.

실습 2

증분 진화 — 문서를 더 먹여 그래프 키우기난이도 ★☆☆ 입문

he feed ./output/ 새문서.md로 같은 KA에 문서를 추가한다. 노드·엣지 수가 늘되 중복 인물은 합쳐지는지 관찰한다. "한 번 만들고 끝"이 아니라 계속 자라는 지식 베이스라는 개념을 체감하는 과제.

실습 3

그래프 vs 하이퍼그래프 비교난이도 ★★☆ 중급

공저 관계나 팀 구성이 담긴 문단을, -m으로 그래프 계열 엔진(graph_rag)과 하이퍼그래프 계열(hyper_rag)에 각각 넣어 본다. he show로 두 결과를 시각 비교하며 "여럿이 한 덩어리인 관계"가 어떻게 다르게 표현되는지 확인한다.

실습 4

나만의 YAML 템플릿 만들기난이도 ★★☆ 중급

templates/presets/의 프리셋 하나를 복사해 내 도메인용으로 고친다(예: 게임 세계관의 인물·세력 관계). 노드/엣지 스키마와 가이드라인을 바꾸고, 동봉된 yaml-validator 스킬로 검증한 뒤 he parse -t 내템플릿으로 돌려 본다.

# 아주 단순화한 템플릿 골격(개념용)
type: graph
language: ko
node_schema:
  name: { type: str, desc: "엔티티 이름" }
  role: { type: str, desc: "세력/직책" }
edge_schema:
  source: ...
  target: ...
  relation: { type: str, desc: "동맹/적대 등" }
실습 5

완전 로컬(vLLM/Ollama)로 오프라인 추출난이도 ★★★ 고급

로컬 OpenAI 호환 서버(vLLM 또는 Ollama)를 띄우고 he config llm으로 vllm:모델@http://localhost:8000/v1을 등록한다. 임베딩도 로컬(bge-m3 등)으로 맞춘 뒤, 인터넷 없이 같은 추출이 되는지 확인한다. 클라우드 대비 속도·품질·비용을 표로 비교하면 좋은 학습이 된다.

9관련 기술 심화 학습 로드맵

이 레포를 발판으로 'LLM 지식추출 + GraphRAG'까지 — 6주 계획.

주차주제학습 자료 / 할 일
1주차LLM 구조화 출력LangChain with_structured_output + Pydantic 기초. 기사에서 엔티티 추출 실습.
2주차지식 그래프 기본노드/엣지 모델링, KG-Gen·iText2KG 개념. AutoGraph 예제 정독.
3주차하이퍼그래프하이퍼엣지 표현·순서 무관 dedup·가지치기. types/hypergraph.py 코드 리딩.
4주차벡터 검색 & GraphRAG임베딩·FAISS·top_k. Microsoft GraphRAG/LightRAG 논문 + he search/talk 분석.
5주차설정 기반 설계YAML→스키마 변환(template_engine) 읽기. 내 도메인 템플릿 제작·검증.
6주차로컬 LLM & 운영vLLM/Ollama 서빙, 공급자 추상화, 비용-품질 비교 실험. 시공간 그래프까지 확장.

10핵심 키워드 사전

문서·코드에 자주 나오는 용어 — 한 줄 정의.

용어의미
Knowledge Abstract (KA)추출 결과 한 덩어리. data.json·metadata.json·index/를 담은 폴더.
Auto-Type8종 강타입 자료 구조(Model/List/Set/Graph/Hypergraph/Temporal/Spatial/SpatioTemporal).
Method (엔진)미리 만든 추출 알고리즘. graph_rag·light_rag·hyper_rag·kg_gen·atom 등 9종.
Template (템플릿)코드 없이 추출을 정의하는 도메인별 YAML 프리셋(finance/legal/tcm 등).
Structured OutputLLM이 정해진 JSON 스키마에 맞춰 답하도록 강제하는 기능. 이 도구의 필수 요건.
Hyperedge점 2개가 아니라 여럿을 한 번에 묶는 선. 다대다 관계 표현.
Spatio-Temporal Graph관계에 시간·장소가 붙은 그래프. 복합 키로 시점·장소별로 구분.
GraphRAG지식 그래프를 활용한 검색 증강 생성(RAG). 단순 청크 검색보다 추론에 강함.
Embedding / FAISS문장을 의미 벡터로, FAISS는 가까운 벡터를 빠르게 찾는 검색 엔진.
Incremental Evolution문서를 계속 먹여(he feed) 지식 베이스를 중복 병합하며 키우기.
OMem (ontomem)저자 제작 객체 메모리 저장소 + 병합 전략. 모든 자료형의 저장·dedup 엔진.
OntoSight저자 제작 시각화 라이브러리. he show의 그래프/하이퍼그래프 그리기.
vLLM고성능 로컬 LLM 서빙 엔진. 완전 오프라인 추출에 사용(provider:model@url).
Two-stage extraction1단계 노드 먼저, 2단계에서 그 노드를 단서로 엣지 추출 — 환각 줄이기.

11참고 링크

원문으로 더 깊이 — 공식 소스 위주.