Я пытаюсь реализовать дополнительный фильтр диапазона дат наряду с фильтром top_k, используя метод as_retriever Langchain. Я работаю с ChromaDB в качестве базы данных векторов.
Цель состоит в том, чтобы получить документы top_k, попадающие в указанный диапазон дат, на основе поля метаданных "event_date". Вот что я попробовал, но, похоже, это не работает должным образом.
Когда я использую только фильтр top_k, я получаю набор документов, которые в идеале должны попадать в указанный диапазон дат. Однако когда я добавляю фильтр диапазона дат, никакие документы не извлекаются. Кроме того, есть ли способ просмотреть полученные документы top_k?
def create_qa_chain_with_date_filter(llm, vectordb, prompt, document_prompt, verbose=False):
"""Create a RetrievalQA chain with date range filtering."""
start_date = date_to_int("2013-08-02")
end_date = date_to_int("2018-08-02")
return RetrievalQA.from_chain_type(
llm,
retriever=vectordb.as_retriever(
search_kwargs={
"k": 10,
"filter": {
"$and": [
{"event_date": {"$gt": start_date}},
{"event_date": {"$lt": end_date}}
]
}
}
),
chain_type_kwargs={
"prompt": prompt,
"document_prompt": document_prompt,
"verbose": verbose
}
)
Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-the-as