분류 전체보기 100

크롤링 시 HEADERS를 활용해 사람인척 하기

📌 HTTP 요청 헤더(HEADERS) 설명웹 크롤링을 할 때, 서버가 요청을 정상적인 브라우저 요청인지, 아니면 봇(자동화 프로그램)인지 구별하기 위해 여러 정보를 확인합니다.따라서, 정상적인 브라우저처럼 보이게 하려면 HEADERS 값을 적절히 설정해야 합니다.아래는 크롤링에 필요한 주요 헤더들의 역할과 필요성에 대한 상세 설명입니다.HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q..

크롤링 2025.02.12

thisown 속성: Python과 C++ 객체 메모리 관리의 이해

thisown이란?thisown은 Python과 C++ 간 객체 메모리 소유권을 관리하기 위해 사용되는 속성입니다. SWIG(Simplified Wrapper and Interface Generator)를 통해 Python과 C++를 연결할 때 생성된 객체의 소유권(즉, 메모리 관리 책임)이 Python에 있는지 C++에 있는지를 명시적으로 제어할 수 있습니다.thisown의 동작 원리Python과 C++ 메모리 관리 차이:Python: 가비지 컬렉터로 메모리를 자동 관리.C++: 수동 메모리 관리를 사용하며, 명시적으로 객체 생성 및 삭제 필요.소유권 플래그:thisown = True: Python이 객체의 소유권을 가짐.Python에서 객체가 삭제될 때 C++ 메모리도 해제됨.thisown = Fal..

Poetry에서 jupyter 가상환경 만들고, vscode에 적용하기

배경jupyter 가상환경을 vs코드에 추가하는게 뭔가 쉽지 않았다.해결한 뒤 나중에도 보기 위해 정리한다.해결과정poetry shell로 가상환경 진입가상환경 위치 찾기(project_name-py3.11) C:\Users\>poetry env info --pathC:\Users\makenow\AppData\Local\pypoetry\Cache\virtualenvs\project_name-NJYVGSWI-py3.11notebook, ipykernel 설치(project_name-py3.11) C:\Users\>poetry add notebook ipykernel패키지역할왜 필요한가?notebookJupyter 서버 실행 및 노트북 인터페이스 제공Jupyter 노트북을 실행하고, .ipynb 파일을 관리..

(이해를 돕는) 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