forked from wangtao/AI4SE_Practices
api
This commit is contained in:
parent
7f4dd7f34b
commit
7da226c3fe
|
|
@ -0,0 +1,163 @@
|
|||
# API 快速启动指南
|
||||
|
||||
## ✅ 当前状态
|
||||
|
||||
API已经可以运行!依赖已安装,代码结构完整。
|
||||
|
||||
## 🚀 运行方式
|
||||
|
||||
### 方式1:使用 run.py(推荐)
|
||||
|
||||
```bash
|
||||
python run.py
|
||||
```
|
||||
|
||||
### 方式2:使用 start_api.py(带详细输出)
|
||||
|
||||
```bash
|
||||
python start_api.py
|
||||
```
|
||||
|
||||
### 方式3:直接使用 uvicorn
|
||||
|
||||
```bash
|
||||
python -m uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload
|
||||
```
|
||||
|
||||
## 📍 访问地址
|
||||
|
||||
启动成功后,可以通过以下地址访问:
|
||||
|
||||
- **Swagger UI(交互式API文档)**: http://localhost:8000/docs
|
||||
- **ReDoc(API文档)**: http://localhost:8000/redoc
|
||||
- **健康检查**: http://localhost:8000/health
|
||||
- **API根路径**: http://localhost:8000/
|
||||
|
||||
## 🔍 验证API是否运行
|
||||
|
||||
### 方法1:检查端口
|
||||
|
||||
```bash
|
||||
# Windows PowerShell
|
||||
netstat -ano | findstr :8000
|
||||
|
||||
# 或使用
|
||||
Get-NetTCPConnection -LocalPort 8000
|
||||
```
|
||||
|
||||
### 方法2:访问健康检查接口
|
||||
|
||||
在浏览器中打开:http://localhost:8000/health
|
||||
|
||||
应该返回:
|
||||
```json
|
||||
{"status": "healthy"}
|
||||
```
|
||||
|
||||
### 方法3:使用curl测试
|
||||
|
||||
```bash
|
||||
# Windows PowerShell
|
||||
Invoke-WebRequest -Uri http://localhost:8000/health
|
||||
|
||||
# 或使用curl(如果已安装)
|
||||
curl http://localhost:8000/health
|
||||
```
|
||||
|
||||
## 📋 API功能
|
||||
|
||||
### 已实现的功能
|
||||
|
||||
✅ **工具信息管理**
|
||||
- 获取工具列表:`GET /api/tools/`
|
||||
- 获取工具详情:`GET /api/tools/{tool_id}`
|
||||
- 工具搜索和筛选
|
||||
- 获取工具分类和类型
|
||||
|
||||
✅ **测试任务管理**
|
||||
- 获取所有测试任务:`GET /api/test-tasks/`
|
||||
- 获取任务详情:`GET /api/test-tasks/{task_type}`
|
||||
|
||||
✅ **测试结果管理**
|
||||
- 获取测试结果列表:`GET /api/test-results/`
|
||||
- 获取测试结果详情:`GET /api/test-results/{result_id}`
|
||||
- 创建测试结果:`POST /api/test-results/`
|
||||
- 更新测试结果:`PUT /api/test-results/{result_id}`
|
||||
- 删除测试结果:`DELETE /api/test-results/{result_id}`
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
### 1. Pydantic警告
|
||||
|
||||
启动时可能会看到以下警告(不影响运行):
|
||||
```
|
||||
Field "model_base" has conflict with protected namespace "model_".
|
||||
Field "model_version" has conflict with protected namespace "model_".
|
||||
```
|
||||
|
||||
这是Pydantic的警告,不影响功能。如需消除警告,可以在相关schema中添加:
|
||||
```python
|
||||
model_config = ConfigDict(protected_namespaces=())
|
||||
```
|
||||
|
||||
### 2. 路径问题
|
||||
|
||||
如果遇到模块导入错误,确保:
|
||||
- 在项目根目录(AI4SE-survey)运行
|
||||
- Python路径包含项目根目录
|
||||
|
||||
### 3. 端口占用
|
||||
|
||||
如果8000端口被占用,可以修改端口:
|
||||
```python
|
||||
# 在 run.py 或 start_api.py 中修改
|
||||
uvicorn.run(..., port=8001) # 改为其他端口
|
||||
```
|
||||
|
||||
## 🐛 常见问题
|
||||
|
||||
### 问题1:ModuleNotFoundError: No module named 'api'
|
||||
|
||||
**解决方案**:
|
||||
1. 确保在项目根目录(AI4SE-survey)运行
|
||||
2. 检查Python路径:
|
||||
```python
|
||||
import sys
|
||||
print(sys.path)
|
||||
```
|
||||
|
||||
### 问题2:端口已被占用
|
||||
|
||||
**解决方案**:
|
||||
1. 查找占用端口的进程:
|
||||
```bash
|
||||
netstat -ano | findstr :8000
|
||||
```
|
||||
2. 结束进程或修改端口
|
||||
|
||||
### 问题3:依赖未安装
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## 📝 下一步
|
||||
|
||||
1. **访问API文档**:打开 http://localhost:8000/docs 查看所有接口
|
||||
2. **测试接口**:在Swagger UI中直接测试各个接口
|
||||
3. **查看工具数据**:访问 `/api/tools/` 查看工具列表
|
||||
4. **查看测试任务**:访问 `/api/test-tasks/` 查看测试任务
|
||||
|
||||
## 🔗 相关文档
|
||||
|
||||
- [API详细文档](./README.md)
|
||||
- [项目README](../README.md)
|
||||
|
||||
---
|
||||
|
||||
**提示**:如果遇到任何问题,请检查:
|
||||
1. 依赖是否已安装:`pip list | findstr fastapi`
|
||||
2. 代码是否有语法错误:`python -c "from api.main import app"`
|
||||
3. 端口是否被占用:`netstat -ano | findstr :8000`
|
||||
|
||||
|
|
@ -15,6 +15,7 @@ app = FastAPI(
|
|||
version=__version__,
|
||||
docs_url="/docs",
|
||||
redoc_url="/redoc",
|
||||
openapi_url="/openapi.json", # 明确指定OpenAPI JSON路径
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
from datetime import datetime
|
||||
from typing import List, Optional, Dict, Any
|
||||
from enum import Enum
|
||||
from pydantic import BaseModel, Field, HttpUrl
|
||||
from pydantic import BaseModel, Field, HttpUrl, ConfigDict
|
||||
|
||||
|
||||
class ToolType(str, Enum):
|
||||
|
|
@ -75,6 +75,9 @@ class WebsiteInfo(BaseModel):
|
|||
|
||||
class ToolBase(BaseModel):
|
||||
"""工具基础模型"""
|
||||
# 禁用受保护命名空间检查,允许使用 model_ 开头的字段名
|
||||
model_config = ConfigDict(protected_namespaces=())
|
||||
|
||||
name: str = Field(..., description="工具名称")
|
||||
type: ToolType = Field(..., description="工具类型")
|
||||
category: str = Field(..., description="工具分类")
|
||||
|
|
@ -82,7 +85,7 @@ class ToolBase(BaseModel):
|
|||
website: Optional[WebsiteInfo] = None
|
||||
pricing: Optional[PricingInfo] = None
|
||||
model_base: Optional[str] = Field(None, description="底层模型,如GPT-4、CodeLlama等")
|
||||
model_version: Optional[str] = None
|
||||
model_version: Optional[str] = Field(None, description="模型版本")
|
||||
language_support: Optional[LanguageSupport] = None
|
||||
deployment: Optional[DeploymentType] = None
|
||||
version: Optional[VersionInfo] = None
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ class ToolService:
|
|||
"""获取所有工具"""
|
||||
tools = self._load_tools()
|
||||
|
||||
tool_list = [ToolOverview(**tool.dict()) for tool in tools.values()]
|
||||
tool_list = [ToolOverview(**tool.model_dump()) for tool in tools.values()]
|
||||
|
||||
# 应用筛选
|
||||
if filter_params:
|
||||
|
|
@ -239,7 +239,7 @@ class ToolService:
|
|||
"""根据分类获取工具"""
|
||||
tools = self._load_tools()
|
||||
return [
|
||||
ToolOverview(**tool.dict())
|
||||
ToolOverview(**tool.model_dump())
|
||||
for tool in tools.values()
|
||||
if tool.category == category
|
||||
]
|
||||
|
|
@ -248,7 +248,7 @@ class ToolService:
|
|||
"""根据类型获取工具"""
|
||||
tools = self._load_tools()
|
||||
return [
|
||||
ToolOverview(**tool.dict())
|
||||
ToolOverview(**tool.model_dump())
|
||||
for tool in tools.values()
|
||||
if tool.type == tool_type
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in New Issue