Langchain 21

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

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

LongContextReorder는 어떤 원리로 Context를 재배치할까?

배경Lost in the Middle: How Language Models Use Long Contexts 논문(https://arxiv.org/abs/2307.03172)-> Context가 10장이 넘어가면 중간에 있는 데이터의 내용이 무시되는 경향이 있다.2. 그래서 양끝에 가장 관련도가 높은 문서를 배치하는지 하는게 좋은 전략이 된다.3. 실제로 내 프로젝트에 적용했을때도, 정답률이 10% 향상 되는 효과를 보였다.4. 그렇다면 어떤 원리로 양끝에 가장 관련도가 높은 문서를 배치하는지 알아보고자 한다.코드"""Reorder documents"""from typing import Any, List, Sequencefrom langchain_core.documents import BaseDocumen..

langchain 공부 2024.11.16

contextual compression Retriever 내부 코드 분석

배경contextual compression Retriever의 원리가 궁금해 내부 코드를 살펴본다.코드from typing import Any, Listfrom langchain_core.callbacks import ( AsyncCallbackManagerForRetrieverRun, # 비동기 콜백 관리자를 사용 CallbackManagerForRetrieverRun, # 동기 콜백 관리자를 사용)from langchain_core.documents import Documentfrom langchain_core.retrievers import BaseRetriever, RetrieverLikefrom pydantic import ConfigDictfrom langchain.retrie..

langchain 공부 2024.11.15

CrossEncoderReranker 내부 코드 분석

배경CrossEncoderReranker의 내부 코드를 보고 활용 방법을 찾아본다.코드from __future__ import annotationsimport operatorfrom typing import Optional, Sequencefrom langchain_core.callbacks import Callbacksfrom langchain_core.documents import BaseDocumentCompressor, Documentfrom pydantic import ConfigDictfrom langchain.retrievers.document_compressors.cross_encoder import BaseCrossEncoderclass CrossEncoderReranker(BaseDoc..

langchain 공부 2024.11.14