Files
freedak 641e33b834 feat: QYLAW 法律法规知识库
- 语义检索(FAISS + embedding)+ 精确查找(法规名+条号)
- RAG 问答(SSE 流式,支持 thinking 折叠显示)
- 法规浏览(原文阅读)
- 历史记录(检索+对话持久化到 SQLite)
- 设置页(系统提示词/模板/LLM 参数可配置)
- 检索质量评估脚本

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-07 14:55:25 +08:00

108 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# QYLAW 部署脚本 — 传输数据 + 构建镜像 + 启动容器
# 用法: bash scripts/deploy.sh
set -e
# ===== 配置 =====
REMOTE_HOST="nvidia@192.168.110.114"
REMOTE_LAW_PACK="/data/law-pack-2026-07-01-markdown"
REMOTE_LAW_KB_DATA="/data/law-kb-data"
LOCAL_LAW_PACK="/Users/freedak/Documents/AIDashboard/qy123/law-pack-2026-07-01-markdown"
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
echo "============================================"
echo " QYLAW 法律法规知识库部署"
echo " 时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "============================================"
# ===== Step 1: 传输法规数据(若 114 上不存在)=====
echo ""
echo "[Step 1] 检查并传输法规数据..."
ssh "$REMOTE_HOST" "test -d $REMOTE_LAW_PACK && echo EXISTS || echo MISSING"
LAW_PACK_STATUS=$(ssh "$REMOTE_HOST" "test -d $REMOTE_LAW_PACK && echo EXISTS || echo MISSING")
if [ "$LAW_PACK_STATUS" = "MISSING" ]; then
echo " 法规数据不存在,开始 rsync 传输(310MB)..."
if [ ! -d "$LOCAL_LAW_PACK" ]; then
echo " [错误] 本地法规数据不存在: $LOCAL_LAW_PACK"
exit 1
fi
rsync -avz --progress "$LOCAL_LAW_PACK/" "$REMOTE_HOST:$REMOTE_LAW_PACK/"
echo " [OK] 法规数据传输完成"
else
echo " [OK] 法规数据已存在,跳过传输"
fi
# ===== Step 2: 创建索引数据目录 =====
echo ""
echo "[Step 2] 创建索引数据目录..."
ssh "$REMOTE_HOST" "mkdir -p $REMOTE_LAW_KB_DATA/faiss $REMOTE_LAW_KB_DATA/logs"
echo " [OK] 目录就绪"
# ===== Step 3: 传输项目代码并构建镜像 =====
echo ""
echo "[Step 3] 传输代码并构建 Docker 镜像..."
ssh "$REMOTE_HOST" "mkdir -p /data/project/law-kb"
rsync -avz --exclude '__pycache__' --exclude '.git' --exclude 'law-kb-data' \
"$PROJECT_DIR/" "$REMOTE_HOST:/data/project/law-kb/"
echo " 构建 Docker 镜像..."
ssh "$REMOTE_HOST" "cd /data/project/law-kb && docker build -t law-kb:latest ."
echo " [OK] 镜像构建完成"
# ===== Step 4: 停止旧容器(若存在)=====
echo ""
echo "[Step 4] 停止旧容器..."
ssh "$REMOTE_HOST" "docker rm -f law-kb 2>/dev/null || true"
echo " [OK] 旧容器已清理"
# ===== Step 5: 启动新容器 =====
echo ""
echo "[Step 5] 启动 law-kb 容器..."
ssh "$REMOTE_HOST" "
docker run -d --name law-kb --network host --restart unless-stopped \
-v $REMOTE_LAW_PACK:$REMOTE_LAW_PACK:ro \
-v $REMOTE_LAW_KB_DATA:$REMOTE_LAW_KB_DATA \
-e LAW_PACK_DIR=$REMOTE_LAW_PACK \
-e LAW_KB_DATA_DIR=$REMOTE_LAW_KB_DATA \
-e EMBEDDING_URL=http://localhost:8003/v1 \
-e LLM_URL=http://localhost:7000/v1 \
law-kb:latest
"
echo " [OK] 容器已启动"
# ===== Step 6: 健康检查 =====
echo ""
echo "[Step 6] 健康检查..."
sleep 3
echo " 等待服务启动..."
for i in $(seq 1 10); do
HEALTH=$(ssh "$REMOTE_HOST" "curl -s -o /dev/null -w '%{http_code}' http://localhost:8090/health 2>/dev/null || echo 000")
if [ "$HEALTH" = "200" ]; then
echo " [OK] 服务健康(尝试 $i)"
break
fi
echo " 等待中...($i/10, HTTP $HEALTH)"
sleep 2
done
# 统计
echo ""
echo " 索引状态:"
ssh "$REMOTE_HOST" "curl -s http://localhost:8090/api/stats 2>/dev/null | python3 -m json.tool 2>/dev/null || echo ' 统计接口未就绪(可能需要先构建索引)'"
echo ""
echo "============================================"
echo " 部署完成!"
echo " 访问: http://192.168.110.114:8090"
echo ""
echo " 下一步:"
echo " 1. 若索引未构建,执行:"
echo " ssh $REMOTE_HOST"
echo " docker run --rm --network host \\"
echo " -v $REMOTE_LAW_PACK:$REMOTE_LAW_PACK:ro \\"
echo " -v $REMOTE_LAW_KB_DATA:$REMOTE_LAW_KB_DATA \\"
echo " law-kb:latest python scripts/build_index.py --mode full"
echo " 2. 构建完成后重启容器: docker restart law-kb"
echo "============================================"