- replace in-process Milvus stack with PyRagClient + PyRagKnowledgeSearchAdapter behind KnowledgeSearchPort (RERANK score passthrough) - move document ingest to py-rag /documents:ingest; DocumentManagementService keeps MySQL ledger + local files - sink L0 query understanding to py-rag; drop KnowledgeQueryTransformer, single UNFILTERED_VECTOR attempt - remove Milvus deps, config classes, dead demo services and obsolete rebuild scripts - compose/Makefile reduced to MySQL/Redis; add pyrag.* config
231 lines
8.1 KiB
Makefile
231 lines
8.1 KiB
Makefile
# SuperBizAgent Makefile
|
||
# 用于自动化项目初始化和文档向量化
|
||
|
||
# 配置变量
|
||
SERVER_URL = http://localhost:9900
|
||
UPLOAD_API = $(SERVER_URL)/api/upload
|
||
DOCS_DIR = aiops-docs
|
||
# 服务就绪探测:9900 端口有 HTTP 响应即视为就绪
|
||
HEALTH_CHECK = curl -s -o /dev/null --connect-timeout 2 $(SERVER_URL)
|
||
DOCKER_COMPOSE_FILE = docker-compose.yml
|
||
|
||
# 颜色输出
|
||
GREEN = \033[0;32m
|
||
YELLOW = \033[0;33m
|
||
RED = \033[0;31m
|
||
NC = \033[0m # No Color
|
||
|
||
.PHONY: help init start stop restart check upload clean up down status wait
|
||
|
||
# 默认目标:显示帮助信息
|
||
help:
|
||
@echo "$(GREEN)SuperBizAgent Makefile$(NC)"
|
||
@echo ""
|
||
@echo "可用命令:"
|
||
@echo " $(YELLOW)make init$(NC) - 🚀 一键初始化(启动Docker → 启动服务 → 上传文档)"
|
||
@echo " $(YELLOW)make up$(NC) - 启动 Docker Compose(MySQL/Redis)"
|
||
@echo " $(YELLOW)make down$(NC) - 停止 Docker Compose"
|
||
@echo " $(YELLOW)make status$(NC) - 查看 Docker 容器状态"
|
||
@echo " $(YELLOW)make start$(NC) - 启动 Spring Boot 服务(后台运行)"
|
||
@echo " $(YELLOW)make stop$(NC) - 停止 Spring Boot 服务"
|
||
@echo " $(YELLOW)make restart$(NC) - 重启 Spring Boot 服务"
|
||
@echo " $(YELLOW)make check$(NC) - 检查服务器是否运行"
|
||
@echo " $(YELLOW)make upload$(NC) - 上传 aiops-docs 目录下的所有文档"
|
||
@echo " $(YELLOW)make clean$(NC) - 清理临时文件"
|
||
@echo ""
|
||
@echo "使用示例:"
|
||
@echo " 1. 一键初始化: make init"
|
||
@echo " 2. 手动启动: make up && make start && make upload"
|
||
@echo " 3. 停止服务: make stop && make down"
|
||
|
||
# 一键初始化:启动Docker → 启动服务 → 检查服务 → 上传文档
|
||
init:
|
||
@echo "$(GREEN)🚀 开始一键初始化 SuperBizAgent...$(NC)"
|
||
@echo ""
|
||
@echo "$(YELLOW)步骤 1/4: 启动 Docker Compose(MySQL/Redis)$(NC)"
|
||
@$(MAKE) up
|
||
@echo ""
|
||
@echo "$(YELLOW)步骤 2/4: 启动 Spring Boot 服务$(NC)"
|
||
@$(MAKE) start
|
||
@echo ""
|
||
@echo "$(YELLOW)步骤 3/4: 等待服务就绪$(NC)"
|
||
@$(MAKE) wait
|
||
@echo ""
|
||
@echo "$(YELLOW)步骤 4/4: 上传 AIOps 文档(经 py-rag 入库)$(NC)"
|
||
@$(MAKE) upload
|
||
@echo ""
|
||
@echo "$(GREEN)═══════════════════════════════════════════════════════$(NC)"
|
||
@echo "$(GREEN)✅ 初始化完成!所有文档已成功入库(py-rag)$(NC)"
|
||
@echo "$(GREEN)═══════════════════════════════════════════════════════$(NC)"
|
||
@echo ""
|
||
@echo "$(GREEN)🌐 服务访问地址:$(NC)"
|
||
@echo " API 服务: $(SERVER_URL)"
|
||
@echo "$(YELLOW)💡 提示: 知识检索/入库由 py-rag 服务承担,请在其仓库单独启动$(NC)"
|
||
@echo ""
|
||
@echo "$(YELLOW)💡 提示: 服务正在后台运行,查看日志: tail -f server.log$(NC)"
|
||
|
||
# 启动 Spring Boot 服务(后台运行)
|
||
start:
|
||
@echo "$(YELLOW)🚀 启动 Spring Boot 服务...$(NC)"
|
||
@if curl -s -o /dev/null --connect-timeout 2 $(SERVER_URL); then \
|
||
echo "$(GREEN)✅ 服务已经在运行中 ($(SERVER_URL))$(NC)"; \
|
||
else \
|
||
echo "$(YELLOW)📦 正在启动服务(后台运行)...$(NC)"; \
|
||
nohup mvn spring-boot:run > server.log 2>&1 & \
|
||
echo $$! > server.pid; \
|
||
echo "$(GREEN)✅ 服务启动命令已执行$(NC)"; \
|
||
echo "$(YELLOW) PID: $$(cat server.pid)$(NC)"; \
|
||
echo "$(YELLOW) 日志文件: server.log$(NC)"; \
|
||
fi
|
||
|
||
# 等待服务器就绪(最多等待 60 秒)
|
||
wait:
|
||
@echo "$(YELLOW)⏳ 等待服务器就绪...$(NC)"
|
||
@max_attempts=60; \
|
||
attempt=0; \
|
||
while [ $$attempt -lt $$max_attempts ]; do \
|
||
if curl -s -o /dev/null --connect-timeout 2 $(SERVER_URL); then \
|
||
echo "$(GREEN)✅ 服务器已就绪!($(SERVER_URL))$(NC)"; \
|
||
exit 0; \
|
||
fi; \
|
||
attempt=$$((attempt + 1)); \
|
||
printf "$(YELLOW) 等待中... [$$attempt/$$max_attempts]$(NC)\r"; \
|
||
sleep 1; \
|
||
done; \
|
||
echo ""; \
|
||
echo "$(RED)❌ 服务器启动超时!$(NC)"; \
|
||
echo "$(YELLOW)请检查日志: tail -f server.log$(NC)"; \
|
||
exit 1
|
||
|
||
# 检查服务器是否运行
|
||
check:
|
||
@echo "$(YELLOW)🔍 检查服务器状态...$(NC)"
|
||
@if curl -s -o /dev/null --connect-timeout 2 $(SERVER_URL); then \
|
||
echo "$(GREEN)✅ 服务器运行正常 ($(SERVER_URL))$(NC)"; \
|
||
else \
|
||
echo "$(RED)❌ 服务器未运行或无法连接!$(NC)"; \
|
||
echo "$(YELLOW)请先启动项目: mvn spring-boot:run$(NC)"; \
|
||
exit 1; \
|
||
fi
|
||
|
||
# 上传所有文档
|
||
upload:
|
||
@echo "$(YELLOW)📤 开始上传 $(DOCS_DIR) 目录下的文档...$(NC)"
|
||
@if [ ! -d "$(DOCS_DIR)" ]; then \
|
||
echo "$(RED)❌ 目录 $(DOCS_DIR) 不存在!$(NC)"; \
|
||
exit 1; \
|
||
fi
|
||
@count=0; \
|
||
success=0; \
|
||
failed=0; \
|
||
for file in $(DOCS_DIR)/*.md; do \
|
||
if [ -f "$$file" ]; then \
|
||
count=$$((count + 1)); \
|
||
filename=$$(basename "$$file"); \
|
||
echo "$(YELLOW) [$$count] 上传文件: $$filename$(NC)"; \
|
||
response=$$(curl -s -w "\n%{http_code}" -X POST $(UPLOAD_API) \
|
||
-F "file=@$$file" \
|
||
-H "Accept: application/json"); \
|
||
http_code=$$(echo "$$response" | tail -n1); \
|
||
body=$$(echo "$$response" | sed '$$d'); \
|
||
if [ "$$http_code" = "200" ]; then \
|
||
echo "$(GREEN) ✅ 成功: $$filename$(NC)"; \
|
||
success=$$((success + 1)); \
|
||
else \
|
||
echo "$(RED) ❌ 失败: $$filename (HTTP $$http_code)$(NC)"; \
|
||
echo "$$body" | head -n 3; \
|
||
failed=$$((failed + 1)); \
|
||
fi; \
|
||
sleep 1; \
|
||
fi; \
|
||
done; \
|
||
echo ""; \
|
||
echo "$(GREEN)📊 上传统计:$(NC)"; \
|
||
echo " 总计: $$count 个文件"; \
|
||
echo " $(GREEN)成功: $$success$(NC)"; \
|
||
if [ $$failed -gt 0 ]; then \
|
||
echo " $(RED)失败: $$failed$(NC)"; \
|
||
fi
|
||
|
||
# 停止 Spring Boot 服务
|
||
stop:
|
||
@echo "$(YELLOW)🛑 停止 Spring Boot 服务...$(NC)"
|
||
@if [ -f server.pid ]; then \
|
||
pid=$$(cat server.pid); \
|
||
if ps -p $$pid > /dev/null 2>&1; then \
|
||
kill $$pid; \
|
||
echo "$(GREEN)✅ 服务已停止 (PID: $$pid)$(NC)"; \
|
||
else \
|
||
echo "$(YELLOW)⚠️ 进程不存在 (PID: $$pid)$(NC)"; \
|
||
fi; \
|
||
rm -f server.pid; \
|
||
else \
|
||
echo "$(YELLOW)⚠️ 未找到 server.pid 文件$(NC)"; \
|
||
pkill -f "spring-boot:run" && echo "$(GREEN)✅ 已停止所有 spring-boot 进程$(NC)" || echo "$(YELLOW)⚠️ 没有运行中的 spring-boot 进程$(NC)"; \
|
||
fi
|
||
|
||
# 重启 Spring Boot 服务
|
||
restart:
|
||
@echo "$(YELLOW)🔄 重启 Spring Boot 服务...$(NC)"
|
||
@echo ""
|
||
@echo "$(YELLOW)步骤 1/2: 停止服务$(NC)"
|
||
@$(MAKE) stop
|
||
@echo ""
|
||
@echo "$(YELLOW)步骤 2/2: 启动服务$(NC)"
|
||
@$(MAKE) start
|
||
@echo ""
|
||
@$(MAKE) wait
|
||
@echo ""
|
||
@echo "$(GREEN)✅ 服务重启完成!$(NC)"
|
||
|
||
# 清理临时文件
|
||
clean:
|
||
@echo "$(YELLOW)🧹 清理临时文件...$(NC)"
|
||
@rm -rf uploads/*.tmp
|
||
@rm -f server.pid server.log
|
||
@echo "$(GREEN)✅ 清理完成$(NC)"
|
||
|
||
# 显示文档列表
|
||
list-docs:
|
||
@echo "$(YELLOW)📚 $(DOCS_DIR) 目录下的文档:$(NC)"
|
||
@if [ -d "$(DOCS_DIR)" ]; then \
|
||
ls -lh $(DOCS_DIR)/*.md 2>/dev/null || echo "$(RED)没有找到 .md 文件$(NC)"; \
|
||
else \
|
||
echo "$(RED)目录 $(DOCS_DIR) 不存在$(NC)"; \
|
||
fi
|
||
|
||
# 测试单个文件上传
|
||
test-upload:
|
||
@echo "$(YELLOW)🧪 测试上传单个文件...$(NC)"
|
||
@if [ -f "$(DOCS_DIR)/cpu_high_usage.md" ]; then \
|
||
curl -X POST $(UPLOAD_API) \
|
||
-F "file=@$(DOCS_DIR)/cpu_high_usage.md" \
|
||
-H "Accept: application/json" | jq .; \
|
||
else \
|
||
echo "$(RED)测试文件不存在$(NC)"; \
|
||
fi
|
||
|
||
# 启动 Docker Compose(MySQL/Redis;py-rag 服务在其仓库单独启动)
|
||
up:
|
||
@echo "$(YELLOW)🐳 启动 Docker Compose(MySQL/Redis)...$(NC)"
|
||
@if [ ! -f "$(DOCKER_COMPOSE_FILE)" ]; then \
|
||
echo "$(RED)❌ Docker Compose 文件不存在: $(DOCKER_COMPOSE_FILE)$(NC)"; \
|
||
exit 1; \
|
||
fi
|
||
@docker-compose -f $(DOCKER_COMPOSE_FILE) up -d && echo "$(GREEN)✅ Docker Compose 启动完成$(NC)"
|
||
|
||
# 停止 Docker Compose
|
||
down:
|
||
@echo "$(YELLOW)🛑 停止 Docker Compose...$(NC)"
|
||
@if [ ! -f "$(DOCKER_COMPOSE_FILE)" ]; then \
|
||
echo "$(RED)❌ Docker Compose 文件不存在: $(DOCKER_COMPOSE_FILE)$(NC)"; \
|
||
exit 1; \
|
||
fi
|
||
@docker-compose -f $(DOCKER_COMPOSE_FILE) down && echo "$(GREEN)✅ Docker Compose 已停止$(NC)"
|
||
|
||
# 查看 Docker 容器状态
|
||
status:
|
||
@echo "$(YELLOW)📊 Docker 容器状态:$(NC)"
|
||
@echo ""
|
||
@docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|