init. project

This commit is contained in:
2026-04-13 11:34:23 +08:00
commit c7c0659a85
202 changed files with 31196 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
from typing import Any, List
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from langchain_chroma import Chroma
from app.services.vector_store import VectorStoreFactory
from app import models
from app.db.session import get_db
from app.core.security import get_api_key_user
from app.core.config import settings
from app.services.embedding.embedding_factory import EmbeddingsFactory
router = APIRouter()
@router.get("/{knowledge_base_id}/query")
def query_knowledge_base(
*,
db: Session = Depends(get_db),
knowledge_base_id: int,
query: str,
top_k: int = 3,
current_user: models.User = Depends(get_api_key_user),
) -> Any:
"""
Query a specific knowledge base using API key authentication
"""
try:
kb = db.query(models.KnowledgeBase).filter(
models.KnowledgeBase.id == knowledge_base_id,
models.KnowledgeBase.user_id == current_user.id
).first()
if not kb:
raise HTTPException(
status_code=404,
detail=f"Knowledge base {knowledge_base_id} not found",
)
embeddings = EmbeddingsFactory.create()
vector_store = VectorStoreFactory.create(
store_type=settings.VECTOR_STORE_TYPE,
collection_name=f"kb_{knowledge_base_id}",
embedding_function=embeddings,
)
results = vector_store.similarity_search_with_score(query, k=top_k)
response = []
for doc, score in results:
response.append({
"content": doc.page_content,
"metadata": doc.metadata,
"score": float(score)
})
return {"results": response}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))