diff --git a/app/api/search.py b/app/api/search.py index 5951221..5f91c6e 100644 --- a/app/api/search.py +++ b/app/api/search.py @@ -3,7 +3,7 @@ from pydantic import BaseModel from app.core.embedding import embedder from app.core.config import settings from llama_index.vector_stores.faiss import FaissVectorStore -from llama_index import VectorStoreIndex, ServiceContext +from llama_index import VectorStoreIndex, ServiceContext, StorageContext import os import logging import faiss # 引入faiss @@ -44,15 +44,19 @@ def search_docs(request: QueryRequest, user_id: str = Query(..., description=" vector_store = FaissVectorStore(faiss_index=faiss_index) logger.info("FaissVectorStore created successfully.") + # 创建 StorageContext 实例(确保同时加载文本和向量) + storage_context = StorageContext.from_defaults(persist_dir=index_path, vector_store=vector_store) + logger.info("Storage context created successfully.") + # 创建 ServiceContext 实例 service_context = ServiceContext.from_defaults(embed_model=embedder, llm=None) logger.info("Service context created successfully.") - # 创建 VectorStoreIndex - index = VectorStoreIndex.from_vector_store(vector_store, service_context=service_context) + # 创建 VectorStoreIndex 并加载文本与向量 + index = VectorStoreIndex.from_storage_context(storage_context) logger.info("VectorStoreIndex created successfully.") - # 检索结果(真实文本) + # 检索结果(包含文本) retriever = index.as_retriever(similarity_top_k=settings.TOP_K) logger.info(f"Retrieving top {settings.TOP_K} results for query: {request.query}") nodes = retriever.retrieve(request.query) @@ -62,7 +66,7 @@ def search_docs(request: QueryRequest, user_id: str = Query(..., description=" "user_id": user_id, "query": request.query, "results": [ - {"score": float(node.score or 0), "text": node.get_content()} + {"score": float(node.score or 0), "text": node.get_content()} # 确保从 Node 中获取文本 for node in nodes ] }