가수면

토큰 한도 처리 전략 본문

Python/LLM

토큰 한도 처리 전략

니비앙 2024. 7. 22. 22:17

다수의 문서 등 대량의 데이터를 프롬프트로 전달해야할 경우 토큰 처리

map reduce chain

랭체인 예시)

chain = load_summarize_chain(llm, chain_type="map_reduce")

1. 여러 문서에 대해 각각의 문서를 요약하는 요청을 병렬 처리

2. 각각의 요약 결과들을 하나로 모아서 재요약 요청

단점:

1. 요청이 많아지니 비용문제 발생

2. 정보 손실

 

refine chain

문서를 하나 하나 중첩 요약해가며 정보의 정확성을 높이는 방법

랭체인 예시) 

chain = load_summarize_chain(llm, chian_type="refine")

1. '빈 값 + 첫 문서' 요약

2. '1번 요약 + 두 번째 문서' 요약

3. '2번 요약 + 세 번째 문서' 요약

...

대화 세션 유지를 위한 히스토리 토큰 처리

Conversation Buffer Memory

대화 히스토리를 저장하는 버퍼를 만들어 매번 이전까지의 히스토리를 전달

 

Conversation Buffer Window Memory

k개의 최근 대화 히스토리만 저장

 

Conversation Token Buffer Memory

n개의 토큰 수만큼 해당하는 최근 히스토리를 저장

 

Conversation Summary Memory

매번 대화 내용을 요약

"이게 지금까지의 요약입니다."

"새로운 정보가 있으니 요약을 수정해주세요."

 

Conversation Summary Buffer Memory

버퍼 + 요약 방식

1. 최근 상호작용 버퍼를 유지

2. 버퍼 제한에 도달하면 이전 상호작용을 요약 + 새로운 버퍼

 

Entity Memory

특정 엔티티에 대한 정보를 기억하는 메모리 (키, 값의 객체 형태)

LLM이 엔티티에 대한 요약과 그 엔티티에 대한 새로운 내용을 요약

엔티티 중 하나늘 참조해야할 때마다 해당 엔티티를 딕셔너리 키로 탐색해 활용

 

VectorStore-Backed Memory

모든 상호작용을 벡터DB에 저장

사용자 질문을 벡터DB에 저장한 뒤 사용자의 쿼리에 가장 가까운 벡터 K개를 찾아 LLM 컨텍스트로 사용

올바른 순서로 벡터를 얻는다는 보장은 없음(의미적으로는 질문과 연관된 벡터이긴 함)

임베딩, 벡터 DB api 호출, 탐색 등의 과정을 거치기 때문에 지연 시간이 존재한다는 단점

 

'Python > LLM' 카테고리의 다른 글

프롬프트 엔지니어링  (0) 2024.07.22
Agent 구현  (0) 2024.07.17
Vector Db, Embedding  (0) 2024.07.07
[기본] LangChain  (0) 2024.06.30
Comments