Langchain 21

Faiss 모듈 내 코드 분석1

배경faiss 모듈 내 코드를 분석해서, 여러 용도로 응용하고자함.코드from __future__ import annotations # 미래 버전의 타입 힌트를 사용할 수 있게 함import loggingimport operatorimport osimport pickleimport uuidimport warningsfrom pathlib import Pathfrom typing import ( Any, Callable, Dict, Iterable, List, Optional, Sized, Tuple, Union,)import numpy as npfrom langchain_core.documents import Documentfrom langchain_co..

langchain 공부 2024.11.11

Document, BaseMedia 내부 분석

이 두 클래스는 상속 관계에 있으며, 데이터와 메타데이터를 관리하기 위한 계층 구조를 형성합니다. BaseMedia는 미디어 데이터에 대한 기본 구조와 속성을 정의하는 추상적인 베이스 클래스 역할을 하고, Document는 이를 확장하여 텍스트 문서 데이터와 관련된 구체적인 기능과 속성을 추가하는 역할을 합니다.1. BaseMedia 클래스의 역할BaseMedia는 미디어 데이터의 기본 구조를 정의하는 추상적이고 상위 개념의 클래스로, 다른 미디어 데이터 관련 클래스들이 상속받을 수 있도록 설계된 베이스 클래스입니다. 여기에는 데이터나 파일의 메타데이터와 ID와 같은 공통된 속성을 정의하고, 그 데이터를 구조화하거나 검색하는 데 필요한 기능을 제공합니다.BaseMedia의 주요 특징:ID: 각 미디어 데..

langchain 공부 2024.11.09

InMemoryDocstore 내부 코드 분석

배경langchain 에 쓰이는 도구들을 깊게 이해하고 사용하기 위해 도구들을 하나씩 분석코드분석add 메서드: {"doc1": doc1, "doc2": doc2} 형태의 딕셔너리를 사용해 새 문서를 추가합니다. 중복된 ID가 없으면 성공적으로 추가되며, 중복된 ID가 있으면 오류를 발생delete 메서드: 지정된 ID의 문서를 삭제합니다. 존재하지 않는 ID를 삭제하려고 시도하면 오류가 발생search 메서드: doc2라는 ID로 문서를 검색합니다. 문서가 존재하면 해당 문서 객체가 반환되고, 존재하지 않으면 "ID not found" 메시지를 반환"""Simple in memory docstore in the form of a dict."""from typing import Dict, List, Op..

langchain 공부 2024.11.07

langchain 주요 컴포넌트 설명

주요 컴포넌트tokenizerEmbedding LayerTransformer Decoder LayersOutput Layer컴포넌트 설명TokenizerTokenizer는 자연어 처리(NLP) 시스템에서 입력 텍스트를 처리하는 첫 번째 단계에서 활용되는 도구입니다. 이 과정에서 텍스트를 토큰(Token)이라는 최소 단위로 분할합니다. 자주 함께 쓰이는 문자 쌍을 병합해 서브 워드를 생성 합니다. 토큰은 단어, 부분 단어, 혹은 심지어 개별 문자일 수도 있습니다. 모델이 텍스트를 이해하고 처리하기 위해서는 먼저 이처럼 텍스트를 작은 단위로 나누는 과정이 필요합니다.token : 텍스트를 분할하는 최소 단위BPE (Byte Pair Encoding) Tokenizer의 동작 과정BPE 토크나이저는 텍스트 데..

langchain 공부 2024.09.02

RunnablePassthrough() 사용 이유

배경테디노트님의 강의를 보면서 카피하면서 RAG를 만들다가, 그냥 바로 질문 변수를 전달해도 될것 같은데, 사용하는지, 사용 이유가 궁금해 졌다. RunnablePassthrough: 전체 개요 및 정리RunnablePassthrough는 LangChain에서 사용하는 Runnable의 일종으로, 입력 데이터를 수정하지 않고 그대로 다음 단계로 전달하는 데 사용됩니다. 주로 체인에서 데이터 흐름을 제어할 때 유용하며, 특히 질문이나 다른 입력이 동적으로 변경될 가능성이 있는 경우에 많이 사용됩니다.기본 개념:핵심 역할: RunnablePassthrough의 핵심 역할은 입력된 데이터를 그대로 받아, 처리 없이 다음 단계로 전달하는 것입니다. 이는 체인 내에서 특정 데이터 흐름을 유지하고, 필요한 경우 그..

langchain 공부 2024.08.29

모든 Retriever(검색기) 비교

Retriever(검색기) 비교Retriever 기법장점단점사용 시기Similarity Search- 간단하고 빠른 검색 가능- 높은 유사성의 문서를 효과적으로 찾음- 정밀한 검색이 어려울 수 있음- 다중 의미를 가진 쿼리에 약함- 쿼리와 관련된 문서를 빠르게 찾고자 할 때- 단순한 유사성 기반의 검색이 필요한 경우Maximum Marginal Relevance (MMR)- 정보 다양성을 높여 중복 문서 필터링 가능- 다양한 답변을 제공할 수 있음- 계산 비용이 더 많이 듦- 검색 속도가 느려질 수 있음- 중복되지 않는 다양한 정보를 원할 때- 여러 관점을 가진 문서를 선택하고자 할 때Similarity Score Threshold- 일정 수준 이상의 유사성만 필터링- 특정 임계값 이상의 관련성 있는 문..

langchain 공부 2024.08.29

langchain 퓨샷 프롬프트(prompt)

퓨샷 프롬프트(FewShotPromptTemplate)모델이 수행해야 하는 작업이 복잡하거나 구조화된 경우, 몇 가지 예제를 제공함으로써 모델이 그 패턴을 학습하고 더 정확하게 응답할 수 있도록 도움을 줌일반적인 NLP 태스크(번역, 텍스트 생성 등)에서 Few-Shot Learning을 적용하기 위해 사용# 결과를 실시간 스트리밍 출력 하는법, langchain_teddynote 모듈 설치from langchain_teddynote.messages import stream_response# 질의내용question = "문재인에 대해 알려줘"# 질의answer = llm.stream(question)stream_response(answer)문재인은 2017년부터 2022년까지 대한민국의 제19대 대통령을..

langchain 공부 2024.08.04

langchain LCEL 인터페이스

LCEL 사용예from langchain_openai import ChatOpenAIfrom langchain_core.prompts import PromptTemplatefrom langchain_core.output_parsers import StrOutputParser# ChatOpenAI 모델을 인스턴스화합니다.model = ChatOpenAI()# 주어진 토픽에 대한 농담을 요청하는 프롬프트 템플릿을 생성합니다.prompt = PromptTemplate.from_template("{topic} 에 대하여 3문장으로 설명해줘.")# 프롬프트와 모델을 연결하여 대화 체인을 생성합니다.chain = prompt | model | StrOutputParser()LCEL 종류 및 기능동기 메소드(마지막에..

langchain 공부 2024.08.02

langchain에서 Parser의 역할

선행지식토큰화 : 텍스트를 의미 있는 단위(토큰)로 나누는 과정입니다. 이 단위는 단어, 문장, 문단, 심지어 더 작은 단위일 수도 있습니다. 토큰화는 NLP의 첫 번째 단계로, 원시 텍스트 데이터를 처리 가능한 형태로 변환파싱 : 토큰화된 텍스트를 구조화된 형식으로 변환하는 과정. 이 과정은 구문 분석(Syntax Parsing), 의미 분석(Semantic Parsing), 그리고 구문 트리(Syntax Tree)나 추상 구문 트리(Abstract Syntax Tree, AST)를 생성Parser의 종류와 기능1. StrOutputParser()입력된 텍스트를 변경 없이 그대로 반환합니다. 이는 가장 기본적인 파싱 작업이며, 주로 기본 클래스나 간단한 테스트 목적으로 사용변환전AIMessage(co..

langchain 공부 2024.07.31