start_langgraph.py 3.04 KB
#!/usr/bin/env python3
"""
LangGraph 服务启动脚本
"""

import subprocess
import sys
import os
import time
from pathlib import Path

def check_dependencies():
    """检查依赖是否安装"""
    try:
        import langgraph
        import langchain
        import langchain_openai
        print("✅ 所有依赖已安装")
        return True
    except ImportError as e:
        print(f"❌ 缺少依赖: {e}")
        print("请运行: pip install -r requirements.txt")
        return False

def start_langgraph_server():
    """启动 LangGraph 服务器"""
    print("🚀 启动 LangGraph 服务器...")
    
    # 检查 langgraph.json 是否存在
    if not Path("langgraph.json").exists():
        print("❌ 未找到 langgraph.json 配置文件")
        return False
    
    try:
        # 启动 LangGraph 开发服务器
        # 使用 --host 0.0.0.0 允许通过 IP 地址访问
        #  cmd = ["python", "-m", "langgraph_cli", "dev", "--port", "2025"]
        cmd = ["python", "-m", "langgraph_cli", "dev", "--host", "0.0.0.0", "--port", "2025"]
        print(f"执行命令: {' '.join(cmd)}")
        
        # 强制使用 UTF-8 编码,避免 GBK 解码错误
        try:
            sys.stdout.reconfigure(encoding="utf-8", errors="replace")
            sys.stderr.reconfigure(encoding="utf-8", errors="replace")
        except Exception:
            pass

        # 设置环境变量确保子进程使用 UTF-8
        env = os.environ.copy()
        env["PYTHONIOENCODING"] = "UTF-8"
        env["PYTHONUTF8"] = "1"
        
        process = subprocess.Popen(
            cmd,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            text=True,
            encoding="utf-8",
            errors="replace",
            bufsize=0,
            env=env
        )
        
        print("🌐 LangGraph 服务器已启动")
        print("📡 服务地址: http://0.0.0.0:2025")
        print("🔌 WebSocket: ws://0.0.0.0:2025/ws")
        print("📚 API 文档: http://0.0.0.0:2025/docs")
        print("💡 提示: 可通过本机 IP 地址访问,例如: http://192.168.1.44:2025")
        print("\n按 Ctrl+C 停止服务器\n")
        
        # 实时输出日志
        for line in process.stdout:
            print(line.rstrip())
            
    except KeyboardInterrupt:
        print("\n🛑 正在停止服务器...")
        process.terminate()
        process.wait()
        print("✅ 服务器已停止")
    except Exception as e:
        print(f"❌ 启动失败: {e}")
        return False
    
    return True

def main():
    """主函数"""
    print("=" * 50)
    print("🎯 LangGraph DEEPSEEK Agent 启动器")
    print("=" * 50)
    
    # 检查依赖
    if not check_dependencies():
        sys.exit(1)
    
    # 检查环境变量
    if not os.getenv("OPENAI_API_KEY"):
        print("⚠️  警告: 未设置 OPENAI_API_KEY 环境变量")
        print("请在 .env 文件中设置或直接设置环境变量")
    
    # 启动服务器
    start_langgraph_server()

if __name__ == "__main__":
    main()