Spaces:
Sleeping
Sleeping
File size: 2,112 Bytes
9985d37 600d58a 1368f74 9985d37 57a0f1d 9985d37 600d58a ba52088 9985d37 abfdf7a 83f207f 9985d37 abfdf7a 9985d37 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | from llama_index.core import VectorStoreIndex
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.retrievers.bm25 import BM25Retriever
from llama_index.core.retrievers import QueryFusionRetriever
from llama_index.core.response_synthesizers import get_response_synthesizer
from my_logging import log_message
SIMPLE_PROMPT = """Вы - эксперт по нормативной документации.
Контекст:
{context_str}
Вопрос: {query_str}
Инструкция:
1. Отвечайте ТОЛЬКО на основе предоставленного контекста
2. Цитируйте конкретные источники (документ, раздел, таблицу)
3. Если информации недостаточно, четко укажите это
4. Будьте точны и конкретны
Ответ:"""
def create_vector_index(documents):
"""Create vector index from documents"""
log_message(f"Building vector index from {len(documents)} documents...")
index = VectorStoreIndex.from_documents(documents)
log_message("✓ Index created")
return index
def create_query_engine(vector_index):
"""Create hybrid retrieval engine"""
log_message("Creating query engine...")
# Vector retriever
vector_retriever = VectorIndexRetriever(
index=vector_index,
similarity_top_k=30
)
# BM25 retriever
bm25_retriever = BM25Retriever.from_defaults(
docstore=vector_index.docstore,
similarity_top_k=30
)
# Hybrid fusion
hybrid_retriever = QueryFusionRetriever(
[vector_retriever, bm25_retriever],
similarity_top_k=40,
num_queries=1
)
# Response synthesizer
response_synthesizer = get_response_synthesizer()
# Query engine
query_engine = RetrieverQueryEngine(
retriever=hybrid_retriever,
response_synthesizer=response_synthesizer
)
log_message("✓ Query engine created")
return query_engine |