feat: 知识库工具注册分类体系,ToolsCardList 展示 knowledge 分类

- kbs tools 添加 category=knowledge 和 tags 元数据
- registry 注释补充 knowledge 分类说明
- ToolsCardList 新增 knowledge 分类展示标签

Co-authored-by: xerrors <xerrors@qq.com>
This commit is contained in:
Wenjie Zhang 2026-05-18 23:53:22 +08:00
parent 17b521796c
commit 82af923cf1
3 changed files with 12 additions and 11 deletions

View File

@ -3,8 +3,9 @@
import inspect
from typing import Any
from langchain_core.tools import tool
from langgraph.prebuilt.tool_node import ToolRuntime
from yuxi.agents.toolkits.registry import tool
from pydantic import BaseModel, Field
from yuxi import knowledge_base
@ -29,7 +30,7 @@ class ListKBsInput(BaseModel):
dummy: str = Field(default="", description="Dummy parameter - ignore") # Add this
@tool(args_schema=ListKBsInput)
@tool(category="knowledge", tags=["知识库"], args_schema=ListKBsInput)
async def list_kbs(dummy: str, runtime: ToolRuntime) -> str: # Now has 2 params
"""列出当前用户可访问的知识库列表
@ -82,7 +83,7 @@ class GetMindmapInput(BaseModel):
kb_name: str = Field(description="知识库名称,用于指定要获取思维导图的知识库")
@tool(args_schema=GetMindmapInput)
@tool(category="knowledge", tags=["知识库"], args_schema=GetMindmapInput)
async def get_mindmap(kb_name: str, runtime: ToolRuntime) -> str:
"""获取指定知识库的思维导图结构
@ -192,7 +193,7 @@ def _find_query_target(
return target_info, normalized_resource_id, None
@tool(args_schema=QueryKBInput)
@tool(category="knowledge", tags=["知识库"], args_schema=QueryKBInput)
async def query_kb(resource_id: str, query_text: str, file_name: str | None = None, runtime: ToolRuntime = None) -> Any:
"""在指定知识库中检索内容
@ -238,7 +239,7 @@ async def query_kb(resource_id: str, query_text: str, file_name: str | None = No
return f"检索失败: {str(e)}"
@tool(args_schema=OpenKBDocumentInput)
@tool(category="knowledge", tags=["知识库"], args_schema=OpenKBDocumentInput)
async def open_kb_document(
resource_id: str,
file_id: str,
@ -292,7 +293,7 @@ async def open_kb_document(
return f"打开知识库文档失败: {str(e)}"
@tool(args_schema=FindKBDocumentInput)
@tool(category="knowledge", tags=["知识库"], args_schema=FindKBDocumentInput)
async def find_kb_document(
resource_id: str,
file_id: str,

View File

@ -6,7 +6,7 @@ from dataclasses import dataclass, field
class ToolExtraMetadata:
"""附加元数据(用装饰器注册)"""
category: str = "" # 分类: buildin, mysql, subagents, debug
category: str = "" # 分类: buildin, knowledge, mysql, subagents, debug
tags: list[str] = field(default_factory=list)
display_name: str = "" # 显示名称(给人看的名字)
icon: str = ""

View File

@ -15,7 +15,7 @@
</a-select>
</template>
<template #actions>
<a-tooltip title="刷新工具">
<a-tooltip title="刷新工具" placement="bottom">
<a-button class="lucide-icon-btn" :disabled="loading" @click="fetchTools">
<RefreshCw :size="14" />
</a-button>
@ -129,9 +129,9 @@ const tools = ref([])
const currentTool = ref(null)
const detailVisible = ref(false)
const categories = ['buildin', 'mysql', 'debug']
const categoryLabels = { buildin: '内置工具', mysql: 'MySQL', debug: '调试' }
const categoryColors = { buildin: 'blue', mysql: 'green', debug: 'orange' }
const categories = ['buildin', 'knowledge', 'mysql', 'debug']
const categoryLabels = { buildin: '内置工具', knowledge: '知识库', mysql: 'MySQL', debug: '调试' }
const categoryColors = { buildin: 'blue', knowledge: 'purple', mysql: 'green', debug: 'orange' }
const toolTags = (tool) => {
const tags = []