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

View File

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

View File

@@ -30,32 +30,5 @@
"parameters": { "parameters": {
"api_key": {"type": "string", "description": "百度搜索API密钥", "sensitive": true, "required": true} "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) icon: Optional[str] = Field(None, max_length=255)
tool_type: ToolType tool_type: ToolType
config: Dict[str, Any] = Field(default_factory=dict) config: Dict[str, Any] = Field(default_factory=dict)
tags: List[str] = Field(default_factory=list)
class ToolUpdateRequest(BaseModel): class ToolUpdateRequest(BaseModel):
@@ -200,6 +201,7 @@ class ToolUpdateRequest(BaseModel):
icon: Optional[str] = Field(None, max_length=255) icon: Optional[str] = Field(None, max_length=255)
config: Optional[Dict[str, Any]] = None config: Optional[Dict[str, Any]] = None
is_enabled: Optional[bool] = None is_enabled: Optional[bool] = None
tags: Optional[List[str]] = None
class ToolExecuteRequest(BaseModel): class ToolExecuteRequest(BaseModel):

View File

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