feat: update Python processors and add utility scripts

- Update ASR, face, OCR, pose processors
- Add release pre-flight check script
- Add synonym generation, chunk processing scripts
- Add face recognition, stamp search utilities
This commit is contained in:
Warren
2026-04-30 15:07:49 +08:00
parent f4697396e4
commit 8f05a7c188
256 changed files with 60505 additions and 299 deletions

View File

@@ -0,0 +1,294 @@
#!/bin/bash
# AI Agent 標準化命令接口
# 提供安全的、可預測的命令執行
set -e
VERSION="1.0.0"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日誌函數
log_info() {
echo -e "${BLUE} INFO:${NC} $1"
}
log_success() {
echo -e "${GREEN}✅ SUCCESS:${NC} $1"
}
log_warning() {
echo -e "${YELLOW}⚠️ WARNING:${NC} $1"
}
log_error() {
echo -e "${RED}❌ ERROR:${NC} $1"
}
# 顯示幫助
show_help() {
echo "Momentry Core AI Agent 命令接口 v$VERSION"
echo ""
echo "用法: ./agent_commands.sh <命令> [參數]"
echo ""
echo "可用命令:"
echo " check-status 檢查系統狀態 (只讀)"
echo " dry-run-deploy 部署乾運行模擬"
echo " test-development 啟動開發測試 (port 3003)"
echo " verify-production 驗證生產環境 (port 3002)"
echo " health-check 執行健康檢查"
echo " list-ports 列出端口使用情況"
echo " version 顯示版本信息"
echo " help 顯示此幫助"
echo ""
echo "示例:"
echo " ./agent_commands.sh check-status"
echo " ./agent_commands.sh dry-run-deploy"
echo " ./agent_commands.sh test-development"
echo ""
echo "安全特性:"
echo " • 所有操作都經過安全檢查"
echo " • 生產操作需要明確確認"
echo " • 提供乾運行模式"
}
# 命令:檢查狀態
command_check_status() {
log_info "執行系統狀態檢查..."
"$SCRIPT_DIR/validate_environment.sh"
log_success "狀態檢查完成"
}
# 命令:部署乾運行
command_dry_run_deploy() {
log_info "執行部署乾運行模擬..."
"$SCRIPT_DIR/deploy_dry_run.sh"
log_success "乾運行模擬完成"
}
# 命令:測試開發
command_test_development() {
log_info "準備開發環境測試 (port 3003)..."
# 檢查 port 3003 是否可用
if lsof -ti:3003 >/dev/null 2>&1; then
log_warning "port 3003 已被佔用"
echo "佔用進程:"
ps -p $(lsof -ti:3003) -o pid,command 2>/dev/null || true
read -p "是否停止這些進程?(y/N): " CONFIRM
if [ "$CONFIRM" = "y" ] || [ "$CONFIRM" = "Y" ]; then
kill $(lsof -ti:3003) 2>/dev/null || true
sleep 2
log_success "已停止 port 3003 進程"
else
log_error "取消操作"
exit 1
fi
fi
# 檢查開發二進制文件
if [ ! -f "/Users/accusys/momentry_core_0.1/target/release/momentry_playground" ]; then
log_warning "開發二進制文件不存在"
echo "請先構建: cargo build --release --bin momentry_playground"
read -p "是否立即構建?(y/N): " BUILD_CONFIRM
if [ "$BUILD_CONFIRM" = "y" ] || [ "$BUILD_CONFIRM" = "Y" ]; then
log_info "構建開發二進制文件..."
cd /Users/accusys/momentry_core_0.1
cargo build --release --bin momentry_playground
log_success "構建完成"
else
log_error "需要開發二進制文件才能繼續"
exit 1
fi
fi
# 檢查開發配置文件
if [ ! -f "/Users/accusys/momentry_core_0.1/.env.development" ]; then
log_warning "開發配置文件不存在 (.env.development)"
echo "將使用默認配置"
fi
log_info "啟動開發服務器..."
echo "執行命令:"
echo " cd /Users/accusys/momentry_core_0.1"
echo " source .env.development"
echo " cargo run --bin momentry_playground -- server"
echo ""
read -p "是否立即啟動?(y/N): " START_CONFIRM
if [ "$CONFIRM" = "y" ] || [ "$CONFIRM" = "Y" ]; then
cd /Users/accusys/momentry_core_0.1
source .env.development 2>/dev/null || true
cargo run --bin momentry_playground -- server
else
log_info "取消啟動,顯示命令供手動執行"
fi
log_success "開發測試準備完成"
}
# 命令:驗證生產
command_verify_production() {
log_info "驗證生產環境 (port 3002)..."
# 檢查是否有生產服務運行
if ! lsof -ti:3002 >/dev/null 2>&1; then
log_error "未找到運行在 port 3002 的生產服務"
exit 1
fi
log_info "執行健康檢查..."
MAX_RETRIES=3
for i in $(seq 1 $MAX_RETRIES); do
echo "嘗試 $i/$MAX_RETRIES..."
if curl -f -s -o /dev/null --max-time 5 "http://localhost:3002/api/v1/health"; then
log_success "生產服務健康 (HTTP 200 OK)"
# 獲取更多信息
echo ""
echo "生產服務信息:"
echo " PID: $(lsof -ti:3002)"
echo " 命令: $(ps -p $(lsof -ti:3002) -o command= 2>/dev/null || echo '未知')"
echo " 啟動時間: $(ps -p $(lsof -ti:3002) -o lstart= 2>/dev/null || echo '未知')"
# 測試搜索端點(只讀)
log_info "測試搜索端點 (只讀)..."
API_KEY_TEST="muser_f44690a514954a2b914e853a57e579de_1774728111_31de409b"
if curl -s -o /dev/null -w "HTTP狀態碼: %{http_code}\n" --max-time 10 \
-H "X-API-Key: $API_KEY_TEST" \
-H "Content-Type: application/json" \
-d '{"query": "test", "limit": 1}' \
"http://localhost:3002/api/v1/n8n/search"; then
log_success "搜索端點正常"
else
log_warning "搜索端點可能異常"
fi
exit 0
fi
if [ $i -lt $MAX_RETRIES ]; then
echo "等待 2 秒後重試..."
sleep 2
fi
done
log_error "生產服務健康檢查失敗"
exit 1
}
# 命令:健康檢查
command_health_check() {
log_info "執行全面健康檢查..."
echo "1. 端口檢查:"
echo " Port 3002 (生產): $(lsof -ti:3002 >/dev/null 2>&1 && echo '✅ 使用中' || echo '❌ 未使用')"
echo " Port 3003 (開發): $(lsof -ti:3003 >/dev/null 2>&1 && echo '✅ 使用中' || echo '✅ 可用')"
echo ""
echo "2. 服務檢查:"
if lsof -ti:3002 >/dev/null 2>&1; then
echo " 生產服務: ✅ 運行中 (PID: $(lsof -ti:3002))"
# 健康檢查
if curl -f -s -o /dev/null --max-time 3 "http://localhost:3002/api/v1/health"; then
echo " 健康狀態: ✅ 正常"
else
echo " 健康狀態: ❌ 異常"
fi
else
echo " 生產服務: ❌ 未運行"
fi
echo ""
echo "3. 二進制文件檢查:"
echo " 生產二進制: $([ -f "/Users/accusys/momentry_core_0.1/target/release/momentry" ] && echo '✅ 存在' || echo '❌ 缺失')"
echo " 開發二進制: $([ -f "/Users/accusys/momentry_core_0.1/target/release/momentry_playground" ] && echo '✅ 存在' || echo '⚠️ 缺失')"
echo ""
echo "4. 配置文件檢查:"
echo " 生產配置: $([ -f "/Users/accusys/momentry_core_0.1/.env" ] && echo '✅ 存在' || echo '❌ 缺失')"
echo " 開發配置: $([ -f "/Users/accusys/momentry_core_0.1/.env.development" ] && echo '✅ 存在' || echo '❌ 缺失')"
log_success "健康檢查完成"
}
# 命令:列出端口
command_list_ports() {
log_info "列出端口使用情況..."
echo "Momentry Core 相關端口:"
echo "----------------------------------------"
# 檢查標準端口
PORTS="3002 3003 5432 6379 27017 6333 3306 8080 8081"
for PORT in $PORTS; do
SERVICE_NAME=""
case $PORT in
3002) SERVICE_NAME="生產API" ;;
3003) SERVICE_NAME="開發API" ;;
5432) SERVICE_NAME="PostgreSQL" ;;
6379) SERVICE_NAME="Redis" ;;
27017) SERVICE_NAME="MongoDB" ;;
6333) SERVICE_NAME="Qdrant" ;;
3306) SERVICE_NAME="MariaDB" ;;
8080) SERVICE_NAME="n8n" ;;
8081) SERVICE_NAME="Gitea" ;;
esac
if lsof -ti:$PORT >/dev/null 2>&1; then
PID=$(lsof -ti:$PORT | head -1)
PROCESS=$(ps -p $PID -o command= 2>/dev/null | cut -c1-50 || echo "未知")
echo "$PORT ($SERVICE_NAME): 使用中"
echo " PID: $PID"
echo " 進程: $PROCESS..."
else
echo "$PORT ($SERVICE_NAME): 未使用"
fi
echo ""
done
log_success "端口列表完成"
}
# 主命令處理
COMMAND="${1:-help}"
case "$COMMAND" in
"check-status" | "status")
command_check_status
;;
"dry-run-deploy" | "dryrun")
command_dry_run_deploy
;;
"test-development" | "test-dev")
command_test_development
;;
"verify-production" | "verify")
command_verify_production
;;
"health-check" | "health")
command_health_check
;;
"list-ports" | "ports")
command_list_ports
;;
"version" | "v")
echo "Momentry Core AI Agent 命令接口 v$VERSION"
;;
"help" | "--help" | "-h")
show_help
;;
*)
log_error "未知命令: $COMMAND"
echo ""
show_help
exit 1
;;
esac

View File

@@ -0,0 +1,204 @@
#!/bin/bash
# Momentry Core 部署乾運行腳本
# 顯示將執行的操作,不實際修改系統
set -e
# 參數處理
MODE="dry-run"
if [ "$1" = "--execute" ] || [ "$1" = "-e" ]; then
MODE="execute"
echo "⚠️ 警告:將實際執行部署操作"
read -p "確認要執行實際部署?(y/N): " CONFIRM
if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then
echo "取消部署"
exit 0
fi
else
echo "🔍 乾運行模式:只顯示將執行的操作"
fi
echo "=== Momentry Core 部署流程 ==="
echo "模式: $MODE"
echo "時間: $(date)"
echo ""
# 1. 檢查當前狀態
echo "步驟 1: 檢查當前狀態"
echo "----------------------------------------"
echo "執行: ./scripts/deployment/safe/validate_environment.sh"
if [ "$MODE" = "execute" ]; then
./scripts/deployment/safe/validate_environment.sh
else
echo " [乾運行] 將執行環境驗證"
fi
echo ""
# 2. 停止生產服務
echo "步驟 2: 停止生產服務"
echo "----------------------------------------"
STOP_CMD="sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist"
echo "執行: $STOP_CMD"
if [ "$MODE" = "execute" ]; then
echo " 🛑 正在停止服務..."
if sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist 2>/dev/null; then
echo " ✅ 服務已停止"
else
echo " ⚠️ 停止服務失敗(可能未運行)"
fi
sleep 2
else
echo " [乾運行] 將停止生產服務"
echo " 注意: 需要 sudo 權限"
fi
echo ""
# 3. 備份當前二進制文件
echo "步驟 3: 備份當前二進制文件"
echo "----------------------------------------"
BACKUP_DIR="/Users/accusys/momentry/backup/$(date +%Y%m%d_%H%M%S)"
BACKUP_CMD="mkdir -p $BACKUP_DIR && cp /usr/local/bin/momentry $BACKUP_DIR/ 2>/dev/null || true"
echo "執行: $BACKUP_CMD"
if [ "$MODE" = "execute" ]; then
echo " 💾 創建備份目錄..."
mkdir -p "$BACKUP_DIR"
if cp /usr/local/bin/momentry "$BACKUP_DIR/" 2>/dev/null; then
echo " ✅ 二進制文件已備份到: $BACKUP_DIR/"
else
echo " ⚠️ 無法備份二進制文件(可能不存在)"
fi
else
echo " [乾運行] 將備份當前二進制文件到: $BACKUP_DIR"
fi
echo ""
# 4. 部署新二進制文件
echo "步驟 4: 部署新二進制文件"
echo "----------------------------------------"
SOURCE_BINARY="/Users/accusys/momentry_core_0.1/target/release/momentry"
TARGET_BINARY="/usr/local/bin/momentry"
DEPLOY_CMD="sudo cp $SOURCE_BINARY $TARGET_BINARY && sudo chmod +x $TARGET_BINARY"
echo "執行: $DEPLOY_CMD"
if [ "$MODE" = "execute" ]; then
echo " 🚀 部署新版本..."
if [ ! -f "$SOURCE_BINARY" ]; then
echo " ❌ 源二進制文件不存在: $SOURCE_BINARY"
echo " 請先執行: cargo build --release --bin momentry"
exit 1
fi
if sudo cp "$SOURCE_BINARY" "$TARGET_BINARY"; then
sudo chmod +x "$TARGET_BINARY"
echo " ✅ 二進制文件已部署到: $TARGET_BINARY"
echo " 文件大小: $(ls -lh "$TARGET_BINARY" | awk '{print $5}')"
else
echo " ❌ 部署失敗"
exit 1
fi
else
echo " [乾運行] 將複製: $SOURCE_BINARY -> $TARGET_BINARY"
echo " 注意: 需要 sudo 權限"
fi
echo ""
# 5. 啟動生產服務
echo "步驟 5: 啟動生產服務"
echo "----------------------------------------"
START_CMD="sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist"
echo "執行: $START_CMD"
if [ "$MODE" = "execute" ]; then
echo " 🚀 啟動服務..."
if sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist; then
echo " ✅ 服務已啟動"
else
echo " ❌ 啟動服務失敗"
exit 1
fi
sleep 3
else
echo " [乾運行] 將啟動生產服務"
echo " 注意: 需要 sudo 權限"
fi
echo ""
# 6. 健康檢查
echo "步驟 6: 健康檢查"
echo "----------------------------------------"
HEALTH_CMD="curl -f -s -o /dev/null -w 'HTTP狀態碼: %{http_code}\\n響應時間: %{time_total}s\\n' --max-time 10 'http://localhost:3002/api/v1/health'"
echo "執行: $HEALTH_CMD"
if [ "$MODE" = "execute" ]; then
echo " 🏥 執行健康檢查..."
MAX_RETRIES=5
RETRY_COUNT=0
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
RETRY_COUNT=$((RETRY_COUNT + 1))
echo " 嘗試 $RETRY_COUNT/$MAX_RETRIES..."
if curl -f -s -o /dev/null -w " HTTP狀態碼: %{http_code}\n 響應時間: %{time_total}s\n" --max-time 10 "http://localhost:3002/api/v1/health"; then
echo " ✅ 健康檢查通過"
break
else
if [ $RETRY_COUNT -eq $MAX_RETRIES ]; then
echo " ❌ 健康檢查失敗,已達到最大重試次數"
echo " 請檢查日誌: /Users/accusys/momentry/log/momentry_api.error.log"
exit 1
fi
echo " ⏳ 等待 3 秒後重試..."
sleep 3
fi
done
else
echo " [乾運行] 將檢查生產服務健康狀態"
echo " 預期: HTTP 200 OK"
fi
echo ""
# 7. 最終驗證
echo "步驟 7: 最終驗證"
echo "----------------------------------------"
VERIFY_CMD="ps aux | grep -E '[m]omentry.*server.*3002'"
echo "執行: $VERIFY_CMD"
if [ "$MODE" = "execute" ]; then
echo " 🔍 驗證服務進程..."
if ps aux | grep -E "[m]omentry.*server.*3002" >/dev/null; then
echo " ✅ 生產服務正在運行 (port 3002)"
else
echo " ❌ 未找到生產服務進程"
exit 1
fi
else
echo " [乾運行] 將驗證服務進程是否存在"
fi
echo ""
echo "=== 部署完成 ==="
if [ "$MODE" = "execute" ]; then
echo "🎉 實際部署已完成!"
echo "📋 摘要:"
echo " - 生產服務已重啟"
echo " - 二進制文件已更新"
echo " - 健康檢查通過"
echo " - 備份保存在: $BACKUP_DIR"
echo ""
echo "🔗 測試鏈接:"
echo " 健康檢查: curl http://localhost:3002/api/v1/health"
echo " 搜索測試: curl -X POST http://localhost:3002/api/v1/n8n/search \\"
echo " -H 'X-API-Key: YOUR_API_KEY' \\"
echo " -H 'Content-Type: application/json' \\"
echo " -d '{\"query\": \"電腦\", \"limit\": 5}'"
else
echo "📋 乾運行完成"
echo "顯示了將執行的所有操作"
echo ""
echo "⚠️ 注意事項:"
echo " 1. 實際執行需要 sudo 權限"
echo " 2. 確保已構建 release 版本: cargo build --release --bin momentry"
echo " 3. 備份將創建在: $BACKUP_DIR"
echo " 4. 服務將短暫中斷(約 10-15 秒)"
echo ""
echo "🚀 要實際執行部署,使用:"
echo " ./scripts/deployment/safe/deploy_dry_run.sh --execute"
echo " 或"
echo " ./scripts/deployment/safe/deploy_dry_run.sh -e"
fi

View File

@@ -0,0 +1,109 @@
#!/bin/bash
# 只讀操作,不修改任何文件
# 用於驗證 Momentry Core 環境狀態
set -e
echo "=== Momentry Core Environment Validation ==="
echo "執行時間: $(date)"
echo ""
echo "1. 📡 檢查端口佔用狀態:"
echo " Port 3002 (生產):"
if PORT_3002_PID=$(lsof -ti:3002 2>/dev/null); then
echo " ✅ 正在使用 (PID: $PORT_3002_PID)"
ps -p $PORT_3002_PID -o pid,command 2>/dev/null | tail -n +2 || true
else
echo " ❌ 未使用"
fi
echo " Port 3003 (開發):"
if PORT_3003_PID=$(lsof -ti:3003 2>/dev/null); then
echo " ✅ 正在使用 (PID: $PORT_3003_PID)"
ps -p $PORT_3003_PID -o pid,command 2>/dev/null | tail -n +2 || true
else
echo " ✅ 可用"
fi
echo ""
echo "2. ⚙️ 檢查二進制文件狀態:"
echo " 生產二進制 (momentry):"
if [ -f "/Users/accusys/momentry_core_0.1/target/release/momentry" ]; then
LS_OUTPUT=$(ls -la "/Users/accusys/momentry_core_0.1/target/release/momentry")
echo " ✅ 存在: $LS_OUTPUT"
else
echo " ❌ 不存在"
fi
echo " 開發二進制 (momentry_playground):"
if [ -f "/Users/accusys/momentry_core_0.1/target/release/momentry_playground" ]; then
LS_OUTPUT=$(ls -la "/Users/accusys/momentry_core_0.1/target/release/momentry_playground")
echo " ✅ 存在: $LS_OUTPUT"
else
echo " ⚠️ 不存在 (可能需要構建)"
fi
echo ""
echo "3. 📄 檢查環境配置文件:"
echo " 生產配置 (.env):"
if [ -f "/Users/accusys/momentry_core_0.1/.env" ]; then
echo " ✅ 存在"
grep -E "MOMENTRY_SERVER_PORT|MOMENTRY_REDIS_PREFIX" "/Users/accusys/momentry_core_0.1/.env" 2>/dev/null || echo " ⚠️ 未找到關鍵配置"
else
echo " ❌ 不存在"
fi
echo " 開發配置 (.env.development):"
if [ -f "/Users/accusys/momentry_core_0.1/.env.development" ]; then
echo " ✅ 存在"
grep -E "MOMENTRY_SERVER_PORT|MOMENTRY_REDIS_PREFIX" "/Users/accusys/momentry_core_0.1/.env.development" 2>/dev/null || echo " ⚠️ 未找到關鍵配置"
else
echo " ❌ 不存在"
fi
echo ""
echo "4. 🗄️ 檢查資料庫連接狀態:"
echo " Redis 前綴配置:"
if [ -f "/Users/accusys/momentry_core_0.1/.env" ]; then
REDIS_PREFIX=$(grep "MOMENTRY_REDIS_PREFIX" "/Users/accusys/momentry_core_0.1/.env" 2>/dev/null | cut -d= -f2 || echo "momentry:")
echo " 生產: $REDIS_PREFIX"
fi
if [ -f "/Users/accusys/momentry_core_0.1/.env.development" ]; then
DEV_REDIS_PREFIX=$(grep "MOMENTRY_REDIS_PREFIX" "/Users/accusys/momentry_core_0.1/.env.development" 2>/dev/null | cut -d= -f2 || echo "momentry_dev:")
echo " 開發: $DEV_REDIS_PREFIX"
fi
echo ""
echo "5. 🏥 生產服務健康檢查:"
if [ -n "$PORT_3002_PID" ]; then
echo " 嘗試連接生產服務 (port 3002)..."
if curl -f -s -o /dev/null -w "HTTP狀態碼: %{http_code}\n" --max-time 5 "http://localhost:3002/api/v1/health"; then
echo " ✅ 生產服務健康"
else
echo " ❌ 生產服務無法連接"
fi
else
echo " ⚠️ 無生產服務運行"
fi
echo ""
echo "6. 📊 系統資源檢查:"
echo " 記憶體使用:"
ps aux | grep -E "momentry|momentry_playground" | grep -v grep | awk '{print " " $11 " (PID:" $2 ") MEM:" $4 "% CPU:" $3 "%"}' || echo " 無相關進程"
echo ""
echo "=== 驗證總結 ==="
echo "✅ 所有只讀檢查完成"
echo "📋 未修改任何系統文件"
echo "🔒 生產服務保持原狀"
echo ""
echo "建議下一步:"
if [ -n "$PORT_3002_PID" ]; then
echo " 1. 生產服務正在運行 (PID: $PORT_3002_PID)"
echo " 2. 如需開發測試,使用 port 3003"
echo " 3. 執行: ./scripts/deployment/safe/deploy_dry_run.sh"
else
echo " 1. 無生產服務運行"
echo " 2. 可啟動開發測試"
echo " 3. 執行: ./scripts/deployment/safe/agent_commands.sh test-development"
fi