LangChain
- Chain vs. Agent
- chain: 사전에 정의한 순서대로 동작한다.
- agent: LLM 이 추론 엔진이 되어 어떤 tool 을 어떤 순서로 사용할 지 스스로 결정한다.
- LCEL
- | 으로 chain 을 구성하는 language
- Langgraph 의 각 node 가 하나의 LCEL 체인 or Runnable 함수이다.
- Prompt Template
- few-shot 예제 관리, prompt 버전 관리 용도로 쓸수 있다.
- Rag 에서 chunking 의 중요성
- document 를 쪼개는 방식 (character, token, semantic) 에 따라 retrieval 품질이 달라진다. (RAG 는 검색기가 가장 중요)
- mmr 이란?
- 단순히 query 와 관련된 데이터 뿐 아니라, 유사도와 문서 간의 차이 (다양성) 도 결과에 포함한다.
- memory 전략?
- Buffer (all)
- BufferWindow (최근 K 개)
- Summary (LLM 으로 이전 대화 요약)
- Long context 를 요약할 때 사용하는 사전 정의된 chain type
- stuff (전부 LLM 에 넣어서 요약)
- map-reduce (부분을 병렬로 요약 후 합쳐서 다시 요약)
- map-refine (첫 청크를 요약하고, 그 결과를 다음 청크와 합쳐서 요약)
- Langsmith
- chain 의 어느 단계에서 오래 걸렸는지, 중간 prompt 가 어떻게 구성 되었는지
- Hallucination 을 줄이기 위해
- grounding, RAG 를 통한 사실 기반 context 제공
- 평가 프레임워크
- RAGAS -> RAG 의 품질을 점수화하는 프레임워크
- LangSmith -> 개발, 테스트, 모니터링, 트레이싱
- LangFuse -> 운영, 모니터링, 분석, 트레이싱
- Structured Output 코드
- model 자체 라이브러리에서 지원할 수 있다. (ex. google genai 라이브러리)
- LangChain 을 쓰면 pydantic structured output 을 쓸 수 있다.
RAG
- semantic cache 와 RAG 의 차이점?
- 다른 개념으로도 볼 수 있는데, 연관성이 높다.
- 검색을 해서 결과를 바로 반환하면 semantic cache, LLM 에 한번 더 질의하면 RAG 로 볼 수 있다.
- 시스템에서 비용 최적화를 할 수 있는 중요한 지점이다.
Vector DB
Vector DB (Pinecone, Qdrant, Milvus 등) 에서는 벡터를 어레이 형태로 저장하고, 그 위에 벡터 인덱스를 생성한다.
- ANN 기반의 벡터 인덱스 알고리즘이 벡터 DB 의 핵심 컨셉이다.
- 그냥 어레이로만 저장하는 경우, 벡터 검색을 하면 brute force O(N) 으로 매칭해야 한다.
ANN 알고리즘: 모든 벡터와 거리를 계산하지 않고, 일부와만 계산해서 approximate 하게 원하는 결과를 찾는다.
- IVF: 벡터를 k-means 클러스터로 나누고, 요청과 가장 가까운 몇개의 cluster 만 탐색한다.
- HNSW: 그래프 구조로 가까운 벡터들을 위치하고 검색한다.
Case Study
BigQuery
추신
- 정말 재미있는 분야다. 사용하는 기술을 들여다보면 학교에서 배운 머신러닝 이론들이 나온다.