티스토리챌린지 21

(이해를 돕는) Langchain 컴포넌트 코드 분석 총 모음

내용 : langchain의 여러 컴포넌트 코드를 분석해, 원리를 파악하는데 도움을 준다. InMemoryDocstore : https://makenow90.tistory.com/87Document, BaseMedia : https://makenow90.tistory.com/91Faiss : https://makenow90.tistory.com/93, https://makenow90.tistory.com/95 Faiss 모듈 내 코드 분석2배경faiss 모듈 내 코드를 분석해서, 여러 용도로 응용하고자함.코드 async def asimilarity_search_with_score_by_vector( self, embedding: List[float], k: int = 4, filter: Optional[..

langchain 공부 2024.11.27

langchain에서 콜백매니저(callbackManager)의 역할

CallbackManager는 LangChain 라이브러리에서 작업 실행 상태를 관리하고, 실행 중 발생하는 이벤트를 콜백 핸들러에 전달하는 중추적인 역할을 수행합니다. 이 도구는 LangChain 워크플로우를 모니터링하고 디버깅하거나 사용자 정의 동작(예: 로그 기록, 메트릭 수집)을 추가하는 데 사용됩니다.CallbackManager의 주요 역할1. 작업 실행 상태 관리CallbackManager는 LangChain 작업의 시작, 진행, 완료, 오류 발생 상태를 추적합니다.이를 통해 실행 상태를 기록하거나 실행 흐름을 제어할 수 있습니다.2. 콜백 핸들러 관리여러 콜백 핸들러를 등록하여, 특정 이벤트가 발생할 때 핸들러가 실행되도록 관리합니다.콜백 핸들러는 사용자 정의 동작(예: 로그 기록, 스트리밍..

langchain 공부 2024.11.26

PromptTemplate 내부코드 분석

배경PromptTemplate의 내부 코드를 분석해 원리를 알아본다.코드from __future__ import annotationsimport warningsfrom pathlib import Pathfrom typing import Any, Dict, List, Literal, Optional, Unionfrom langchain_core.prompts.string import ( DEFAULT_FORMATTER_MAPPING, # 각 템플릿 형식에 대한 포맷터 매핑 StringPromptTemplate, # 부모 클래스 정의 check_valid_template, # 템플릿 유효성 검사 함수 get_template_variables, # 템플릿에서 변수 추출 함수 ..

langchain 공부 2024.11.24

ProcessPoolExecutor의 코드 및 동작원리

1. 전반적인 동작 방식1.1. 초기화초기화 시, 다음과 같은 중요한 속성들이 설정됩니다:max_workers: 사용할 최대 워커 프로세스 수를 결정. 기본값은 CPU 코어 수를 기반으로 설정.mp_context: 멀티프로세싱 컨텍스트(spawn, fork 등) 설정. 플랫폼 및 옵션에 따라 안전한 방식을 사용.max_tasks_per_child: 각 워커가 처리할 최대 작업 수 설정. 초과 시 프로세스는 종료되고 새로운 프로세스가 생성됨.1.2. 작업 제출 (submit)사용자로부터 작업이 제출되면 다음 과정이 진행됩니다:Future 객체 생성: 작업의 결과를 비동기적으로 관리하기 위한 객체.작업 항목 생성 및 저장: _WorkItem으로 작업 정의 후 대기 목록(_pending_work_items)에..

GIL이 뭐고, 어떻게 해결할 수 있는지

GIL(Global Interpreter Lock)을 파이썬에 도입한 이유GIL(Global Interpreter Lock)은 CPython(파이썬의 가장 널리 사용되는 구현체)에서 도입된 메커니즘으로, 여러 스레드가 동시에 실행될 때, 한 번에 하나의 스레드만 Python 바이트코드를 실행할 수 있도록 제한합니다. 이는 다중 스레드 환경에서 데이터 안정성과 성능을 유지하기 위해 고안된 것입니다.1. GIL의 도입 이유(1) 메모리 관리의 간단화CPython의 메모리 관리 구조:CPython은 참조 카운트(reference counting) 기반으로 객체의 메모리를 관리합니다.참조 카운트는 각 객체가 몇 개의 변수에서 참조되는지 기록하고, 참조 카운트가 0이 되면 메모리를 해제합니다.문제:여러 스레드가 ..

BM25 알고리즘 선택 기준 및 상세 사례

BM25 변형 알고리즘 선택 기준 및 상세 사례각 BM25 변형 알고리즘의 사용 사례를 데이터 유형, 문제 상황, 활용 목적에 따라 더 구체적으로 설명하겠습니다. 알고리즘의 특성과 실제 사용 가능성을 고려하여 더 많은 사례를 추가했습니다.1. 일반적인 검색추천 알고리즘: BM25Okapi이유: 간단하고 효율적이며, 대부분의 데이터 유형에서 기본적으로 잘 작동합니다.적합한 데이터 유형:긴 문서 중심의 데이터.검색 대상 문서 길이가 비슷한 데이터.TF와 IDF만으로 충분히 검색 품질을 확보할 수 있는 데이터.사용 사례검색 엔진Google 또는 Bing과 같은 웹 검색 엔진:사용자가 입력한 키워드와 관련된 문서를 검색.웹페이지의 제목, 본문 텍스트, 메타데이터를 대상으로 작동.사내 문서 검색:대기업의 내부 문..

langchain 공부 2024.11.21

BM25Retriever2 : BM25원리 코드로 해석하기

배경rank_bm25.py를 분석해서 진짜 bm25의 원리를 알고자함이론적 배경1. BM25 변형 알고리즘의 상세 비교 및 사용 사례(1) BM25Okapi설명:BM25의 기본 변형으로 가장 널리 사용되는 알고리즘.문서 길이와 단어 빈도를 보정하여 검색 점수를 계산.(b) 파라미터로 긴 문서와 짧은 문서 간의 점수 균형을 맞추며, (k1) 파라미터로 단어 빈도(TF)의 민감도를 조정.공식:IDF(역문서빈도) : **IDF(Inverse Document Frequency)**를 사용하여 특정 단어가 전체 문서에서 얼마나 중요한지를 측정 TF : 단어 빈도(해당 단어가 문서에서 나타난 횟수).k1 : TF의 기여도를 조정하는 파라미터로, TF에 대해 얼마나 민감하게 반응할지를 결정.b : 문서 길이 보정 파..

langchain 공부 2024.11.20

BM25Retriever1 내부 코드 분석

배경BM25Retriever의 bm25.py 의 원리를 알기 위해 내부코드를 분석하고자함진짜 bm25의 원리가 되는건 rank_bm25.py로 그건 내일 포스트 예정코드bm25.pyfrom __future__ import annotationsfrom typing import Any, Callable, Dict, Iterable, List, Optionalfrom langchain_core.callbacks import CallbackManagerForRetrieverRun from langchain_core.documents import Document from langchain_core.retrievers import BaseRetriever from pydantic import ConfigDic..

langchain 공부 2024.11.19

ChatOllama 내부 코드 분석 2

배경ChatOllama 내부 코드 분석1에 이어서 계속코드 # 동기식 채팅 스트림을 생성하는 메서드 def _create_chat_stream( self, messages: List[BaseMessage], # 모델에 보낼 메시지 리스트 stop: Optional[List[str]] = None, # 스트림을 종료할 기준이 되는 선택적 stop 토큰 리스트 **kwargs: Any, # 추가적으로 전달할 선택적 키워드 인자들 ) -> Iterator[str]: # 문자열(스트림 응답)을 반환하는 이터레이터 # payload는 모델 호출을 구조화된 방식으로 처리할 수 있도록 준비 payload = { ..

langchain 공부 2024.11.18