Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Has been cancelled
主要修复: 1. 修复 RAG 推理无限循环问题(大小写不匹配 + 缺少已检索结果检查) 2. 修复 intent_classifier.py 的绝对导入错误 3. 删除旧的 start.sh 脚本,添加新的启动脚本 4. 优化路由逻辑和状态管理
126 lines
3.5 KiB
Python
Executable File
126 lines
3.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
AI Agent 启动与管理脚本 - Python版
|
|
用法: python tools/testrun.py [check|backend|frontend|both]
|
|
"""
|
|
import sys
|
|
import os
|
|
import time
|
|
import signal
|
|
import subprocess
|
|
from pathlib import Path
|
|
from dotenv import load_dotenv
|
|
|
|
# 路径设置
|
|
project_root = Path(__file__).resolve().parent.parent
|
|
sys.path.insert(0, str(project_root))
|
|
sys.path.insert(0, str(project_root / "backend"))
|
|
load_dotenv(project_root / ".env")
|
|
|
|
# 全局变量
|
|
processes = []
|
|
|
|
|
|
def start_backend():
|
|
"""启动后端服务"""
|
|
print("\n🚀 启动后端服务 (端口 8079)...")
|
|
|
|
env = os.environ.copy()
|
|
env["PYTHONPATH"] = str(project_root / "backend")
|
|
env["BACKEND_PORT"] = "8079"
|
|
|
|
proc = subprocess.Popen(
|
|
[sys.executable, "-m", "app.backend"],
|
|
cwd=str(project_root),
|
|
env=env
|
|
)
|
|
processes.append(proc)
|
|
print(f"✓ 后端服务已启动 (PID: {proc.pid})")
|
|
time.sleep(2)
|
|
return proc
|
|
|
|
|
|
def start_frontend():
|
|
"""启动前端服务"""
|
|
print("\n🎨 启动前端界面 (端口 10501)...")
|
|
|
|
env = os.environ.copy()
|
|
env["PYTHONPATH"] = str(project_root / "frontend/src")
|
|
env["API_URL"] = "http://127.0.0.1:8079/chat"
|
|
|
|
frontend_main = str(project_root / "frontend" / "src" / "frontend_main.py")
|
|
proc = subprocess.Popen(
|
|
[
|
|
sys.executable, "-m", "streamlit", "run", frontend_main,
|
|
"--server.port", "10501", "--server.address", "0.0.0.0"
|
|
],
|
|
cwd=str(project_root),
|
|
env=env
|
|
)
|
|
processes.append(proc)
|
|
print(f"✓ 前端服务已启动 (PID: {proc.pid})")
|
|
print("✓ 访问地址:")
|
|
print(" 本地开发: http://127.0.0.1:10501")
|
|
return proc
|
|
|
|
|
|
def cleanup(signum, frame):
|
|
"""清理函数 - 停止所有进程"""
|
|
print("\n🛑 正在停止服务...")
|
|
for i, proc in enumerate(processes):
|
|
if proc.poll() is None: # 进程还在运行
|
|
proc.terminate()
|
|
proc.wait(timeout=5)
|
|
print(f"✓ 服务 {i+1} 已停止")
|
|
sys.exit(0)
|
|
|
|
|
|
def print_help():
|
|
"""显示帮助信息"""
|
|
print("========================================")
|
|
print(" AI Agent - 个人生活助手")
|
|
print("========================================")
|
|
print("\n用法: python tools/testrun.py [command]")
|
|
print("\n命令:")
|
|
print(" backend 仅启动后端服务")
|
|
print(" frontend 仅启动前端服务")
|
|
print(" both 启动前后端服务(默认)")
|
|
print(" help 显示此帮助信息")
|
|
print("\n示例:")
|
|
print(" python tools/testrun.py both # 启动本地开发环境")
|
|
|
|
|
|
def main():
|
|
"""主函数"""
|
|
print("========================================")
|
|
print(" AI Agent - 个人生活助手")
|
|
print("========================================")
|
|
|
|
# 捕获信号
|
|
signal.signal(signal.SIGINT, cleanup)
|
|
signal.signal(signal.SIGTERM, cleanup)
|
|
|
|
cmd = sys.argv[1] if len(sys.argv) > 1 else "both"
|
|
|
|
if cmd == "backend":
|
|
start_backend()
|
|
print("\n后端服务正在运行,按 Ctrl+C 停止")
|
|
processes[0].wait()
|
|
elif cmd == "frontend":
|
|
start_frontend()
|
|
print("\n前端服务正在运行,按 Ctrl+C 停止")
|
|
processes[0].wait()
|
|
elif cmd == "both":
|
|
start_backend()
|
|
time.sleep(3)
|
|
start_frontend()
|
|
print("\n所有服务正在运行,按 Ctrl+C 停止")
|
|
for proc in processes:
|
|
proc.wait()
|
|
else:
|
|
print_help()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|