Files
JARVIS/development-doc/plan/temple-update/phase-1-tools-api.md

136 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 字段区分来源