LangChain의 기능을 “카탈로그(기능별 독립 데모)” 형태로 최대한 촘촘하게 정리한 학습 레포입니다.
각 데모는 단독 실행 가능하며, 동일한 LLM Factory를 통해 Ollama / OpenAI-호환 / OpenAI를 스위칭할 수 있습니다.
- ✅ Docker 한 번으로 실행
- ✅ LCEL(Runnable) 중심 (LangChain의 “조합 언어”)
- ✅ Prompts / Output Parsers / Structured Output / Streaming
- ✅ Tools / Tool calling / Agents (ReAct 등)
- ✅ Retrievers / VectorStores / Loaders / RAG 고급 패턴
- ✅ Memory / History / Summarization / Windowing
- ✅ Router / Multi-prompt / JSON mode / Guardrails (실습 관점)
- ✅ SQL / CSV / Web 요청(안전한 범위) 유틸
- ✅ Callbacks / Tracing (옵션 LangSmith)
- ✅ Eval (미니) + 회귀 테스트 샘플
⚠️ 일부 기능은 모델 백엔드(예: Ollama vs OpenAI-호환)에 따라 “지원 방식/결과”가 다릅니다.
각 데모 파일 상단에 호환성 노트를 적어두었습니다.
cp .env.example .env
docker compose up --builddocker compose down -v
docker compose build --no-cache
docker compose up
개별 데모 실행:
docker compose run --rm lab python catalog/prompts/01_prompt_templates.py
docker compose run --rm lab python catalog/lcel/03_parallel_and_assign.py
docker compose run --rm lab python catalog/tools/02_tool_calling_bind_tools.py
docker compose run --rm lab python catalog/rag/04_multiquery_compression.py또는 make demo:
make demo D=catalog/agents/02_react_agent.pyLLM_PROVIDER=auto
OLLAMA_BASE_URL=http://host.docker.internal:11434
OLLAMA_MODEL=llama3.1:8b
OLLAMA_EMBED_MODEL=nomic-embed-textLLM_PROVIDER=openai_compatible
OPENAI_COMPAT_BASE_URL=http://host.docker.internal:1234/v1
OPENAI_COMPAT_API_KEY=lm-studio
OPENAI_COMPAT_MODEL=gpt-4o-miniLLM_PROVIDER=openai
OPENAI_API_KEY=YOUR_KEY
OPENAI_MODEL=gpt-4o-minicatalog/prompts/*: PromptTemplate / ChatPromptTemplate / Few-shot / Partial / Messagescatalog/lcel/*: RunnableLambda / Passthrough / Parallel / Assign / Retry / Fallback / Batch / Streamcatalog/output/*: StrOutputParser / JsonOutputParser / PydanticOutputParser / FixingParsercatalog/structured/*: with_structured_output (Pydantic) / list schema / strict jsoncatalog/memory/*: File history / window memory / summarization memorycatalog/tools/*: @tool / bind_tools / tool schemas / tool-result patternscatalog/agents/*: ReAct agent / tool agent / 안전한 설계 팁catalog/rag/*: loaders / splitters / vectorstores / retrievers / RAG patternscatalog/routers/*: route classification / multi-prompt routing / conditional chainscatalog/sql/*: create_sql_query_chain / SQLite example / 결과 요약catalog/callbacks/*: callback handler / timing / logging / tracing flagscatalog/eval/*: mini judge / regression set runnerdata/docs/*: RAG 데모용 문서 위치storage/*: 벡터DB / chat history / 샘플 DB
- prompts → 2) lcel → 3) output/structured → 4) tools → 5) agents → 6) rag → 7) routers → 8) memory → 9) sql → 10) callbacks/eval
catalog/langgraph/01_minimal_graph.pycatalog/langgraph/02_agentic_loop_graph.pycatalog/langgraph/03_guarded_graph.py
참고: LangGraph 카탈로그는 실행 시 mermaid 그래프를 콘솔에 출력하고,
.mmd파일을/app/storage/langgraph/아래에 저장합니다.
catalog/rag/05_vectorstore_compare_notes.mdcatalog/rag/06_retriever_mmr.pycatalog/rag/07_self_query_retriever_note.md(백엔드/메타데이터 설계에 따라 적용)
catalog/guardrails/01_schema_guard.pycatalog/guardrails/02_context_only_rag_guard.pycatalog/guardrails/03_policy_checks.py
catalog/perf/01_llm_cache_sqlite.pycatalog/tools/03_tool_result_patterns.py
주의: 일부 데모는 설치/환경에 따라 선택적으로 동작하도록 설계되어 있습니다(설명 포함).
catalog/rag/08_vectorstore_faiss.pycatalog/rag/09_retriever_bm25.pycatalog/rag/10_ensemble_retriever.pycatalog/rag/11_self_query_retriever.py
catalog/langgraph/04_checkpoint_sqlite.pycatalog/langgraph/05_subgraph_pattern.pycatalog/langgraph/06_multi_role_agents.py
catalog/guardrails/04_citation_required_guard.py
catalog/perf/02_batch_vs_single.py
catalog/agents/03_safe_tool_router.py
catalog/tools/04_tool_result_validator.py
catalog/langgraph/07_hitl_approval.py.env에서AUTO_APPROVE,APPROVE_TOKEN로 승인 흐름 실습
data/eval/golden.jsonlcatalog/eval/03_rag_regression.py→/app/storage/eval_rag_report.json저장
catalog/eval/04_llm_judge_grounding.py→/app/storage/eval_llm_judge_report.json
catalog/eval/05_eval_suite_runner.py→/app/storage/eval_suite_report.json
catalog/guardrails/05_policy_classifier_llm.py
catalog/langgraph/08_hitl_cli_pause.py- TTY 실행 예:
docker compose run --rm -it lab python catalog/langgraph/08_hitl_cli_pause.py
- TTY 실행 예:
이 레포는 카탈로그 데모뿐 아니라, 예술경영전문가 AI를 위한 엔드투엔드 템플릿 앱도 포함합니다.
cp .env.example .env
docker compose up --build api- 웹 UI:
http://localhost:8000/ - Swagger:
http://localhost:8000/docs
자세한 설명: docs/E2E_APP.md
docker compose run --rm lab python -m app.cli "관객개발 KPI 3개 제안" --mode rag
docker compose run --rm lab python -m app.cli "예산 3천만원 2주 실행계획" --mode planFastAPI에 /tools/* 엔드포인트가 추가되었습니다.
POST /tools/budget-splitPOST /tools/timelinePOST /tools/sponsorship-packagePOST /tools/report
문서: docs/TOOLS_API.md
cp .env.example .env
docker compose up --build apicp .env.example .env
docker compose up --build api- 웹 UI:
http://localhost:8000/ - Swagger:
http://localhost:8000/docs
POST /docs/upload(pdf/md/txt)
POST /rag/self-query
POST /artbiz/proposal
docker compose run --rm lab python catalog/eval/05_eval_suite_runner.py자세한 설명: docs/V8_FEATURES.md
- 업로드 메타데이터 추출:
POST /docs/upload - Self-Query 파싱/필터 확인:
POST /rag/self-query - 후원 제안서 생성(+승인):
POST /artbiz/proposal
문서: docs/V9_FEATURES.md
POST /ops/queue-reindex(mode: full|incremental)- 워커:
catalog/ops/01_index_worker.py
/artbiz/proposal에save=true옵션- 목록:
GET /artbiz/proposals
문서: docs/V10_FEATURES.md
- PDF: Markdown 스타일 렌더링(헤딩/리스트/테이블)
- Proposal 버전 메타: tags/template_version/status/approved_by/approved_at
- 승인 시 버전 승인 기록 반영
문서: docs/V11_FEATURES.md
- PDF: 커버/목차/헤더·푸터/표 스타일 고정
- 한글 폰트:
assets/fonts/*.ttf또는.env(ARTBIZ_FONT_*)로 제공 시 자동 등록
문서: docs/V12_FEATURES.md
- 템플릿:
GET /artbiz/proposal/template - 구조 체크:
POST /artbiz/proposal/check - proposal 생성 기본값:
normalize=true(10개 섹션/필수 표/근거 섹션 고정) - Eval:
catalog/eval/08_structure_compliance.py
문서: docs/V13_FEATURES.md
- 기본 모드:
rewrite_mode=llm_sections - 표/숫자: TOOL_DATA로 코드가 생성(추측 방지)
- 응답:
consistency_report포함
문서: docs/V14_FEATURES.md
- 섹션별
SOURCE 1/2마커 보정(footnote-like) - 응답:
citation_enforce_report,citation_placement_report - Eval:
catalog/eval/10_citation_placement.py
문서: docs/V15_FEATURES.md
- 본문: SOURCE 1/2 → [1]/[2]로 통일
- 부록: [1]/[2]에 실제 스니펫 매핑 자동 삽입
- Eval:
catalog/eval/11_footnote_mapping.py
문서: docs/V16_FEATURES.md
