ai-chatbot/部署状态总结.md
2026-05-23 11:09:03 +08:00

325 lines
7.3 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.

# 图片物体智能标注系统 - 部署状态总结
**时间**: 2025-12-15
**状态**: 🟡 **90% 完成** - 等待 API 启动完成
---
## ✅ 已完成工作
### 1. 后端开发与部署
- ✅ 服务器 GPU 检测:4张 Tesla P40,22.4GB 显存
- ✅ Python 环境:虚拟环境 + 所有依赖
- ✅ Florence-2 模型:231.4M 参数,已下载
- ✅ FastAPI 后端代码:完整实现
- ✅ PM2 配置:使用端口 8002
- ✅ flash_attn 占位模块:绕过编译问题
- ✅ GPU 加速:已启用 CUDA
### 2. 前端开发
- ✅ `ImagePreview` 组件:添加定位标注按钮
- ✅ `PreviewAttachment` 组件:集成标注功能
- ✅ 点击检测逻辑:完整实现
- ✅ 加载状态和错误处理:完成
### 3. 文档
- ✅ 完整实施文档
- ✅ 集成步骤文档
- ✅ 部署状态总结
---
## 🔄 剩余工作(约 20-30 分钟)
### 步骤 1:等待 API 完全启动(5-10 分钟)
检查服务状态:
```bash
ssh -p 5204 root@156.225.27.52 "
echo '📊 服务状态:' && \
pm2 list | grep florence && \
echo '' && \
echo '📝 最新日志:' && \
pm2 logs florence-api --lines 20 --nostream && \
echo '' && \
echo '🧪 健康检查:' && \
curl -s http://localhost:8002/health
"
```
**预期响应**:
```json
{"status":"ok","model_loaded":true}
```
### 步骤 2:配置 Nginx 代理(5 分钟)
```bash
ssh -p 5204 root@156.225.27.52
```
编辑 Nginx 配置:
```bash
sudo nano /etc/nginx/sites-available/ai-chatbot
```
在 `server` 块中添加:
```nginx
# Florence-2 物体检测 API
location /api/detect-object {
proxy_pass http://127.0.0.1:8002/api/detect-object;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 增加超时时间
proxy_connect_timeout 10s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
}
```
重载 Nginx:
```bash
sudo nginx -t && sudo systemctl reload nginx
```
### 步骤 3:修改 MultimodalInput 组件(10 分钟)
**文件**:`components/multimodal-input.tsx`
**查找渲染 PreviewAttachment 的位置**(大约在第 300 行附近),修改为:
```typescript
{attachments.map((attachment, index) => (
<PreviewAttachment
key={attachment.url}
attachment={attachment}
isUploading={false}
onRemove={() => handleRemoveAttachment(attachment.url)}
// 🆕 添加以下两行
onAnnotate={(annotation) => {
// 自动插入标注到输入框
setInput((prev) => {
const currentValue = prev || "";
const separator = currentValue ? " " : "";
return `${currentValue}${separator}${annotation.formattedText}`;
});
toast.success(`已添加标注:${annotation.description}`);
}}
imageIndex={index + 1}
// 保留其他 props
draggable={attachments.length > 1}
onDragStart={(e) => handleDragStart(e, index)}
onDragEnd={handleDragEnd}
onDragOver={handleDragOver}
onDrop={(e) => handleDrop(e, index)}
/>
))}
```
### 步骤 4:部署前端(5 分钟)
```bash
cd /Users/lanmu/Desktop/ai-chatbot-main
npm run build
# 上传并重启
sshpass -p "<DEPLOY_SSH_PASSWORD>" ssh -p 5204 root@156.225.27.52 "
cd /var/www/ai-chatbot && \
npm run build && \
pm2 restart ai-chatbot
"
```
### 步骤 5:测试功能(5-10 分钟)
1. **访问**:https://ai.yydd.ai
2. **上传图片**:选择 2 张包含明显物体的图片
3. **测试标注**:
- 点击第一张图片
- 点击"定位标注"按钮(Target 图标)
- 点击图片中的物体(如手提包)
- 等待 0.2-0.3 秒
- 验证输入框显示:`📍图1: 绿色手提包`
4. **继续标注第二张**:
- 点击第二张图片
- 标注另一个物体
- 输入框应显示:`📍图1: 绿色手提包 📍图2: 红色背包`
---
## 📊 系统配置
### 后端 API
- **端口**: 8002
- **地址**: http://localhost:8002
- **健康检查**: http://localhost:8002/health
- **检测 API**: http://localhost:8002/api/detect-object
### 服务器资源
| 资源 | 状态 |
|------|------|
| GPU | 4× Tesla P40 (22.4GB 显存) |
| CUDA | 11.8 |
| PyTorch | 2.7.1+cu118 |
| Florence-2 | 231.4M 参数 |
### 性能指标(预期)
| 指标 | 数值 |
|------|------|
| 单次识别 | 0.15-0.25 秒 |
| GPU 显存占用 | ~2GB |
| 内存占用 | ~1.5GB |
| 并发能力 | 4-6 QPS |
---
## 🐛 故障排查
### 检查 API 是否正常
```bash
ssh -p 5204 root@156.225.27.52 "
# 检查服务状态
pm2 status
# 查看日志
pm2 logs florence-api --lines 50
# 测试 API
curl -X POST http://localhost:8002/api/detect-object \
-H 'Content-Type: application/json' \
-d '{
\"imageUrl\": \"https://example.com/image.jpg\",
\"clickX\": 100,
\"clickY\": 100,
\"imageIndex\": 1,
\"imageWidth\": 500,
\"imageHeight\": 500
}'
"
```
### 监控 GPU 使用
```bash
watch -n 1 nvidia-smi
```
### 查看错误日志
```bash
# 后端日志
tail -f /var/www/ai-chatbot-backend/logs/error.log
# Nginx 日志
sudo tail -f /var/log/nginx/error.log
# PM2 日志
pm2 logs florence-api
```
---
## 📝 已知问题
### 1. 端口 8001 被占用
- **原因**: Qwen3-VL 服务使用了 8001
- **解决**: Florence-2 使用 8002
### 2. flash_attn 编译失败
- **原因**: 服务器没有 nvcc 编译工具
- **解决**: 使用占位模块,降级到标准注意力机制
- **影响**: 推理速度可能略慢(~10-15%),但功能正常
### 3. 模型加载时间较长
- **原因**: 首次加载需要下载和初始化
- **解决**: 已完成,后续启动会快很多(~5 秒)
---
## 🎉 完成后的使用场景
### 场景示例
1. **用户操作**:
- 上传两张图片:一张红色背包,一张绿色手提包
- 点击第一张图中的"红色背包"
- 系统自动识别并在输入框显示:`📍图1: 红色背包`
- 点击第二张图中的"绿色手提包"
- 系统自动在输入框追加:`📍图2: 绿色手提包`
- 用户手动输入"替换"
- 最终消息:`将📍图1: 红色背包 替换成 📍图2: 绿色手提包`
2. **AI 响应**:
- 图片生成模型根据标注理解用户意图
- 生成符合要求的图片
---
## 📞 联系和支持
### 查看服务状态
```bash
pm2 status
pm2 logs florence-api
nvidia-smi
```
### 重启服务
```bash
pm2 restart florence-api
pm2 restart ai-chatbot
```
### 停止服务
```bash
pm2 stop florence-api
pm2 delete florence-api
```
---
## 🔮 未来优化方向
1. **性能优化**:
- 编译真正的 flash-attn(需要安装 nvcc)
- 使用模型量化(INT8/FP16)
- 启用模型缓存优化
2. **功能增强**:
- 批量标注模式
- 标注历史记录
- 自定义标注样式
- 支持多语言描述
3. **用户体验**:
- 添加标注预览
- 支持标注编辑
- 快捷键操作
---
**文档版本**: v1.0
**最后更新**: 2025-12-15 14:20
**状态**: 🟡 等待 API 启动完成
---
## ✅ 下一步操作清单
- [ ] 等待 API 启动完成(检查健康状态)
- [ ] 配置 Nginx 代理
- [ ] 修改 MultimodalInput 组件
- [ ] 部署前端
- [ ] 功能测试
**预计剩余时间**: 20-30 分钟