작성
·
170
답변 2
0
안녕하세요~. 반갑습니다.
retriever를 선언할때 top_k 값을 큰 값으로 지정해서 여러개의 Document list를 반환하도록 세팅하고 (아래 예시의 경우 top_k = 10개로 설정)
retriever = SelfQueryRetriever.from_llm(
llm,
vectorstore,
document_content_description,
metadata_field_info,
top_k=10
)
2. invoke 함수 호출결과로 return된 Document list에서 랜덤하게 원하는 개수만큼의 Document를 선택하도록 별도의 함수를 정의해서 사용
import random
def random_retrieve(retriever, query, sample_size):
# 원래 Retriever를 사용하여 도큐먼트 검색
documents = retriever.invoke(query)
# 도큐먼트에서 랜덤 샘플링
random_documents = random.sample(documents, min(sample_size, len(documents)))
return random_documents
# 예시 쿼리
query = "example query"
# 랜덤하게 선택할 도큐먼트 개수
sample_size = 5
# 랜덤하게 도큐먼트 리턴
random_documents = random_retrieve(retriever, query, sample_size)
위와 같은 형태로 구현하시면 원하시는 결과를 얻으실 수 있을 것 같습니다.
좋은 하루되세요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
SelfQueryRetriever를 사용하여 카테고리별로 문서를 랜덤하게 가져오기 위해서는 몇 가지 접근 방식을 고려할 수 있습니다.
데이터 로딩 단계에서 랜덤성 주기: 메타데이터를 로딩할 때, 특정 카테고리에 속한 문서들을 먼저 필터링하고 그 중에서 랜덤하게 문서를 선택하여 llm에 입력하는 방식입니다. Python의 random.choice()
함수를 사용하여 구현할 수 있습니다.
벡터 데이터베이스 쿼리 수정: 벡터 데이터베이스에서 쿼리를 날릴 때, 카테고리별로 문서를 랜덤하게 가져오는 조건을 추가하는 방법입니다. 이는 사용하고 있는 벡터 데이터베이스의 쿼리 언어나 API에 따라 구현 방법이 달라질 수 있습니다.
포스트 프로세싱 단계에서 랜덤 선택: llm에 의해 반환된 카테고리별 문서 목록에서, 후처리 과정을 통해 랜덤하게 하나를 선택하는 방식입니다. 이 방법은 llm이 반환한 결과 중에서 후속 처리로 랜덤 선택을 하는 것이므로, 전처리 단계에서 랜덤성을 주는 것보다는 제한적일 수 있습니다.
정확한 구현 방법은 사용하고 있는 llm의 API와 벡터 데이터베이스의 기능, Python 라이브러리 등에 따라 다를 수 있으므로, 개별 환경에 맞게 적용해 보시기 바랍니다.