feat(tool system): Tool info add tags variable

This commit is contained in:
谢俊男
2025-12-26 11:04:16 +08:00
parent 2fa3bebe8f
commit 4a9d4aa2e3
5 changed files with 17 additions and 34 deletions

View File

@@ -33,7 +33,7 @@ async def list_apps():
"""列出可访问的应用(占位)"""
return success(data=[], msg="App API - Coming Soon")
# /v1/apps/{resource_id}/chat
# /v1/app/chat
# @router.post("/chat")
# @require_api_key(scopes=["app"])
@@ -49,7 +49,6 @@ async def list_apps():
# scopes: 所需的权限范围列表["app", "rag", "memory"]
# Args:
# resource_id: 如果是应用的apikey传的是应用id; 如果是服务的apikey传的是工作空间id
# message: 请求参数
# request: 声明请求
# api_key_auth: 包含验证后的API Key 信息

View File

@@ -87,7 +87,8 @@ async def create_tool(
tenant_id=current_user.tenant_id,
icon=request.icon,
description=request.description,
config=request.config
config=request.config,
tags=request.tags
)
return success(data={"tool_id": tool_id}, msg="工具创建成功")
except ValueError as e:
@@ -112,7 +113,8 @@ async def update_tool(
description=request.description,
icon=request.icon,
config=request.config,
is_enabled=request.config.get("is_enabled", None)
is_enabled=request.config.get("is_enabled", None),
tags=request.tags
)
if not success_flag:
raise HTTPException(status_code=404, detail="工具不存在")
@@ -220,6 +222,8 @@ async def test_tool_connection(
else:
# 普通连接测试
result = await service.test_connection(tool_id, current_user.tenant_id)
if result["success"] is False:
raise HTTPException(status_code=400, detail=result["message"])
return success(data=result, msg="连接测试完成")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))

View File

@@ -30,32 +30,5 @@
"parameters": {
"api_key": {"type": "string", "description": "百度搜索API密钥", "sensitive": true, "required": true}
}
},
"mineru": {
"name": "MinerU",
"description": "PDF文档解析工具",
"tool_class": "MinerUTool",
"category": "document",
"requires_config": true,
"version": "1.0.0",
"enabled": true,
"parameters": {
"api_key": {"type": "string", "description": "MinerU API密钥", "sensitive": true, "required": true},
"base_url": {"type": "string", "description": "API地址", "default": "https://api.mineru.com"}
}
},
"textin": {
"name": "TextIn",
"description": "OCR文字识别服务",
"tool_class": "TextInTool",
"category": "ocr",
"requires_config": true,
"version": "1.0.0",
"enabled": true,
"parameters": {
"api_key": {"type": "string", "description": "TextIn API密钥", "sensitive": true, "required": true},
"api_secret": {"type": "string", "description": "TextIn API密钥", "sensitive": true, "required": true},
"base_url": {"type": "string", "description": "API地址", "default": "https://api.textin.com/v1"}
}
}
}

View File

@@ -191,6 +191,7 @@ class ToolCreateRequest(BaseModel):
icon: Optional[str] = Field(None, max_length=255)
tool_type: ToolType
config: Dict[str, Any] = Field(default_factory=dict)
tags: List[str] = Field(default_factory=list)
class ToolUpdateRequest(BaseModel):
@@ -200,6 +201,7 @@ class ToolUpdateRequest(BaseModel):
icon: Optional[str] = Field(None, max_length=255)
config: Optional[Dict[str, Any]] = None
is_enabled: Optional[bool] = None
tags: Optional[List[str]] = None
class ToolExecuteRequest(BaseModel):

View File

@@ -83,7 +83,8 @@ class ToolService:
tenant_id: uuid.UUID,
icon: Optional[str] = None,
description: Optional[str] = None,
config: Optional[Dict[str, Any]] = None
config: Optional[Dict[str, Any]] = None,
tags: Optional[List[str]] = None
) -> str:
"""创建工具"""
if tool_type == ToolType.BUILTIN:
@@ -98,7 +99,8 @@ class ToolService:
tool_type=tool_type.value,
tenant_id=tenant_id,
status=ToolStatus.AVAILABLE.value,
config_data=config or {}
config_data=config or {},
tags=tags
)
self.db.add(tool_config)
self.db.flush()
@@ -123,7 +125,8 @@ class ToolService:
description: Optional[str] = None,
icon: Optional[str] = None,
config: Optional[Dict[str, Any]] = None,
is_enabled: Optional[bool] = None
is_enabled: Optional[bool] = None,
tags: Optional[List[str]] = None
) -> bool:
"""更新工具"""
config_obj = self._get_tool_config(tool_id, tenant_id)
@@ -140,6 +143,8 @@ class ToolService:
config_obj.description = description
if icon:
config_obj.icon = icon
if tags:
config_obj.tags = tags
if config:
config_obj.config_data = config.copy()