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 import inspect
from typing import Any from typing import Any
from langchain_core.tools import tool
from langgraph.prebuilt.tool_node import ToolRuntime from langgraph.prebuilt.tool_node import ToolRuntime
from yuxi.agents.toolkits.registry import tool
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from yuxi import knowledge_base from yuxi import knowledge_base
@ -29,7 +30,7 @@ class ListKBsInput(BaseModel):
dummy: str = Field(default="", description="Dummy parameter - ignore") # Add this 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 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="知识库名称,用于指定要获取思维导图的知识库") 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: 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 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: 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)}" return f"检索失败: {str(e)}"
@tool(args_schema=OpenKBDocumentInput) @tool(category="knowledge", tags=["知识库"], args_schema=OpenKBDocumentInput)
async def open_kb_document( async def open_kb_document(
resource_id: str, resource_id: str,
file_id: str, file_id: str,
@ -292,7 +293,7 @@ async def open_kb_document(
return f"打开知识库文档失败: {str(e)}" return f"打开知识库文档失败: {str(e)}"
@tool(args_schema=FindKBDocumentInput) @tool(category="knowledge", tags=["知识库"], args_schema=FindKBDocumentInput)
async def find_kb_document( async def find_kb_document(
resource_id: str, resource_id: str,
file_id: str, file_id: str,

View File

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

View File

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