# 工具与自动测试 (Tools & Autotest) API 工具与自动测试 API 用于管理可用工具列表和自动测试功能。 ## 基础信息 | 项目 | 值 | |------|-----| | Base URL | `/api/v1/tools` | | 认证方式 | Bearer Token (预留) | --- ## 可用工具 (Tool Registry) 系统内置以下工具: | 工具ID | 名称 | 类别 | 说明 | |--------|------|------|------| | calculator | 计算器 | query | 执行数学计算 | | code_interpreter | 代码执行 | query | 安全地执行Python代码 | | current_time | 当前时间 | query | 获取当前本地时间 | | turn_on_camera | 打开摄像头 | system | 执行打开摄像头命令 | | turn_off_camera | 关闭摄像头 | system | 执行关闭摄像头命令 | | increase_volume | 调高音量 | system | 提升设备音量 | | decrease_volume | 调低音量 | system | 降低设备音量 | | voice_msg_prompt | 语音消息提示 | system | 播报一条语音提示消息 | | text_msg_prompt | 文本消息提示 | system | 显示一条文本弹窗提示 | | voice_choice_prompt | 语音选项提示 | system | 播报问题并展示可选项,等待用户选择 | | text_choice_prompt | 文本选项提示 | system | 显示文本选项弹窗并等待用户选择 | **类别说明:** - `query`: 查询类工具,需要配置 HTTP URL - `system`: 系统类工具,直接在客户端执行 --- ## API 端点 ### 1. 获取可用工具列表 ```http GET /api/v1/tools/list ``` **Response:** ```json { "tools": { "search": { "name": "网络搜索", "description": "搜索互联网获取最新信息", "parameters": { "type": "object", "properties": { "query": {"type": "string", "description": "搜索关键词"} }, "required": ["query"] } }, "calculator": { "name": "计算器", "description": "执行数学计算", "parameters": { "type": "object", "properties": { "expression": {"type": "string", "description": "数学表达式,如: 2 + 3 * 4"} }, "required": ["expression"] } }, "weather": { "name": "天气查询", "description": "查询指定城市的天气", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名称"} }, "required": ["city"] } }, "translate": { "name": "翻译", "description": "翻译文本到指定语言", "parameters": { "type": "object", "properties": { "text": {"type": "string", "description": "要翻译的文本"}, "target_lang": {"type": "string", "description": "目标语言,如: en, ja, ko"} }, "required": ["text", "target_lang"] } }, "knowledge": { "name": "知识库查询", "description": "从知识库中检索相关信息", "parameters": { "type": "object", "properties": { "query": {"type": "string", "description": "查询内容"}, "kb_id": {"type": "string", "description": "知识库ID"} }, "required": ["query"] } }, "code_interpreter": { "name": "代码执行", "description": "安全地执行Python代码", "parameters": { "type": "object", "properties": { "code": {"type": "string", "description": "要执行的Python代码"} }, "required": ["code"] } } } } ``` --- ### 2. 获取工具详情 ```http GET /api/v1/tools/list/{tool_id} ``` **Path Parameters:** | 参数 | 类型 | 说明 | |------|------|------| | tool_id | string | 工具ID | **Response:** ```json { "name": "计算器", "description": "执行数学计算", "parameters": { "type": "object", "properties": { "expression": {"type": "string", "description": "数学表达式,如: 2 + 3 * 4"} }, "required": ["expression"] } } ``` **错误响应 (工具不存在):** ```json { "detail": "Tool not found" } ``` --- ### 3. 健康检查 ```http GET /api/v1/tools/health ``` **Response:** ```json { "status": "healthy", "timestamp": 1705315200.123, "tools": ["search", "calculator", "weather", "translate", "knowledge", "code_interpreter"] } ``` --- ### 4. 获取工具资源列表 ```http GET /api/v1/tools/resources ``` **Query Parameters:** | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | category | string | 否 | - | 过滤类别: "query" \| "system" | | enabled | boolean | 否 | - | 过滤启用状态 | | include_system | boolean | 否 | true | 是否包含系统工具 | | page | int | 否 | 1 | 页码 | | limit | int | 否 | 100 | 每页数量 | **Response:** ```json { "total": 15, "page": 1, "limit": 100, "list": [ { "id": "calculator", "user_id": 1, "name": "计算器", "description": "执行数学计算", "category": "query", "icon": "Terminal", "http_method": "GET", "http_url": null, "http_timeout_ms": 10000, "parameter_schema": { "type": "object", "properties": { "expression": {"type": "string", "description": "数学表达式"} }, "required": ["expression"] }, "parameter_defaults": {}, "wait_for_response": false, "enabled": true, "is_system": true, "created_at": "2024-01-15T10:30:00Z" } ] } ``` --- ### 5. 获取工具资源详情 ```http GET /api/v1/tools/resources/{id} ``` --- ### 6. 创建工具资源 ```http POST /api/v1/tools/resources ``` **Request Body:** ```json { "name": "订单查询", "description": "查询用户订单信息", "category": "query", "icon": "Search", "http_method": "POST", "http_url": "https://api.example.com/orders", "http_headers": {"Authorization": "Bearer {api_key}"}, "http_timeout_ms": 10000, "parameter_schema": { "type": "object", "properties": { "order_id": {"type": "string", "description": "订单ID"} }, "required": ["order_id"] }, "enabled": true } ``` **Fields 说明:** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | id | string | 否 | 工具ID,默认自动生成 | | name | string | 是 | 工具名称 | | description | string | 否 | 工具描述 | | category | string | 是 | 类别: "query" \| "system" | | icon | string | 否 | 图标名称 | | http_method | string | 否 | HTTP 方法,默认 GET | | http_url | string | 否* | HTTP 请求地址 (query 类必填) | | http_headers | object | 否 | HTTP 请求头 | | http_timeout_ms | int | 否 | 超时时间(毫秒),默认 10000 | | parameter_schema | object | 否 | 参数 JSON Schema | | parameter_defaults | object | 否 | 默认参数值 | | wait_for_response | boolean | 否 | 是否等待响应 (仅 system 类) | | enabled | boolean | 否 | 是否启用,默认 true | --- ### 7. 更新工具资源 ```http PUT /api/v1/tools/resources/{id} ``` --- ### 8. 删除工具资源 ```http DELETE /api/v1/tools/resources/{id} ``` --- ## 自动测试 (Autotest) ### 4. 运行完整自动测试 ```http POST /api/v1/tools/autotest ``` **Query Parameters:** | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | llm_model_id | string | 否 | - | LLM 模型ID | | asr_model_id | string | 否 | - | ASR 模型ID | | test_llm | boolean | 否 | true | 是否测试LLM | | test_asr | boolean | 否 | true | 是否测试ASR | **Response:** ```json { "id": "abc12345", "started_at": 1705315200.0, "duration_ms": 2500, "tests": [ { "name": "Model Existence", "passed": true, "message": "Found model: GPT-4o", "duration_ms": 15 }, { "name": "API Connection", "passed": true, "message": "Latency: 150ms", "duration_ms": 150 }, { "name": "Temperature Setting", "passed": true, "message": "temperature=0.7" }, { "name": "Streaming Support", "passed": true, "message": "Received 15 chunks", "duration_ms": 800 } ], "summary": { "passed": 4, "failed": 0, "total": 4 } } ``` --- ### 5. 测试单个 LLM 模型 ```http POST /api/v1/tools/autotest/llm/{model_id} ``` **Path Parameters:** | 参数 | 类型 | 说明 | |------|------|------| | model_id | string | LLM 模型ID | **Response:** ```json { "id": "llm_test_001", "started_at": 1705315200.0, "duration_ms": 1200, "tests": [ { "name": "Model Existence", "passed": true, "message": "Found model: GPT-4o", "duration_ms": 10 }, { "name": "API Connection", "passed": true, "message": "Latency: 180ms", "duration_ms": 180 }, { "name": "Temperature Setting", "passed": true, "message": "temperature=0.7" }, { "name": "Streaming Support", "passed": true, "message": "Received 12 chunks", "duration_ms": 650 } ], "summary": { "passed": 4, "failed": 0, "total": 4 } } ``` --- ### 6. 测试单个 ASR 模型 ```http POST /api/v1/tools/autotest/asr/{model_id} ``` **Path Parameters:** | 参数 | 类型 | 说明 | |------|------|------| | model_id | string | ASR 模型ID | **Response:** ```json { "id": "asr_test_001", "started_at": 1705315200.0, "duration_ms": 800, "tests": [ { "name": "Model Existence", "passed": true, "message": "Found model: Whisper-1", "duration_ms": 8 }, { "name": "Hotwords Config", "passed": true, "message": "Hotwords: 3 words" }, { "name": "API Availability", "passed": true, "message": "Status: 200", "duration_ms": 250 }, { "name": "Language Config", "passed": true, "message": "Language: zh" } ], "summary": { "passed": 4, "failed": 0, "total": 4 } } ``` --- ### 7. 发送测试消息 ```http POST /api/v1/tools/test-message ``` **Query Parameters:** | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | llm_model_id | string | 是 | - | LLM 模型ID | | message | string | 否 | "Hello, this is a test message." | 测试消息 | **Response:** ```json { "success": true, "reply": "Hello! This is a test reply from GPT-4o.", "usage": { "prompt_tokens": 15, "completion_tokens": 12, "total_tokens": 27 } } ``` **错误响应 (模型不存在):** ```json { "detail": "LLM Model not found" } ``` --- ## 测试结果结构 ### AutotestResult ```typescript interface AutotestResult { id: string; // 测试ID started_at: number; // 开始时间戳 duration_ms: number; // 总耗时(毫秒) tests: TestCase[]; // 测试用例列表 summary: TestSummary; // 测试摘要 } interface TestCase { name: string; // 测试名称 passed: boolean; // 是否通过 message: string; // 测试消息 duration_ms: number; // 耗时(毫秒) } interface TestSummary { passed: number; // 通过数量 failed: number; // 失败数量 total: number; // 总数量 } ``` --- ## 测试项目说明 ### LLM 模型测试项目 | 测试名称 | 说明 | |----------|------| | Model Existence | 检查模型是否存在于数据库 | | API Connection | 测试 API 连接并测量延迟 | | Temperature Setting | 检查温度配置 | | Streaming Support | 测试流式响应支持 | ### ASR 模型测试项目 | 测试名称 | 说明 | |----------|------| | Model Existence | 检查模型是否存在于数据库 | | Hotwords Config | 检查热词配置 | | API Availability | 测试 API 可用性 | | Language Config | 检查语言配置 | --- ## 单元测试 项目包含完整的单元测试,位于 `api/tests/test_tools.py`。 ### 测试用例概览 | 测试类 | 说明 | |--------|------| | TestToolsAPI | 工具列表、健康检查等基础功能测试 | | TestAutotestAPI | 自动测试功能完整测试 | ### 运行测试 ```bash # 运行工具相关测试 pytest api/tests/test_tools.py -v # 运行所有测试 pytest api/tests/ -v ```