import Fastify from "fastify"; import cors from "@fastify/cors"; import swagger from "@fastify/swagger"; import swaggerUi from "@fastify/swagger-ui"; import { env } from "./config/env.js"; import { createClients } from "./config/clients.js"; import { createSwaggerSpec } from "./config/swagger.js"; import { EmbeddingService, RerankService, GraphRagService, LLMService, MultiAgentService } from "./services/index.js"; import { createGraphRagController } from "./controllers/index.js"; import { registerRoutes } from "./routes/index.js"; /** * 创建 Fastify 应用并完成依赖装配与路由注册。 */ export const createServer = async () => { const app = Fastify({ logger: true }); await app.register(cors, { origin: [env.WEBUI_URL, "http://localhost:8080", "http://127.0.0.1:8080", "http://localhost:5174", "http://127.0.0.1:5174", "http://localhost:5173", "http://127.0.0.1:5173"], methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"], allowedHeaders: ["Content-Type", "Authorization"] }); await app.register(swagger, { mode: "static", specification: { document: createSwaggerSpec(env) } }); await app.register(swaggerUi, { routePrefix: "/api-docs" }); const { neo4jDriver, qdrantClient } = createClients(env); const embeddingService = new EmbeddingService(env); const rerankService = new RerankService(env); const llmService = new LLMService(env); const service = new GraphRagService({ driver: neo4jDriver, qdrantClient, embeddingService, rerankService, llmService, env }); const multiAgentService = new MultiAgentService({ llmService, logger: app.log }); const controller = createGraphRagController(service, multiAgentService); await registerRoutes(app, controller, env); app.addHook("onClose", async () => { await neo4jDriver.close(); }); return { app, env }; };