Skip to content

Commit f91d17f

Browse files
committed
✨Knowledge base summary: Create a new knowledge base table, summarize the content of the knowledge base and store it in the knowledge base table
1 parent 1a181b1 commit f91d17f

File tree

7 files changed

+39
-15
lines changed

7 files changed

+39
-15
lines changed

backend/apps/elasticsearch_app.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
11
from typing import Optional
22

3-
from fastapi import HTTPException, Query, Body, Path, Depends, APIRouter
3+
from fastapi import HTTPException, Query, Body, Path, Depends, APIRouter, Header
44
from consts.model import IndexingRequest, IndexingResponse, SearchRequest, HybridSearchRequest
55

66
from nexent.vector_database.elasticsearch_core import ElasticSearchCore
77
from services.elasticsearch_service import ElasticSearchService, get_es_core
8-
from database.knowledge_db import create_knowledge_record
8+
from database.utils import get_current_user_id
99
router = APIRouter(prefix="/indices")
1010

1111

1212
@router.post("/{index_name}")
1313
def create_new_index(
1414
index_name: str = Path(..., description="Name of the index to create"),
1515
embedding_dim: Optional[int] = Query(None, description="Dimension of the embedding vectors"),
16-
user_id: Optional[str] = Body(None, description="ID of the user creating the knowledge base"),
17-
es_core: ElasticSearchCore = Depends(get_es_core)
16+
es_core: ElasticSearchCore = Depends(get_es_core),
17+
authorization: Optional[str] = Header(None)
1818
):
1919
"""Create a new vector index and store it in the knowledge table"""
2020
try:
2121
# Create the index in Elasticsearch
22+
user_id = get_current_user_id(authorization)
2223
return ElasticSearchService.create_index(index_name, embedding_dim, es_core, user_id)
2324
except Exception as e:
2425
raise HTTPException(
@@ -30,11 +31,13 @@ def create_new_index(
3031
@router.delete("/{index_name}")
3132
def delete_index(
3233
index_name: str = Path(..., description="Name of the index to delete"),
33-
es_core: ElasticSearchCore = Depends(get_es_core)
34+
es_core: ElasticSearchCore = Depends(get_es_core),
35+
authorization: Optional[str] = Header(None)
3436
):
3537
"""Delete an index"""
3638
try:
37-
return ElasticSearchService.delete_index(index_name, es_core)
39+
user_id = get_current_user_id(authorization)
40+
return ElasticSearchService.delete_index(index_name, es_core, user_id)
3841
except Exception as e:
3942
raise HTTPException(status_code=404, detail=f"Error delete index: {str(e)}")
4043

@@ -152,11 +155,13 @@ def health_check(es_core: ElasticSearchCore = Depends(get_es_core)):
152155
def summery(
153156
index_name: str = Path(..., description="Name of the index to get documents from"),
154157
batch_size: int = Query(1000, description="Number of documents to retrieve per batch"),
155-
es_core: ElasticSearchCore = Depends(get_es_core)
158+
es_core: ElasticSearchCore = Depends(get_es_core),
159+
authorization: Optional[str] = Header(None)
156160
):
157161
"""Summery Elasticsearch index_name"""
158162
try:
163+
user_id = get_current_user_id(authorization)
159164
# Try to list indices as a health check
160-
return ElasticSearchService().summery_index_name(index_name=index_name,batch_size=batch_size, es_core=es_core)
165+
return ElasticSearchService().summery_index_name(index_name=index_name,batch_size=batch_size, es_core=es_core,user_id=user_id)
161166
except Exception as e:
162167
raise HTTPException(status_code=500, detail=f"{str(e)}")

backend/database/utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from typing import Optional
2+
from fastapi import Header
3+
4+
5+
# mork的假数据,用于获取用户id
6+
def get_current_user_id(authorization: Optional[str] = Header(None)):
7+
return "刘亦菲"

backend/services/elasticsearch_service.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ def create_index(
9797
@staticmethod
9898
def delete_index(
9999
index_name: str = Path(..., description="Name of the index to delete"),
100-
es_core: ElasticSearchCore = Depends(get_es_core)
100+
es_core: ElasticSearchCore = Depends(get_es_core),
101+
user_id: Optional[str] = Body(None, description="ID of the user delete the knowledge base"),
101102
):
102103
try:
103104
# First delete the index in Elasticsearch
@@ -110,6 +111,7 @@ def delete_index(
110111
if knowledge_record:
111112
update_data = {
112113
"delete_flag": "Y", # Set status to unavailable
114+
"updated_by": user_id,
113115
}
114116
update_knowledge_record(knowledge_record["knowledge_id"], update_data)
115117

@@ -608,7 +610,8 @@ def health_check(es_core: ElasticSearchCore = Depends(get_es_core)):
608610
def summery_index_name(self,
609611
index_name: str = Path(..., description="Name of the index to get documents from"),
610612
batch_size: int = Query(1000, description="Number of documents to retrieve per batch"),
611-
es_core: ElasticSearchCore = Depends(get_es_core)
613+
es_core: ElasticSearchCore = Depends(get_es_core),
614+
user_id: Optional[str] = Body(None, description="ID of the user delete the knowledge base")
612615
):
613616
try:
614617
all_documents = ElasticSearchService.get_all_documents(index_name, batch_size, es_core)
@@ -625,6 +628,7 @@ def summery_index_name(self,
625628
if knowledge_record:
626629
update_data = {
627630
"knowledge_describe": summary_result, # Set status to unavailable
631+
"updated_by": user_id,
628632
}
629633
update_knowledge_record(knowledge_record["knowledge_id"], update_data)
630634
# 存到sql里

docker/init.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ CREATE TABLE "knowledge_record_t" (
198198
"knowledge_id" SERIAL,
199199
"index_name" varchar(100) COLLATE "pg_catalog"."default",
200200
"knowledge_describe" varchar(300) COLLATE "pg_catalog"."default",
201+
"tenant_id" varchar(100) COLLATE "pg_catalog"."default",
201202
"create_time" timestamp(0) DEFAULT CURRENT_TIMESTAMP,
202203
"update_time" timestamp(0) DEFAULT CURRENT_TIMESTAMP,
203204
"delete_flag" varchar(1) COLLATE "pg_catalog"."default" DEFAULT 'N'::character varying,
@@ -209,6 +210,7 @@ ALTER TABLE "knowledge_record_t" OWNER TO "root";
209210
COMMENT ON COLUMN "knowledge_record_t"."knowledge_id" IS '知识库ID,唯一主键';
210211
COMMENT ON COLUMN "knowledge_record_t"."index_name" IS '知识库名字';
211212
COMMENT ON COLUMN "knowledge_record_t"."knowledge_describe" IS '知识库描述';
213+
COMMENT ON COLUMN "knowledge_record_t"."tenant_id" IS '租户ID';
212214
COMMENT ON COLUMN "knowledge_record_t"."create_time" IS '创建时间,审计字段';
213215
COMMENT ON COLUMN "knowledge_record_t"."update_time" IS '更新日期,审计字段';
214216
COMMENT ON COLUMN "knowledge_record_t"."delete_flag" IS '用户前端删除后,删除标识将被置为true,达到数据软删除的效果。可选值Y/N';

frontend/services/conversationService.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@ export interface STTResponse {
1212
text?: string;
1313
}
1414

15+
// 获取授权头的辅助函数,非正常功能函数,用于适配
16+
export const getAuthHeaders = () => {
17+
return {
18+
'Content-Type': 'application/json',
19+
'User-Agent': 'AgentFrontEnd/1.0',
20+
'Authorization': 'Bearer 1234'
21+
};
22+
};
23+
1524
const getHeaders = () => {
1625
return {
1726
'Content-Type': 'application/json',

frontend/services/knowledgeBaseService.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import { Document, KnowledgeBase, KnowledgeBaseCreateParams, IndexInfoResponse } from '@/types/knowledgeBase';
44
import { API_ENDPOINTS } from './api';
5+
import { getAuthHeaders } from './conversationService';
56

67
// Knowledge base service class
78
class KnowledgeBaseService {
@@ -113,14 +114,11 @@ class KnowledgeBaseService {
113114
try {
114115
const response = await fetch(API_ENDPOINTS.knowledgeBase.indexDetail(params.name), {
115116
method: "POST",
116-
headers: {
117-
"Content-Type": "application/json",
118-
},
117+
headers: getAuthHeaders(), // 添加用户健全信息,用于获取用户id
119118
body: JSON.stringify({
120119
name: params.name,
121120
description: params.description || "",
122121
embeddingModel: params.embeddingModel || "",
123-
userId: params.userId || "", // 添加用户ID
124122
}),
125123
});
126124

frontend/types/knowledgeBase.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ export interface KnowledgeBaseCreateParams {
2525
description: string;
2626
source?: string;
2727
embeddingModel?: string;
28-
userId?: string;
2928
}
3029

3130
// 文档类型

0 commit comments

Comments
 (0)