提供对话上下文索引
This commit is contained in:
68
faiss/api.py
68
faiss/api.py
@@ -1,41 +1,81 @@
|
||||
# api.py
|
||||
from fastapi import FastAPI, Depends, HTTPException
|
||||
from models import EmbeddingInput, SearchInput
|
||||
from faiss_manager import faiss_manager
|
||||
from fastapi import FastAPI, HTTPException
|
||||
|
||||
from config import get_settings
|
||||
from faiss_manager import faiss_manager
|
||||
from models import EmbeddingInput, IndexDeleteInput, IndexInsertInput, IndexSearchInput, SearchInput
|
||||
|
||||
settings = get_settings()
|
||||
|
||||
app = FastAPI(
|
||||
title="FAISS 服务",
|
||||
description="向量插入 + 相似搜索 + 持久化",
|
||||
version="1.0.0"
|
||||
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}")
|
||||
log_business(f"[faiss] global insert id={vector_id}")
|
||||
return {"id": vector_id}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc))
|
||||
|
||||
|
||||
@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']}",
|
||||
)
|
||||
log_business(f"[faiss] global search ids={result['ids']} similarity_scores={result['similarity_scores']}")
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc))
|
||||
|
||||
|
||||
@app.post("/create")
|
||||
async def create():
|
||||
try:
|
||||
idx = faiss_manager.create()
|
||||
log_business(f"[faiss] create idx={idx}")
|
||||
return {"idx": idx}
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc))
|
||||
|
||||
|
||||
@app.post("/insert_idx")
|
||||
async def insert_idx(data: IndexInsertInput):
|
||||
try:
|
||||
vector_id = faiss_manager.insert_idx(data.idx, data.id, data.embedding)
|
||||
log_business(f"[faiss] insert_idx idx={data.idx} id={vector_id}")
|
||||
return {"id": vector_id, "idx": data.idx}
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc))
|
||||
|
||||
|
||||
@app.post("/search_idx")
|
||||
async def search_idx(data: IndexSearchInput):
|
||||
try:
|
||||
result = faiss_manager.search_idx(data.idx, data.embedding, data.k)
|
||||
log_business(f"[faiss] search_idx idx={data.idx} ids={result['ids']} similarity_scores={result['similarity_scores']}")
|
||||
return result
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc))
|
||||
|
||||
|
||||
@app.post("/del")
|
||||
async def delete_idx(data: IndexDeleteInput):
|
||||
try:
|
||||
faiss_manager.delete(data.idx)
|
||||
log_business(f"[faiss] delete idx={data.idx}")
|
||||
return {"status": "success", "idx": data.idx}
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc))
|
||||
|
||||
|
||||
@app.post("/persist")
|
||||
|
||||
Reference in New Issue
Block a user