정확한 소스 매핑 (Source Grounding)
추출된 모든 데이터는 원본 텍스트의 정확한 위치와 연결되어 검증이 용이합니다.
비공식 커뮤니티 가이드. Gemini, OpenAI, Ollama 로컬 모델을 사용하여 모든 텍스트에서 정형 데이터를 추출하는 방법을 배웁니다.
비공식 가이드
이것은 개발자가 유지 관리하는 커뮤니티 가이드(Unofficial Guide)이며 Google 공식과 관련이 없습니다.
공식 문서는 훌륭하지만, 로컬 모델 설정이나 비용 최적화, 실제 프로덕션 배포에 대한 내용은 부족할 수 있습니다.
이 가이드는 실제 프로젝트 경험을 바탕으로 Ollama 설정, 긴 문서 처리 팁, API 비용 관리 등 실질적인 노하우를 제공합니다.
30초 안에 첫 번째 데이터 추출을 실행해보세요.
pip를 통해 설치합니다. Python 3.9 이상이 필요합니다.
pip install langextract기본적으로 Google Gemini를 사용합니다. Google AI Studio에서 키를 발급받으세요.
export LANGEXTRACT_API_KEY="your-api-key-here"간단한 텍스트에서 캐릭터 정보를 추출합니다. Few-shot Example 제공이 필요합니다.
import langextract as lx
# 추출 프롬프트 정의
prompt = "텍스트에서 등장인물과 감정을 추출하세요."
# 모델을 안내하기 위한 Few-shot Example
examples = [
lx.data.ExampleData(
text="로미오: 저기 창문을 통해 비치는 빛은 무엇인가?",
extractions=[
lx.data.Extraction(
extraction_class="캐릭터",
extraction_text="로미오",
attributes={"감정_상태": "경이로움"}
),
]
)
]
# 입력 텍스트
text = "줄리엣은 별빛을 바라보며 로미오를 그리워했다."
# 추출 실행 (기본 Gemini Flash 모델 사용)
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="gemini-2.5-flash",
)
print(result.extractions)
print(result.extractions)LangExtract의 핵심 기능입니다. 검증을 쉽게 하기 위해 인터랙티브한 HTML 보고서를 생성합니다.
# 1. JSONL로 저장
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl", output_dir=".")
# 2. 인터랙티브 HTML 생성
html_content = lx.visualize("extraction_results.jsonl")
with open("visualization.html", "w") as f:
f.write(html_content.data if hasattr(html_content, 'data') else html_content)다른 모델을 연동하는 방법은 무엇인가요?
개인 정보 보호, 비용 무료. 개발 테스트용으로 추천합니다.
ollama pull gemma2:2bollama serveimport langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="gemma2:2b", # Ollama provider 자동 선택
model_url="http://localhost:11434",
fence_output=False,
use_schema_constraints=False
)복잡한 추론 작업에 적합합니다. 의존성 설치 필요: pip install langextract[openai]
export OPENAI_API_KEY="sk-..."import os
import langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="gpt-4o", # OpenAI provider 자동 선택
api_key=os.environ.get('OPENAI_API_KEY'),
fence_output=True,
use_schema_constraints=False
)주의
OpenAI 모델은 fence_output=True와 use_schema_constraints=False가 필요합니다. LangExtract가 아직 OpenAI용 Schema 제약을 구현하지 않았기 때문입니다.
LangExtract는 DeepSeek (V3/R1), Qwen, Doubao 등 모든 OpenAI 호환 API를 지원합니다.
import langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="deepseek-chat",
api_key="your-api-key",
language_model_params={
"base_url": "https://api.deepseek.com/v1" # 제공업체 URL로 변경
},
fence_output=True,
use_schema_constraints=False
)
use_schema_constraints=False
)대규모 작업의 경우 비용 절감을 위해 배치(Batch) 모드를 활성화하는 것이 좋습니다.
result = lx.extract(
...,
language_model_params={"vertexai": True, "batch": {"enabled": True}}
)로컬 환경을 오염시키지 않고 직접 실행:
docker run --rm -e LANGEXTRACT_API_KEY="your-api-key" langextract python your_script.py컨텍스트 창(Context Window)을 초과하는 책이나 PDF를 어떻게 처리할까요? LangExtract는 청킹(Chunking) 과 병렬 처리 메커니즘을 내장하고 있습니다.
텍스트를 수동으로 분할할 필요가 없습니다. URL이나 긴 텍스트를 직접 전달하세요:
# 예제: "로미오와 줄리엣" 전체 처리
result = lx.extract(
text_or_documents="https://www.gutenberg.org/files/1513/1513-0.txt",
prompt_description=prompt,
examples=examples,
# 핵심 파라미터
extraction_passes=3, # 재현율(Recall) 향상을 위한 다중 추출
max_workers=20, # 속도 향상을 위한 병렬 워커 수
max_char_buffer=1000 # 컨텍스트 버퍼 크기
)진료 기록에서 약품명, 복용량, 빈도를 구조화된 데이터로 추출합니다. 전체 예제 보기
토큰 제한을 초과하는 긴 텍스트(PDF, 책 등)를 처리합니다. 전체 예제 보기
한국어, 일본어 등 비영어권 텍스트 처리. 전체 예제 보기
Q: LangExtract는 무료인가요? A: 라이브러리 자체는 오픈 소스(Apache 2.0)이며 무료입니다. Gemini나 OpenAI API를 사용하는 경우 API 비용이 발생합니다. 로컬 Ollama를 사용하면 완전히 무료입니다.
Q: Vector DB(Milvus)와 연동되나요? A: 네, LangExtract + Milvus 조합은 하이브리드 문서 처리에 강력합니다. 추출된 메타데이터를 Milvus에 저장하여 검색 성능을 높일 수 있습니다.
Q: 한국어도 지원하나요? A: 네, Gemini와 GPT-4는 한국어 처리 능력이 뛰어나므로 LangExtract도 문제없이 작동합니다.