主要修复: 1. 修复 RAG 推理无限循环问题(大小写不匹配 + 缺少已检索结果检查) 2. 修复 intent_classifier.py 的绝对导入错误 3. 删除旧的 start.sh 脚本,添加新的启动脚本 4. 优化路由逻辑和状态管理
This commit is contained in:
125
tools/start.py
Executable file
125
tools/start.py
Executable file
@@ -0,0 +1,125 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user