목록Tech (27)
포도가게의 개발일지
데이터 클래스단지 필드를 모아 놓으 간단한 클래스3가지 방법 namedtuple, typing.NamedTuple, @dataclass클래스 빌더단순한 class는 보일러플레이트, print를 위한 repr구현, 잘못된 비교때문에 eq구현이 귀찮다.collections.namedtuplenamedtuple은 이러한 문제를 해결하기 위한 가장 고전적인 방법입니다. 이것은 클래스가 아니라, 클래스를 만들어주는 팩토리 함수입니다.init, repr, eq 메서드가 자동으로 생성되어 위에서 제기된 모든 문제가 해결됩니다.tuple의 서브클래스이므로, 메모리 효율이 좋고 불변(immutable) 객체를 만들 수 있습니다.속성 이름(moscow.lat)과 인덱스(moscow[0])로 모두 접근 가능합니다.각 속성이..
str vs bytesstr은 사람이 읽고 이해하는 텍스트 단위, python3에서 str은 유니코드 문자의 나열bytes는 컴퓨터가 데이터를 실제로 저장하는 0~255 사이의 숫자 단위입니다.인코딩 디코딩컴퓨터는 문자를 직접 저장할 수 없으므로 문자를 바이트로 변환하는 과정이 필요인코딩: str -> bytes로 변환하는 과정디코딩: bytes -> str로 변환하는 과정인코딩 방식으로 utf-16, utf-8 규칙(알고리즘)들이 있습니다. utf-8이 가장 널리 쓰임, 알고리즘에 따라 같은 문자라도 다르게 인코딩 될 수 있습니다.bytes, bytearray?bytes와 bytearray 역시 설명한 시퀀스의 모든 특징을 그대로 가지고 있습니다.bytes변경할수없는 바이트 시퀀스bytearray변경할..
```python dict 뒤에는 hash table engine이 존재한다.```- dict, set의 기반 코드는 여전히 hash table에 의존하지만, dict는 메모리 절약과 키 삽입 순서의 보존이라는 두가지 측면에서 최적화된다.(https://www.fluentpython.com/extra/internals-of-sets-and-dicts/)### 성능- 내부적으로 해시 테이블을 사용하여, 검색 시 전체를 스캔할 필요 없이 원하는 요소에 바로 접근할 수 있기 때문입니다. 반면, list는 항목을 찾기 위해 전체를 순차적으로 검색해야 하므로 항목 수가 많아질수록 성능이 크게 저하됩니다.\### Hashes and Equality\- 해시 테이블을 사용하려면 객체가 '해시 가능(hashable)'..
## 시퀀스 배열 ### 컨테이너 시퀀스- 서로 다른 자료형의 항목을 담을 수 있는 list, tuple, collections.deque 형- 객체에 대한 참조를 담으며 ### 균일 시퀀스- 단 하나의 자료형만 담을 수 있는, str, bytes, array.array 형- 자싱늬 메모리 공간에 값을 직접 담는다. ```메모리에 올라가는 모든 파이썬 객체에는 메타데이터를 담은 헤더가 있다.ob_refcnt: 객체 참조수ob_type: 객체의 자료형에 대한 포인터ob_fval: C 언어의 double 형 실수값파이썬 64bit에서 각 필드는 8bite를 차지한다.``` ### 가변시퀀스- list, bytearray, array, deque ### 불변 시퀀스- tuple, str, bytes ## 제너..

스페셜 메서드언제나 이중 언더바로 시작하고 끝난다.obj[key]를 구현하기 위해서는 getitem()을 구현한다.python interpreter가 getitem(key)를 내부에서 호출하기 때문이다.대표적으로 구현해야할것들컬렉션속성 접근반복자연산자 오버로딩함수와 함수 및 메서드 호출문자열 표현 및 포멧await를 이용한 비동기 프로그래밍객체 생성 및 제거with, async with문을 이용한 관리대상 context스페셜 메서드의 용도사용자가 아니라 인터프리터가 호출하는 메서드라는 점에 유의해야한다.스페셜 메서드를 직접호출 하고 싶다면 len(), iter(), str() 등 연관된 내장 함수를 호출하는 편이 좋다.내장 함수는 스페셜 메서드 호출뿐만 아니라, 별도의 추가 기능을 제공할 때도 있다.내장..
n-gram과 Tokenization 완벽 정리 (feat. 스팸/봇 탐지)웹 보안, 검색엔진, 자연어 처리(NLP), 자동화 탐지 등 다양한 분야에서 자주 등장하는 개념이 바로 n-gram과 Tokenization(토크나이제이션)입니다.이 글에서는 두 개념의 정의와 차이점, 실제 활용법을 간단하고 명확하게 정리해보겠습니다.✅ Tokenization이란?Tokenization(토크나이제이션)은 문자열을 작은 분석 단위(토큰)로 나누는 작업입니다.검색, AI 모델 입력, 유사도 분석 등 거의 모든 텍스트 처리의 첫 단계라고 할 수 있어요.🔸 왜 Tokenization을 할까?컴퓨터는 자연어 문장을 그냥 하나의 문자열로 인식합니다.하지만 사람이 의미를 파악하듯이 컴퓨터도 문장을 이해하려면, 문장을 의미 있..

LLM Tracing- LLM 호출 및 애플리케이션 로직의 다른 부분에 대한 가시성 확보.- LLM을 chaining한것에 동작을 자세히 살펴볼 수 있어서 좋았던 것 같다. 또한 playground를 통해서 prompt를 빠르게 수정해보며 output이 어떻게 나오는지 빠르게 확인해볼 수 있어서 좋았다.Evaluate- 모델, 프롬프트 및 아키텍처 간의 결과를 비교하여 최적의 방식을 식별.- prompt 개선과 모니터링을 빠르게 하게되면서 evaluate이란 기능에도 관심이 많이 생겼습니다.데이터셋 생성성능측정 지표 정의프롬프트 평가 실행결과 수동 비교결과 추적ci/cd 통합.Schema최소한 애플리케이션의 입력값을 포함해야합니다.기대 출력값도 정의하는것이 좋음. 예상되는 출력값평가는 반복적인 과정이므..
Sequential AgentsLangGraph 위에 구축된 flowise의 sequential agents는 work flow를 DCG로 구조화하여 대화형 에이전트 시스템을 개발을 용이하게 합닏. 이를 통해 제어된 loop와 반복적이 프로세스를 구현할 수 있습니다.이 그래프는 서로 연결된 노드들로 구성되며, 정보와 작업의 순차적 흐름을 정의합니다. 이를 통해 에이전트는 입력을 처리하고 작업을 실행하며, 구조화된 방식으로 응답을 생성할수있습니다.Understanding Sequential Agents' DCG ArchitectureNode-based processing: 그래프의 각 노드는 언어 처리, 도구 실행, 또는 조건부 로직과 같은 고유한 기능을 캡슐화하는 독립적인 처리 단위입니다.Data fl..