| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- """
- API Server - FastAPI 应用入口
- 聚合所有模块的 API 路由(step_tree、未来的 memory 等)
- """
- import logging
- import json
- import os
- from fastapi import FastAPI, Request, WebSocket
- from fastapi.middleware.cors import CORSMiddleware
- import uvicorn
- from agent.trace import FileSystemTraceStore
- from agent.trace.api import router as api_router, set_trace_store as set_api_trace_store
- from agent.trace.websocket import router as ws_router, set_trace_store as set_ws_trace_store
- # ===== 日志配置 =====
- logging.basicConfig(
- level=logging.INFO,
- format="%(asctime)s [%(levelname)s] %(name)s: %(message)s"
- )
- logger = logging.getLogger(__name__)
- # ===== FastAPI 应用 =====
- app = FastAPI(
- title="Agent Step Tree API",
- description="Step 树可视化 API",
- version="1.0.0"
- )
- # CORS 配置(允许前端跨域访问)
- app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"], # 生产环境应限制具体域名
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
- )
- # ===== 初始化存储 =====
- # 使用文件系统存储(支持跨进程和持久化)
- trace_store = FileSystemTraceStore(base_path=".trace")
- # 注入到 step_tree 模块
- set_api_trace_store(trace_store)
- set_ws_trace_store(trace_store)
- # ===== 注册路由 =====
- # Step 树 RESTful API
- app.include_router(api_router)
- # Step 树 WebSocket
- app.include_router(ws_router)
- @app.websocket("/ws_ping")
- async def ws_ping(websocket: WebSocket):
- await websocket.accept()
- await websocket.send_text("pong")
- await websocket.close()
- # ===== 健康检查 =====
- @app.get("/health")
- async def health_check():
- """健康检查"""
- return {
- "status": "ok",
- "service": "Agent Step Tree API",
- "version": "1.0.0"
- }
- # ===== 启动服务 =====
- if __name__ == "__main__":
- logger.info("Starting API server...")
- uvicorn.run(
- "api_server:app",
- host="0.0.0.0",
- port=8000,
- reload=True, # 开发模式
- log_level="info"
- )
|