faiss server

This commit is contained in:
2026-04-10 11:55:00 +00:00
parent bc82e3e708
commit 8e39e609cc
30 changed files with 1271 additions and 1048 deletions

44
faiss/api.py Normal file
View File

@@ -0,0 +1,44 @@
# api.py
from fastapi import FastAPI, Depends, HTTPException
from models import EmbeddingInput, SearchInput
from faiss_manager import faiss_manager
from config import get_settings
settings = get_settings()
app = FastAPI(
title="FAISS 服务",
description="向量插入 + 相似搜索 + 持久化",
version="1.0.0"
)
def log_business(message: str):
if settings.ENABLE_REQUEST_LOGS:
print(message, flush=True)
@app.post("/insert")
async def insert(data: EmbeddingInput):
try:
vector_id = faiss_manager.insert(data.embedding)
log_business(f"[faiss] insert id={vector_id}")
return {"id": vector_id}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@app.post("/search")
async def search(data: SearchInput):
try:
result = faiss_manager.search(data.embedding, data.k)
log_business(
f"[faiss] search ids={result['ids']} similarity_scores={result['similarity_scores']}",
)
return result
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@app.post("/persist")
async def persist():
faiss_manager.persist()
return {"status": "success", "message": "索引已持久化"}