# Phase 1:后端 Tools API 开发 日期:2026-04-08 状态:待开始 --- ## 1. 本阶段目的 开发 `GET /api/tools` 接口,聚合两套工具体系的元数据,为前端 Tools Tab 提供数据源。 --- ## 2. 核心文件 | 文件 | 作用 | |------|------| | `app/routers/tools.py` | 新建,Tools 路由 | | `app/schemas/tools.py` | 新建,Tools API Pydantic Schema | --- ## 3. API 设计 ### 3.1 接口 ``` GET /api/tools ``` ### 3.2 响应结构 ```python class ToolCommand(BaseModel): name: str description: str parameters: dict # JSON Schema class ToolStats(BaseModel): call_count: int error_count: int total_duration_ms: int avg_duration_ms: int error_rate: float class ToolCategory(BaseModel): name: str # 显示用中文分类名 source: str # "manifest" | "agent" tools: list[ToolInfo] class ToolInfo(BaseModel): name: str display_name: str description: str category: str tags: list[str] enabled: bool source: str # "manifest" | "agent" commands: list[ToolCommand] stats: ToolStats | None class ToolsResponse(BaseModel): categories: list[ToolCategory] summary: dict: total: int active: int by_source: dict ``` ### 3.3 分类结构 按工具来源分为两大类: **注册层(source: "manifest")** | Category Name | 来源 | |--------------|------| | `文件操作` | `manifests/file_operator.yaml` | | `任务管理` | `manifests/task_manager.yaml` | | `网页抓取` | `manifests/web_fetch.yaml` | | `联网搜索` | `manifests/web_search.yaml` | **Agent 层(source: "agent")** | Category Name | 来源 | |--------------|------| | `文件工具` | `builtins/file_tools.py` | | `系统命令` | `builtins/system_tools.py` | | `开发工具` | `builtins/dev_tools.py` | | `协作工具` | `builtins/collaboration_tools.py` | | `知识检索` | `search.py` | | `日程管理` | `schedule.py` | | `任务管理` | `task.py` | | `论坛功能` | `forum.py` | | `时间推理` | `time_reasoning.py` | --- ## 4. 实现逻辑 ### 4.1 数据聚合流程 ``` 1. 从 ToolRegistry.list_all() 获取注册层工具元数据 2. 扫描 app/agents/tools/ 下所有 @tool 装饰器,获取 Agent 层工具 3. 合并两套数据,按 category 分组 4. 调用 ToolRegistry.get_stats() 获取统计数据 5. 返回聚合后的 categories + summary ``` ### 4.2 Agent 层工具扫描 通过内省 `app/agents/tools/` 目录下所有 `@tool` 装饰的函数,提取: - `__name__` → tool name - `__doc__` → description - `__annotations__` → parameters schema ### 4.3 注册路由 在 `app/main.py` 中注册新路由: ```python from app.routers import tools as tools_router app.include_router(tools_router.router, prefix="/api", tags=["tools"]) ``` --- ## 5. 产出要求 - [x] `GET /api/tools` 接口可调用,返回完整工具列表 - [x] 两套工具体系元数据正确聚合 - [x] 统计数据(调用次数、错误率)正确返回 - [x] 按 category 分组,source 字段区分来源