提供对话上下文索引

This commit is contained in:
2026-04-10 12:47:39 +00:00
parent 8e39e609cc
commit d4e6142131
10 changed files with 267 additions and 90 deletions

View File

@@ -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")