Browse Source

feat: - 使用知识库的标签检索,固定掼蛋、企业家、ai、女性的标签

zhangwl 1 day ago
parent
commit
1416d8e534
2 changed files with 12 additions and 5 deletions
  1. 8 3
      app/core/viking_client.py
  2. 4 2
      app/routers/chat_tools.py

+ 8 - 3
app/core/viking_client.py

@@ -20,7 +20,7 @@ _executor = ThreadPoolExecutor(max_workers=4)
 
 
 
-def _search_knowledge_sync(resource_id: str, query: str, limit: int = 5) -> list:
+def _search_knowledge_sync(category: str,resource_id: str, query: str, limit: int = 5) -> list:
     """
     同步检索 Viking 知识库,返回 PointInfo 列表。
     在线程池中调用,避免阻塞事件循环。
@@ -46,17 +46,22 @@ def _search_knowledge_sync(resource_id: str, query: str, limit: int = 5) -> list
             "chunk_diffusion_count": 1,              # 命中切片上下各扩散1片
             "chunk_group": True,                     # 按文档原始顺序重排,适合叙述性文档
         },
+        query_param={"doc_filter": {
+            "op": "must",
+            "field": "category",
+            "conds": [category],
+        } }
     ))
     if resp and resp.result and resp.result.result_list:
         return resp.result.result_list
     return []
 
 
-async def search_knowledge(resource_id: str, query: str, limit: int = 5) -> list:
+async def search_knowledge(category: str,resource_id: str, query: str, limit: int = 5) -> list:
     """
     异步检索 Viking 知识库,返回 PointInfo 列表。
     result_list 非空表示知识库有命中,为空则降级到联网搜索。
     """
     loop = asyncio.get_event_loop()
-    return await loop.run_in_executor(_executor, _search_knowledge_sync, resource_id, query, limit)
+    return await loop.run_in_executor(_executor, _search_knowledge_sync, category,resource_id, query, limit)
 

+ 4 - 2
app/routers/chat_tools.py

@@ -756,6 +756,7 @@ async def entrepreneur_chat(request: RoleBasedChatRequest):
         if knowledge_id:
             try:
                 kb_results = await search_knowledge(
+                    category="企业家",
                     resource_id=knowledge_id,
                     query=request.message,
                     limit=5,
@@ -1041,6 +1042,7 @@ async def femininity_chat(request: RoleBasedChatRequest):
         if knowledge_id:
             try:
                 kb_results = await search_knowledge(
+                    category="女性",
                     resource_id=knowledge_id,
                     query=request.message,
                     limit=5,
@@ -1279,7 +1281,7 @@ async def ai_community_chat(request: RoleBasedChatRequest):
         tools = []
         if knowledge_id:
             try:
-                kb_results = await search_knowledge(resource_id=knowledge_id, query=request.message, limit=5)
+                kb_results = await search_knowledge(category="AI",resource_id=knowledge_id, query=request.message, limit=5)
             except Exception as e:
                 print(f"知识库预检失败,降级到联网搜索: {e}")
                 kb_results = []
@@ -1507,7 +1509,7 @@ async def guandan_chat(request: RoleBasedChatRequest):
         tools = []
         if knowledge_id:
             try:
-                kb_results = await search_knowledge(resource_id=knowledge_id, query=request.message, limit=5)
+                kb_results = await search_knowledge(category="掼蛋",resource_id=knowledge_id, query=request.message, limit=5)
             except Exception as e:
                 print(f"知识库预检失败,降级到联网搜索: {e}")
                 kb_results = []