×
¥
查看详情
🔥 会员专享 文生文 工具

项目框架生成专家

👁️ 479 次查看
📅 Nov 24, 2025
💡 核心价值: 解析用户需求并生成多技术栈项目框架,包含目录结构、初始化代码及配置文件,支持代码优化与重构,提升开发效率和项目工程化质量。

🎯 可自定义参数(6个)

问题或需求
项目功能需求或开发问题的详细描述
开发语言
项目开发所使用的编程语言
技术栈
项目开发使用的前后端框架、数据库等技术组合
代码片段
需要优化或重构的现有代码内容
项目名称
生成项目的名称标识
优先优化目标
代码优化的主要目标方向

🎨 效果示例

{ "response": "已解析需求并为“SaaS多租门户”提供可维护性优先的 TypeScript Monorepo 项目框架(TurboRepo),覆盖前端 Next.js、后端 NestJS + Prisma、PostgreSQL、Redis、RabbitMQ、REST/GraphQL、JWT+OIDC、OpenAPI/GraphQL 文档、OpenTelemetry+Prometheus 观测、Docker/K8s、统一工程规范与代码生成器。关键设计与初始化要点:\n\n一、模块边界与分层(可维护性优先)\n- 后端分层:modules(业务) / libs(基础设施) / interfaces(REST/GraphQL) / core(跨域能力)\n - 核心域:identity(用户/认证/授权)、tenancy(租户/成员/隔离)、billing(订阅/计划/计费)、audit(审计日志)、support(工单)、notify(通知)\n - 基础设施:prisma(数据库访问)、cache(redis)、mq(rabbitmq)、observability(otel/prometheus/logging)、config(配置)、security(rbac/policies)\n - 接口层:rest(controllers + DTO)、graphql(resolvers + schema)\n - 跨域:error handling、logging、tracing、transaction boundary、idempotency\n- 前端分层:app(Next App Router) / features(按域切片) / shared(ui/hooks/lib) / state(zustand stores)\n - SSR/CSR 按路由与运行时切换;i18n 基于 next-intl\n- 插件化扩展点:\n - 后端:PluginRegistry(packages/shared-plugin-api)定义 IPlugin 接口(注册 GraphQL/REST、订阅队列、数据迁移、RBAC 策略)。AppModule 在启动时动态发现 packages/plugins/* 并注册。\n - 前端:Feature 插件(暴露路由段、导航项、Zustand slice、权限守卫),通过 manifest 声明并动态装载。\n\n二、关键工程化\n- Monorepo:turbo + pnpm 工作区;统一 ESLint/Prettier/TSConfig;生成脚本:codegen(OpenAPI/GraphQL/Prisma)、plop/自定义 CLI 脚手架。\n- CI/CD:GitHub Actions(build/test/lint/graph gen/docker build&push/k8s 部署),利用 turbo cache。\n- 测试:Jest 单元测试,Playwright 端到端(前端),SuperTest(后端 REST),GraphQL e2e。\n- 观测:OpenTelemetry NodeSDK(OTLP 到 Collector),Prometheus metrics(/metrics),日志:pino,多租户字段入日志与 trace attributes。\n\n三、SSR/CSR 切换策略(Next.js)\n- 默认 SSR:路由级配置(在页面中使用 export const dynamic = 'force-dynamic')。CSR 路由通过 'use client' + SWR/Zustand 获取数据。\n- 环境/用户偏好切换:读取 cookie/x-header 以强制 CSR(降级模式应对后端压力)。\n\n四、初始化代码与配置(核心片段)\n1) 后端 main.ts(Nest 启动 + Swagger + GraphQL + OTel + Prometheus)\n"use strict";\nimport { NestFactory } from "@nestjs/core";\nimport { AppModule } from "./app.module";\nimport { ValidationPipe } from "@nestjs/common";\nimport { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";\nimport { Logger } from "@nestjs/common";\nimport { setupTracing } from "./observability/otel";\nimport { PrometheusMiddleware } from "./observability/prometheus";\n\nasync function bootstrap() {\n await setupTracing();\n const app = await NestFactory.create(AppModule, { bufferLogs: true });\n app.useGlobalPipes(new ValidationPipe({ whitelist: true, transform: true }));\n app.use(PrometheusMiddleware);\n app.setGlobalPrefix("/api");\n\n const config = new DocumentBuilder()\n .setTitle("SaaS Portal API")\n .setVersion("1.0")\n .addBearerAuth()\n .build();\n const document = SwaggerModule.createDocument(app, config);\n SwaggerModule.setup("/docs", app, document);\n\n await app.listen(process.env.PORT || 3001);\n Logger.log(API listening on ${await app.getUrl()});\n}\nbootstrap();\n\n2) AppModule(配置 Redis/RabbitMQ/GraphQL/Prisma/Throttler)\nimports: [\n ConfigModule.forRoot({ isGlobal: true, envFilePath: [.env.local, .env] }),\n CacheModule.register({ isGlobal: true, store: redisStore, url: process.env.REDIS_URL }),\n RabbitMQModule.forRoot(RabbitMQModule, { exchanges: [{ name: "events", type: "topic" }], uri: process.env.RABBITMQ_URL }),\n ThrottlerModule.forRoot([{ ttl: 60000, limit: 120 }]),\n GraphQLModule.forRoot({ driver: ApolloDriver, autoSchemaFile: true, playground: process.env.NODE_ENV !== 'production', context: ({ req }) => ({ req }) }),\n PrismaModule,\n IdentityModule,\n TenancyModule,\n BillingModule,\n AuditModule,\n SupportModule,\n NotifyModule,\n]\n\n3) Prisma schema(核心模型)\n// prisma/schema.prisma\n datasource db { provider = "postgresql"; url = env("DATABASE_URL") }\n generator client { provider = "prisma-client-js" }\n model User { id String @id @default(cuid()) email String @unique password String displayName String? createdAt DateTime @default(now()) memberships UserTenant[] roles Role[] auditLogs AuditLog[] }\n model Tenant { id String @id @default(cuid()) name String @unique createdAt DateTime @default(now()) memberships UserTenant[] subscriptions Subscription[] auditLogs AuditLog[] }\n model UserTenant { id String @id @default(cuid()) userId String tenantId String roleId String? user User @relation(fields: [userId], references: [id]) tenant Tenant @relation(fields: [tenantId], references: [id]) role Role? @relation(fields: [roleId], references: [id]) @@unique([userId, tenantId]) }\n model Role { id String @id @default(cuid()) name String permissions Permission[] users User[] }\n model Permission { id String @id @default(cuid()) action String resource String role Role? }\n model Subscription { id String @id @default(cuid()) tenantId String plan String status String startedAt DateTime @default(now()) endsAt DateTime? tenant Tenant @relation(fields: [tenantId], references: [id]) }\n model AuditLog { id String @id @default(cuid()) tenantId String? userId String? event String data Json? ip String? userAgent String? createdAt DateTime @default(now()) user User? @relation(fields: [userId], references: [id]) tenant Tenant? @relation(fields: [tenantId], references: [id]) }\n\n4) 前端 Next 配置 + Tailwind\n// apps/frontend/next.config.js\nconst nextConfig = { reactStrictMode: true, experimental: { instrumentationHook: true } };\nmodule.exports = nextConfig;\n// apps/frontend/tailwind.config.js\nmodule.exports = { content: ["./app//*.{ts,tsx}", "./components//*.{ts,tsx}"], theme: { extend: {} }, plugins: [] };\n\n5) 环境变量模板(.env.example)\nNODE_ENV=development\nPORT=3001\nDATABASE_URL=postgresql://postgres:postgres@localhost:5432/saas\nREDIS_URL=redis://localhost:6379\nRABBITMQ_URL=amqp://guest:guest@localhost:5672\nJWT_SECRET=change_me\nJWT_EXPIRES_IN=15m\nOIDC_ISSUER_URL=https://your-idp/.well-known/openid-configuration\nOIDC_CLIENT_ID=your_client_id\nOIDC_CLIENT_SECRET=your_secret\nOTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318\nPROMETHEUS_PORT=9464\n\n6) GraphQL / OpenAPI 代码生成\n- graphql-codegen.yaml(根目录):从 apps/backend 自动生成前端可用的 TypeScript types 到 packages/shared/generated/graphql.ts\n- OpenAPI:通过 Swagger JSON 导出,使用 openapi-typescript 生成到 packages/shared/generated/openapi.ts\n\n7) Turbo pipeline\n// turbo.json\n{ "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/", "build/"] }, "lint": {}, "test": { "dependsOn": ["^build"] }, "dev": {}, "generate": {} } }\n\n8) Docker 与 K8s 最小化\n- apps/backend/Dockerfile(node:20-alpine 多阶段)\n- apps/frontend/Dockerfile(next build + standalone)\n- infra/k8s:namespace.yaml, backend-deploy.yaml, frontend-deploy.yaml, svc/ingress, configmap/secret, hpa, serviceMonitor\n\n9) 监控与日志规范\n- 请求级日志:请求ID(x-request-id)、tenantId、userId 注入 MDC;\n- 统一错误处理过滤器:捕获业务异常 -> 标准错误响应结构({ code, message, traceId });\n- 指标:HTTP 请求计数/延迟、DB 查询、缓存命中、队列滞留、登录成功/失败率、租户活跃度。\n\n10) 脚手架与示例数据\n- packages/codegen:脚手架命令 pnpm gen:module identity/user 生成标准模块骨架(controller/service/dto/resolver/prisma)\n- infra/db/seed:种子用户/租户/角色/权限/订阅,配合 prisma migrate\n\n使用方式(简要)\n- 本地:pnpm i && pnpm generate && pnpm -w build;开发:pnpm dev(前后端并行)\n- 生成文档:pnpm backend docs:openapi && pnpm graphql:gen;测试:pnpm -w test;\n- 容器:docker compose up;CI/CD:推送到 main 触发构建与部署\n", "optimized_code": "// apps/backend/src/modules/identity/auth.controller.ts\nimport { Controller, Post, Body, UnauthorizedException, Ip, Headers } from '@nestjs/common';\nimport { ApiTags, ApiOperation } from '@nestjs/swagger';\nimport { Throttle } from '@nestjs/throttler';\nimport { AuthService } from './auth.service';\nimport { LoginDto } from './dto/login.dto';\n\n@ApiTags('auth')\n@Controller('auth')\nexport class AuthController {\n constructor(private readonly authService: AuthService) {}\n\n @Post('login')\n @ApiOperation({ summary: 'Email/Password 登录(多租户)' })\n @Throttle(5, 60)\n async login(@Body() dto: LoginDto, @Ip() ip: string, @Headers('user-agent') ua?: string) {\n const result = await this.authService.login(dto, { ip, ua });\n if (!result.ok) throw new UnauthorizedException(result.error || 'Unauthorized');\n return { accessToken: result.accessToken, expiresIn: result.expiresIn };\n }\n}\n\n// apps/backend/src/modules/identity/dto/login.dto.ts\nimport { IsEmail, IsString, MinLength, IsOptional } from 'class-validator';\n\nexport class LoginDto {\n @IsEmail()\n email: string;\n\n @IsString()\n @MinLength(8)\n password: string;\n\n @IsString()\n tenant: string; // tenant slug or id\n\n @IsOptional()\n @IsString()\n deviceId?: string;\n}\n\n// apps/backend/src/modules/identity/auth.service.ts\nimport { Injectable } from '@nestjs/common';\nimport { JwtService } from '@nestjs/jwt';\nimport { ConfigService } from '@nestjs/config';\nimport * as bcrypt from 'bcryptjs';\nimport { PrismaService } from '../../libs/prisma/prisma.service';\nimport { AuditService } from '../audit/audit.service';\n\n@Injectable()\nexport class AuthService {\n constructor(\n private readonly prisma: PrismaService,\n private readonly jwt: JwtService,\n private readonly config: ConfigService,\n private readonly audit: AuditService,\n ) {}\n\n async login(\n { email, password, tenant }: { email: string; password: string; tenant: string },\n meta?: { ip?: string; ua?: string },\n ): Promise<{ ok: boolean; accessToken?: string; expiresIn?: number; error?: string }> {\n const user = await this.prisma.user.findUnique({ where: { email } });\n if (!user) {\n await this.audit.log({ event: 'auth.login.failed', userId: null, tenantId: null, data: { email, reason: 'user_not_found' }, ...meta });\n return { ok: false, error: 'Invalid credentials' };\n }\n\n // Ensure user is member of tenant\n const tenantRecord = await this.prisma.tenant.findFirst({ where: { OR: [{ id: tenant }, { name: tenant }] } });\n if (!tenantRecord) {\n await this.audit.log({ event: 'auth.login.failed', userId: user.id, tenantId: null, data: { tenant, reason: 'tenant_not_found' }, ...meta });\n return { ok: false, error: 'Invalid tenant' };\n }\n const membership = await this.prisma.userTenant.findUnique({ where: { userId_tenantId: { userId: user.id, tenantId: tenantRecord.id } } });\n if (!membership) {\n await this.audit.log({ event: 'auth.login.failed', userId: user.id, tenantId: tenantRecord.id, data: { reason: 'no_membership' }, ...meta });\n return { ok: false, error: 'Unauthorized' };\n }\n\n const ok = await bcrypt.compare(password, user.password);\n if (!ok) {\n await this.audit.log({ event: 'auth.login.failed', userId: user.id, tenantId: tenantRecord.id, data: { reason: 'password_mismatch' }, ...meta });\n return { ok: false, error: 'Invalid credentials' };\n }\n\n const payload = { sub: user.id, tenantId: tenantRecord.id, email: user.email };\n const expiresIn = this.config.get('JWT_EXPIRES_SECONDS') || 900; // 15m default\n const accessToken = await this.jwt.signAsync(payload, {\n secret: this.config.get('JWT_SECRET'),\n expiresIn,\n });\n\n await this.audit.log({ event: 'auth.login.success', userId: user.id, tenantId: tenantRecord.id, data: { deviceId: null }, ...meta });\n\n return { ok: true, accessToken, expiresIn };\n }\n}\n\n// apps/backend/src/modules/audit/audit.service.ts\nimport { Injectable, Logger } from '@nestjs/common';\nimport { PrismaService } from '../../libs/prisma/prisma.service';\n\n@Injectable()\nexport class AuditService {\n private readonly logger = new Logger(AuditService.name);\n constructor(private readonly prisma: PrismaService) {}\n\n async log(entry: { event: string; userId: string | null; tenantId: string | null; data?: any; ip?: string; ua?: string }) {\n this.logger.debug(Audit: ${entry.event});\n return this.prisma.auditLog.create({ data: { event: entry.event, userId: entry.userId ?? undefined, tenantId: entry.tenantId ?? undefined, data: entry.data ?? {}, ip: entry.ip, userAgent: entry.ua } });\n }\n}\n\n// apps/backend/src/modules/identity/auth.module.ts\nimport { Module } from '@nestjs/common';\nimport { JwtModule } from '@nestjs/jwt';\nimport { AuthController } from './auth.controller';\nimport { AuthService } from './auth.service';\nimport { AuditService } from '../audit/audit.service';\nimport { PrismaService } from '../../libs/prisma/prisma.service';\n\n@Module({\n imports: [JwtModule.register({})],\n controllers: [AuthController],\n providers: [AuthService, AuditService, PrismaService],\n})\nexport class AuthModule {}\n", "project_structure": [ "SaaS多租门户/", "├─ apps/", "│ ├─ backend/ (NestJS + Prisma)", "│ │ ├─ src/", "│ │ │ ├─ main.ts", "│ │ │ ├─ app.module.ts", "│ │ │ ├─ interfaces/", "│ │ │ │ ├─ rest/", "│ │ │ │ │ └─ (controllers wired in each module)", "│ │ │ │ └─ graphql/", "│ │ │ │ └─ (resolvers/schema code-first)", "│ │ │ ├─ core/", "│ │ │ │ ├─ filters/http-exception.filter.ts", "│ │ │ │ ├─ interceptors/tenant-context.interceptor.ts", "│ │ │ │ └─ guards/rbac.guard.ts", "│ │ │ ├─ libs/", "│ │ │ │ ├─ prisma/", "│ │ │ │ │ ├─ prisma.service.ts", "│ │ │ │ │ └─ prisma.module.ts", "│ │ │ │ ├─ mq/rabbitmq.module.ts", "│ │ │ │ ├─ cache/redis.module.ts", "│ │ │ │ └─ config/config.module.ts", "│ │ │ ├─ observability/", "│ │ │ │ ├─ otel.ts (OpenTelemetry NodeSDK bootstrap)", "│ │ │ │ ├─ logger.ts (pino logger with tenant/user enrich)", "│ │ │ │ └─ prometheus.ts (metrics middleware + /metrics)", "│ │ │ ├─ modules/", "│ │ │ │ ├─ identity/ (注册/登录/JWT/OIDC/RBAC)", "│ │ │ │ │ ├─ auth.controller.ts", "│ │ │ │ │ ├─ auth.service.ts", "│ │ │ │ │ ├─ auth.module.ts", "│ │ │ │ │ ├─ dto/login.dto.ts", "│ │ │ │ │ ├─ jwt.strategy.ts", "│ │ │ │ │ ├─ oidc.strategy.ts (open id connect via openid-client)", "│ │ │ │ │ └─ rbac.policies.ts", "│ │ │ │ ├─ tenancy/ (租户/成员/隔离)", "│ │ │ │ │ ├─ tenancy.controller.ts", "│ │ │ │ │ ├─ tenancy.service.ts", "│ │ │ │ │ └─ tenancy.module.ts", "│ │ │ │ ├─ billing/ (订阅管理/计划/计费webhook)", "│ │ │ │ ├─ audit/ (审计日志)", "│ │ │ │ ├─ support/ (工单)", "│ │ │ │ └─ notify/ (通知中心/队列消费者)", "│ │ │ └─ graphql.ts (GraphQL module config - code-first)", "│ │ ├─ prisma/", "│ │ │ ├─ schema.prisma", "│ │ │ ├─ migrations/", "│ │ │ └─ seed.ts", "│ │ ├─ test/", "│ │ │ ├─ auth.e2e.spec.ts", "│ │ │ └─ tenancy.spec.ts", "│ │ ├─ jest.config.ts", "│ │ ├─ Dockerfile", "│ │ └─ tsconfig.json", "│ └─ frontend/ (Next.js + Zustand + Tailwind)", "│ ├─ app/", "│ │ ├─ layout.tsx", "│ │ ├─ page.tsx", "│ │ ├─ (auth)/login/page.tsx", "│ │ ├─ (tenant)/dashboard/page.tsx", "│ │ └─ api/ (route handlers if needed)", "│ ├─ features/", "│ │ ├─ identity/", "│ │ ├─ tenancy/", "│ │ ├─ billing/", "│ │ ├─ audit/", "│ │ └─ notify/", "│ ├─ state/", "│ │ ├─ auth.store.ts", "│ │ └─ ui.store.ts", "│ ├─ components/", "│ │ ├─ ui/", "│ │ └─ charts/", "│ ├─ lib/", "│ │ ├─ api-client.ts (OpenAPI/GraphQL clients)", "│ │ ├─ i18n.ts", "│ │ └─ ssr-csr.ts (render mode toggle helpers)", "│ ├─ public/", "│ ├─ styles/", "│ │ └─ globals.css", "│ ├─ next.config.js", "│ ├─ tailwind.config.js", "│ ├─ postcss.config.js", "│ ├─ playwright.config.ts", "│ ├─ Dockerfile", "│ └─ tsconfig.json", "├─ packages/", "│ ├─ shared/ (types/utils)", "│ │ ├─ src/", "│ │ │ ├─ index.ts", "│ │ │ ├─ domain/ (shared domain types, errors, result)", "│ │ │ └─ utils/", "│ │ └─ tsconfig.json", "│ ├─ shared-plugin-api/ (后端插件接口定义)", "│ │ └─ src/index.ts", "│ ├─ generated/", "│ │ ├─ graphql.ts (graphql-codegen 输出)", "│ │ └─ openapi.ts (openapi-typescript 输出)", "│ ├─ eslint-config/", "│ │ └─ index.js", "│ ├─ tsconfig/ (base tsconfigs)", "│ │ ├─ base.json", "│ │ └─ nest.json", "│ └─ codegen/ (脚手架与生成器)", "│ ├─ scaffold.ts (约定式模块生成器)", "│ └─ README.md", "├─ infra/", "│ ├─ docker/", "│ │ ├─ docker-compose.yml (postgres/redis/rabbitmq/otel-collector/prometheus/grafana)", "│ │ └─ init/ (db init scripts)", "│ ├─ k8s/", "│ │ ├─ namespace.yaml", "│ │ ├─ backend-deploy.yaml", "│ │ ├─ backend-svc.yaml", "│ │ ├─ frontend-deploy.yaml", "│ │ ├─ frontend-svc.yaml", "│ │ ├─ ingress.yaml", "│ │ ├─ configmap.yaml", "│ │ ├─ secret.yaml", "│ │ ├─ hpa.yaml", "│ │ └─ servicemonitor.yaml", "│ ├─ telemetry/", "│ │ ├─ otel-collector-config.yaml", "│ │ └─ prometheus.yaml", "│ └─ ci/", "│ └─ github-actions/", "│ └─ ci.yml", "├─ graphql-codegen.yaml", "├─ openapi.config.json", "├─ turbo.json", "├─ pnpm-workspace.yaml", "├─ package.json", "├─ .eslintrc.js", "├─ .prettierrc", "├─ .env.example", "├─ README.md (启动/部署/约定/扩展点说明)", "└─ CONTRIBUTING.md (提交规范/代码风格/分支策略/Release 说明)" ] }

{ "response": "需求解析与设计结论:\n- 项目目标:实时数据枢纽平台,支持多源接入、清洗、指标汇总与可视化。性能优先,强调批量写入、异步IO、缓存、消息压缩、分区与并行度调优。\n- 技术栈:Python(FastAPI + SQLAlchemy 2.x Async)、Kafka、Redis、PostgreSQL、Celery、OpenTelemetry、PyTest + Playwright、Docker Compose、Helm、前端 Vue3 + Vite + ECharts、数据格式 Parquet。\n- 目录结构:frontend、api、ingestion、jobs、infra。初始化模块:数据源管理、主题/分区配置、ETL模板、指标模型与维表。配置:Kafka、Redis、PostgreSQL、对象存储(MinIO/S3)、权限策略、环境变量模板。工程化:代码规范、单元/集成测试、性能基准、容器化与部署脚本、指标与日志采集。\n\n关键架构与优化策略:\n1) 后端(FastAPI):\n- 使用 SQLAlchemy Async + 单次批量查询(IN 查询),避免 N+1。\n- CPU 密集计算通过 ProcessPoolExecutor 并行化,避免 GIL 限制;如超大批次通过 Celery 异步离线计算。\n- Redis 缓存:MGET 批量读取、Pipeline 批量写入、TTL 与版本号做失效管理。\n- OpenTelemetry:HTTP、DB、Redis、Kafka 自动/手动埋点,OTLP 输出到 Collector。\n- 指标与日志:Prometheus FastAPI exporter 或 OTEL Metric,JSON 结构化日志。\n\n2) 消息与调度:\n- Kafka 生产与消费使用压缩(zstd),在分区上按业务键(如用户/主题)做分区,提高局部性与并行度。\n- 消费者使用 aiokafka 异步消费 + 幂等写入(基于业务键 + 去重表/Redis 短期去重)。\n- 死信队列:主题 xxx.dlq,配合重试策略(指数退避、最大重试次数)。\n- Celery:任务用于离线批计算与补偿任务(任务幂等:task_id+参数签名)。\n\n3) 数据层:\n- PostgreSQL:分区表(按日期/业务键),批量写入(executemany + COPY)、索引优化(组合索引)。\n- 对象存储:Parquet 数据湖(MinIO 本地,S3 生产),ETL 模板将原始数据清洗后落 Parquet 并建 Delta 目录结构。\n\n4) 前端:\n- Vue3 + Vite + ECharts:仪表盘、图表与查询面板;Playwright 端到端测试;支持深链接与筛选参数。\n\n5) 工程化:\n- 代码规范:Black、isort、Flake8、mypy(可选);pre-commit 钩子。\n- 测试:PyTest(unit/integration),Playwright(frontend),pytest-benchmark(性能基准)。\n- 容器化:Docker Compose(本地),Helm(生产);OTEL Collector、Prometheus、Grafana。\n\n初始化代码与配置要点(摘要):\n- api/app/config.py:集中读取环境变量(Postgres、Redis、Kafka、S3/MinIO、OTLP)。\n- api/app/tracing.py:OpenTelemetry FastAPI Instrumentation + OTLP exporter。\n- api/app/models:指标模型与维表,如 Metric, Dimension, MetricFact;维表(TimeDim, UserDim, SourceDim)。\n- ingestion/consumers/kafka_consumer.py:aiokafka 消费、幂等、重试与 DLQ。\n- ingestion/pipelines/etl_template.py:读取多源,清洗,写入 Parquet(pyarrow + fastparquet),并可触发下游指标计算。\n- jobs/celery_app.py:Celery 配置 broker=Redis/Kafka(推荐 Redis)+ backend=Redis;OpenTelemetry 集成。\n- infra/configs/kafka/topics.yaml:主题与分区配置(生产建议 12-48 分区,根据吞吐与消费者数调优),压缩 zstd。\n- infra/docker-compose.yml:包含 api、ingestion、jobs(worker+beat)、postgres、redis、kafka+zookeeper、minio、otel-collector、prometheus、grafana、frontend。\n- infra/env/.env.example:环境变量模板(见下)。\n\n示例环境变量模板(摘录):\nPOSTGRES_DSN=postgresql+asyncpg://hub:hub@postgres:5432/hub\nREDIS_URL=redis://redis:6379/0\nKAFKA_BOOTSTRAP_SERVERS=kafka:9092\nKAFKA_COMPRESSION=zstd\nS3_ENDPOINT=http://minio:9000\nS3_ACCESS_KEY=minioadmin\nS3_SECRET_KEY=minioadmin\nS3_BUCKET=hub-raw\nOTLP_ENDPOINT=http://otel-collector:4317\nCELERY_BROKER_URL=redis://redis:6379/1\nCELERY_RESULT_BACKEND=redis://redis:6379/2\n\n权限策略:\n- RBAC:roles={admin, analyst, viewer};基于路由声明权限,资源粒度到数据源与主题。策略文件 infra/configs/auth/policy.json。\n\n开发指南(快速开始):\n1) 克隆与初始化:\n- 填写 infra/env/.env(复制 .env.example)。\n- 安装 pre-commit:pre-commit install。\n2) 本地启动:\n- docker compose up -d(首次会初始化 Postgres/Redis/Kafka/MinIO/OTEL)。\n- 前端:cd frontend && pnpm i && pnpm dev。\n3) 数据示例与字典:\n- 运行 infra/scripts/load_sample_data.py 导入样例数据集到 MinIO/Parquet 与 Postgres 维表。\n- data/dictionary.md 提供字段含义、业务口径与指标定义。\n4) 测试与基准:\n- 后端:pytest;性能:pytest -k benchmark。\n- 前端:pnpm test:e2e(Playwright)。\n5) 部署生产:\n- Helm:helm install data-hub infra/helm -f infra/helm/values.yaml。\n- 配置 Kafka ACL、Prometheus 抓取、Grafana dashboard 导入。\n\n性能调优默认值:\n- Kafka:compression.type=zstd;acks=all;linger.ms=50;batch.size=256KB;max.in.flight.requests.per.connection=1(保证顺序)。\n- Redis:合理 TTL;Pipeline 批量写;热点键加随机后缀防击穿;BloomFilter/Set 去重(可选)。\n- DB:连接池大小=CPU*2;prepared statements;COPY 批导;维表用主键+必要索引。\n- 并行:ProcessPoolExecutor(max_workers=os.cpu_count());消费者并行度=分区数;避免过度切分导致上下文切换开销。\n", "optimized_code": "from typing import List, Dict, Any\nimport os\nimport asyncio\nfrom fastapi import APIRouter, Depends, Query, HTTPException\nfrom pydantic import BaseModel\nfrom sqlalchemy import select\nfrom sqlalchemy.orm import load_only\nfrom sqlalchemy.ext.asyncio import AsyncSession\nfrom concurrent.futures import ProcessPoolExecutor\n\n# ---- Dependencies & placeholders (wire these in your app) ----\n# Provide actual implementations in api/app/deps.py\nasync def get_session() -> AsyncSession: ...\nasync def get_redis() -> "Redis": ... # aioredis client\n\n# ORM model and CPU-heavy compute function\nclass Model: # SQLAlchemy ORM mapped class\n id: int\n a: float\n b: float\n\n# Example CPU-heavy function (must be pure & picklable)\ndef compute(a: float, b: float) -> float:\n # Simulate expensive calculation\n return (a ** 2 + b ** 2) ** 0.5\n\n# Batch compute helper to minimize IPC overhead\ndef compute_many(payloads: List[Dict[str, Any]]) -> Dict[int, float]:\n return {p["id"]: compute(p["a"], p["b"]) for p in payloads}\n\nclass MetricOut(BaseModel):\n id: int\n value: float\n\nrouter = APIRouter()\n\nCACHE_TTL_SECONDS = 300\n\n@router.get("/metrics", response_model=List[MetricOut])\nasync def metrics(\n ids: List[int] = Query(..., description="Metric IDs to compute"),\n session: AsyncSession = Depends(get_session),\n redis = Depends(get_redis),\n):\n if not ids:\n raise HTTPException(status_code=400, detail="ids cannot be empty")\n\n # 1) Batch cache lookup\n keys = [f"metric:v1:{i}" for i in ids]\n cached_vals = await redis.mget(keys)\n cache_hit: Dict[int, float] = {}\n missing_ids: List[int] = []\n for i, raw in zip(ids, cached_vals):\n if raw is not None:\n try:\n cache_hit[i] = float(raw)\n except ValueError:\n missing_ids.append(i)\n else:\n missing_ids.append(i)\n\n # 2) Single DB batch query for missing ids\n payloads: List[Dict[str, Any]] = []\n if missing_ids:\n result = await session.execute(\n select(Model)\n .options(load_only(Model.id, Model.a, Model.b))\n .where(Model.id.in_(missing_ids))\n )\n items: List[Model] = result.scalars().all()\n if len(items) != len(missing_ids):\n found_ids = {m.id for m in items}\n not_found = [mid for mid in missing_ids if mid not in found_ids]\n if not_found:\n # Soft-fail the missing ids; you may choose to 404 instead\n missing_ids = [mid for mid in missing_ids if mid in found_ids]\n payloads = [{"id": m.id, "a": m.a, "b": m.b} for m in items]\n\n # 3) Parallel CPU compute in process pool (avoid GIL)\n computed: Dict[int, float] = {}\n if payloads:\n loop = asyncio.get_running_loop()\n # Use a shared executor; in production create it once per app\n with ProcessPoolExecutor(max_workers=os.cpu_count()) as executor:\n computed = await loop.run_in_executor(executor, compute_many, payloads)\n\n # 4) Batch cache set with pipeline\n pipe = redis.pipeline()\n for mid, val in computed.items():\n pipe.set(f"metric:v1:{mid}", val, ex=CACHE_TTL_SECONDS)\n await pipe.execute()\n\n # 5) Assemble response preserving input order\n values: Dict[int, float] = {**cache_hit, **computed}\n rows = [MetricOut(id=i, value=values[i]) for i in ids if i in values]\n\n return rows\n", "project_structure": [ "数据枢纽平台/", "├── frontend/", "│ ├── src/", "│ │ ├── main.ts", "│ │ ├── App.vue", "│ │ ├── pages/", "│ │ │ ├── Dashboard.vue", "│ │ │ └── QueryPanel.vue", "│ │ ├── components/", "│ │ │ ├── charts/", "│ │ │ │ ├── MetricLine.vue", "│ │ │ │ └── TopKBar.vue", "│ │ │ └── layout/", "│ │ │ └── PageShell.vue", "│ │ ├── services/", "│ │ │ └── api.ts", "│ │ └── router/", "│ │ └── index.ts", "│ ├── vite.config.ts", "│ ├── package.json", "│ ├── tsconfig.json", "│ └── tests/", "│ └── e2e/", "│ ├── playwright.config.ts", "│ └── dashboard.spec.ts", "├── api/", "│ ├── app/", "│ │ ├── main.py", "│ │ ├── config.py", "│ │ ├── deps.py", "│ │ ├── tracing.py", "│ │ ├── logging.py", "│ │ ├── routers/", "│ │ │ ├── metrics.py", "│ │ │ ├── datasources.py", "│ │ │ ├── topics.py", "│ │ │ └── auth.py", "│ │ ├── models/", "│ │ │ ├── base.py", "│ │ │ ├── dimension.py", "│ │ │ └── metric.py", "│ │ ├── schemas/", "│ │ │ ├── metric.py", "│ │ │ └── datasource.py", "│ │ ├── services/", "│ │ │ ├── cache.py", "│ │ │ ├── compute.py", "│ │ │ ├── storage.py", "│ │ │ └── kafka_producer.py", "│ │ ├── auth/", "│ │ │ ├── rbac.py", "│ │ │ └── policy_loader.py", "│ │ ├── tests/", "│ │ │ ├── unit/", "│ │ │ │ └── test_metrics.py", "│ │ │ └── integration/", "│ │ │ └── test_api_integration.py", "│ │ └── alembic/", "│ │ ├── env.py", "│ │ ├── script.py.mako", "│ │ └── versions/", "│ ├── pyproject.toml", "│ ├── requirements.txt", "│ └── pre-commit-config.yaml", "├── ingestion/", "│ ├── consumers/", "│ │ ├── kafka_consumer.py", "│ │ └── dlq_handler.py", "│ ├── pipelines/", "│ │ ├── etl_template.py", "│ │ └── parquet_writer.py", "│ ├── schemas/", "│ │ └── datasource.json", "│ └── tests/", "│ └── test_ingestion.py", "├── jobs/", "│ ├── celery_app.py", "│ ├── tasks/", "│ │ ├── metrics.py", "│ │ └── housekeeping.py", "│ └── schedules/", "│ └── beat_schedule.py", "├── infra/", "│ ├── docker-compose.yml", "│ ├── helm/", "│ │ ├── Chart.yaml", "│ │ ├── values.yaml", "│ │ └── templates/", "│ │ ├── deployment-api.yaml", "│ │ ├── deployment-ingestion.yaml", "│ │ ├── deployment-jobs.yaml", "│ │ ├── service-api.yaml", "│ │ └── configmap-env.yaml", "│ ├── k8s/", "│ │ ├── api-deployment.yaml", "│ │ └── otel-collector.yaml", "│ ├── configs/", "│ │ ├── kafka/", "│ │ │ ├── topics.yaml", "│ │ │ └── client.properties", "│ │ ├── postgres/", "│ │ │ └── init.sql", "│ │ ├── redis/", "│ │ │ └── redis.conf", "│ │ ├── auth/", "│ │ │ └── policy.json", "│ │ ├── otel/", "│ │ │ └── collector-config.yaml", "│ │ └── grafana/", "│ │ └── dashboards/", "│ │ └── hub-overview.json", "│ ├── env/", "│ │ └── .env.example", "│ ├── scripts/", "│ │ ├── init.sh", "│ │ ├── load_sample_data.py", "│ │ └── benchmark_metrics.py", "│ └── Makefile", "├── data/", "│ ├── sample/", "│ │ ├── sources.csv", "│ │ └── metrics.parquet", "│ └── dictionary.md", "└── README.md" ] }

{ "response": "已解析需求并为“移动零售套件”生成与 Go + Flutter 技术栈匹配的项目框架,优先保证快速开发。整体采用前后端分域分层与可观测性内建:移动端 Flutter + Riverpod 离线优先、主题切换;后端采用 Gin + GORM + REST,MySQL/Redis/Meilisearch/NATS,JWT 认证,OpenTelemetry + Prometheus。工程化包含统一代码规范、脚手架、测试、CI、Docker 镜像与 K8s 部署。关键设计建议:1) 领域分层:gateway(BFF/认证/聚合) + services(订单/库存/支付/用户) + infra(配置/部署/数据);2) 状态管理约束:Riverpod ReadOnly/Notifier 分层,离线队列与缓存隔离(core/storage),网络状态与合并策略独立(core/sync);3) 幂等:服务端以 Idempotency-Key + 请求哈希表 + 唯一索引保证订单创建幂等;4) 离线数据合并:客户端维护操作队列与版本戳,采用“服务器权威 + 客户端补偿”策略,冲突时按字段级合并与重试;5) 可观测性:Gin/GORM 接入 OTel tracing,NATS 消费与接口指标暴露到 Prometheus,并在 mobile 埋点登录、下单、同步时序。以下提供项目结构、后端初始化与移动端初始化示例,以及优化后的订单创建代码。", "optimized_code": "package order\n\nimport (\n "crypto/sha256"\n "encoding/hex"\n "encoding/json"\n "errors"\n "net/http"\n "time"\n\n "github.com/gin-gonic/gin"\n "github.com/google/uuid"\n "gorm.io/gorm"\n)\n\n// Models\ntype Order struct {\n ID string gorm:\"primaryKey;size:36\" json:\"id\"\n StoreID string gorm:\"index;size:36\" json:\"store_id\"\n UserID string gorm:\"index;size:36\" json:\"user_id\"\n Status string gorm:\"index;size:16\" json:\"status\"\n TotalCents int64 json:\"total_cents\"\n Items []OrderItem gorm:\"foreignKey:OrderID\" json:\"items\"\n CreatedAt time.Time json:\"created_at\"\n}\n\ntype OrderItem struct {\n ID uint gorm:\"primaryKey\" json:\"-\"\n OrderID string gorm:\"index;size:36\" json:\"-\"\n SKU string gorm:\"index;size:64\" json:\"sku\"\n Name string gorm:\"size:128\" json:\"name\"\n UnitPriceCents int64 json:\"unit_price_cents\"\n Qty int json:\"qty\"\n SubtotalCents int64 json:\"subtotal_cents\"\n}\n\n// Idempotency record\ntype OrderRequest struct {\n ID uint gorm:\"primaryKey\"\n Key string gorm:\"uniqueIndex;size:128\"\n PayloadHash string gorm:\"size:128\"\n OrderID *string\n Status string gorm:\"size:16\" // pending/succeeded/failed\n CreatedAt time.Time\n}\n\n// Request DTO (price由服务端计算,客户端不传价格)\ntype CreateOrderRequest struct {\n StoreID string json:\"store_id\" binding:\"required\"\n Items []CreateOrderItem json:\"items\" binding:\"required,min=1,dive\"\n}\n\ntype CreateOrderItem struct {\n SKU string json:\"sku\" binding:\"required\"\n Qty int json:\"qty\" binding:\"required,min=1\"\n}\n\n// Product for price lookup\ntype Product struct {\n SKU string gorm:\"primaryKey;size:64\"\n Name string\n PriceCents int64\n Active bool\n}\n\n// Dependencies injected\ntype Handler struct {\n DB *gorm.DB\n // MsgBus, Cache, etc.\n}\n\nfunc NewHandler(db *gorm.DB) *Handler { return &Handler{DB: db} }\n\n// Utility\nfunc sha256Hex(b []byte) string { h := sha256.Sum256(b); return hex.EncodeToString(h[:]) }\n\n// Middleware should set userID from JWT to context key "userID"\n\n// CreateOrder implements robust, idempotent order creation.\nfunc (h *Handler) CreateOrder(c *gin.Context) {\n // Idempotency-Key required\n idemKey := c.GetHeader("Idempotency-Key")\n if idemKey == "" {\n c.JSON(http.StatusBadRequest, gin.H{"error": "Idempotency-Key header required"})\n return\n }\n\n var req CreateOrderRequest\n if err := c.ShouldBindJSON(&req); err != nil {\n c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request", "detail": err.Error()})\n return\n }\n userID := c.GetString("userID")\n if userID == "" {\n c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})\n return\n }\n\n payloadBytes, _ := json.Marshal(req)\n payloadHash := sha256Hex(payloadBytes)\n\n var existing OrderRequest\n tx := h.DB.WithContext(c.Request.Context())\n if err := tx.Where("key = ?", idemKey).First(&existing).Error; err == nil {\n // If request exists, return consistent result\n if existing.PayloadHash != payloadHash {\n c.JSON(http.StatusConflict, gin.H{"error": "idempotency key conflict"})\n return\n }\n if existing.OrderID != nil {\n var ord Order\n if err := tx.Preload("Items").First(&ord, "id = ?", *existing.OrderID).Error; err == nil {\n c.JSON(http.StatusOK, ord)\n return\n }\n }\n // pending: fallthrough to attempt completion\n } else if !errors.Is(err, gorm.ErrRecordNotFound) {\n c.JSON(http.StatusInternalServerError, gin.H{"error": "db error"})\n return\n }\n\n // transactional creation\n var created Order\n err := tx.Transaction(func(t *gorm.DB) error {\n // create placeholder idempotency record (unique key enforces single winner)\n reqRec := OrderRequest{Key: idemKey, PayloadHash: payloadHash, Status: "pending"}\n if err := t.Create(&reqRec).Error; err != nil {\n // another concurrent request won; re-read and return\n if errors.Is(err, gorm.ErrDuplicatedKey) {\n if err := t.Where("key = ?", idemKey).First(&existing).Error; err == nil && existing.OrderID != nil {\n return nil // will read after tx\n }\n }\n return err\n }\n\n // price lookup\n skus := make([]string, 0, len(req.Items))\n for _, it := range req.Items { skus = append(skus, it.SKU) }\n var products []Product\n if err := t.Where("sku IN ? AND active = ?", skus, true).Find(&products).Error; err != nil { return err }\n priceMap := map[string]Product{}\n for _, p := range products { priceMap[p.SKU] = p }\n // validate all items exist\n var items []OrderItem\n var total int64\n for _, it := range req.Items {\n p, ok := priceMap[it.SKU]\n if !ok { return errors.New("product not found: " + it.SKU) }\n subtotal := p.PriceCents * int64(it.Qty)\n items = append(items, OrderItem{\n SKU: p.SKU,\n Name: p.Name,\n UnitPriceCents: p.PriceCents,\n Qty: it.Qty,\n SubtotalCents: subtotal,\n })\n total += subtotal\n }\n\n ord := Order{\n ID: uuid.NewString(),\n StoreID: req.StoreID,\n UserID: userID,\n Status: "created",\n TotalCents: total,\n Items: items,\n }\n if err := t.Create(&ord).Error; err != nil { return err }\n\n // link idempotency record\n oid := ord.ID\n if err := t.Model(&OrderRequest{}).Where("id = ?", reqRec.ID).\n Updates(map[string]interface{}{"order_id": oid, "status": "succeeded"}).Error; err != nil { return err }\n\n created = ord\n return nil\n })\n\n if err != nil {\n if errors.Is(err, gorm.ErrRecordNotFound) {\n c.JSON(http.StatusBadRequest, gin.H{"error": "invalid items"})\n return\n }\n c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to create order", "detail": err.Error()})\n return\n }\n\n // reload items (if we returned early on duplicate)\n if created.ID == "" && existing.OrderID != nil {\n var ord Order\n if err := tx.Preload("Items").First(&ord, "id = ?", *existing.OrderID).Error; err == nil {\n c.JSON(http.StatusOK, ord)\n return\n }\n c.JSON(http.StatusInternalServerError, gin.H{"error": "idempotent order retrieval failed"})\n return\n }\n\n c.JSON(http.StatusCreated, created)\n}\n\n// Router setup example\n// func SetupRoutes(r *gin.Engine, h Handler) {\n// r.Use(otelgin.Middleware("order-service")) // tracing\n// api := r.Group("/api").Use(JWTMiddleware())\n// api.POST("/orders", h.CreateOrder)\n// }\n", "project_structure": [ "移动零售套件/", "├─ mobile/", "│ ├─ app/", "│ │ ├─ lib/", "│ │ │ ├─ main.dart", "│ │ │ ├─ core/", "│ │ │ │ ├─ config/app_config.dart", "│ │ │ │ ├─ theme/theme_provider.dart", "│ │ │ │ ├─ network/http_client.dart", "│ │ │ │ ├─ storage/hive_box.dart", "│ │ │ │ ├─ sync/offline_queue.dart", "│ │ │ │ ├─ sync/conflict_resolver.dart", "│ │ │ │ ├─ auth/jwt_manager.dart", "│ │ │ ├─ features/", "│ │ │ │ ├─ auth/login_page.dart", "│ │ │ │ ├─ store/store_switcher.dart", "│ │ │ │ ├─ catalog/product_list_page.dart", "│ │ │ │ ├─ cart/cart_provider.dart", "│ │ │ │ ├─ order/order_submit_service.dart", "│ │ │ │ ├─ inventory/inventory_sync_task.dart", "│ │ │ ├─ routes/app_router.dart", "│ │ │ ├─ analytics/otel_exporter_stub.dart", "│ │ ├─ pubspec.yaml", "│ │ ├─ analysis_options.yaml", "│ │ ├─ test/", "│ │ │ ├─ integration/", "│ │ │ │ ├─ login_flow_test.dart", "│ │ │ │ ├─ order_submit_test.dart", "│ │ │ ├─ unit/", "│ │ │ │ ├─ cart_provider_test.dart", "│ ├─ android/ (Flutter 默认)", "│ ├─ ios/ (Flutter 默认)", "├─ services/", "│ ├─ order/", "│ │ ├─ cmd/order-service/main.go", "│ │ ├─ internal/", "│ │ │ ├─ http/router.go", "│ │ │ ├─ http/middleware/jwt.go", "│ │ │ ├─ domain/order.go", "│ │ │ ├─ app/handlers.go", "│ │ │ ├─ repo/order_repo.go", "│ │ │ ├─ pricing/product_repo.go", "│ │ │ ├─ idempotency/store.go", "│ │ │ ├─ events/nats_publisher.go", "│ │ │ ├─ observability/tracing.go", "│ │ ├─ pkg/", "│ │ │ ├─ config/config.go", "│ │ │ ├─ db/gorm_mysql.go", "│ │ │ ├─ cache/redis.go", "│ │ │ ├─ search/meilisearch.go", "│ │ │ ├─ msg/nats.go", "│ │ │ ├─ logger/logger.go", "│ │ ├─ migrations/", "│ │ │ ├─ 0001_init.sql", "│ │ │ ├─ 0002_products.sql", "│ ├─ inventory/", "│ │ ├─ cmd/inventory-service/main.go", "│ │ ├─ internal/... (库存预留/盘点接口)", "│ ├─ payment/", "│ │ ├─ cmd/payment-service/main.go", "│ │ ├─ internal/... (支付下单/回调)", "│ ├─ user/", "│ │ ├─ cmd/user-service/main.go", "│ │ ├─ internal/... (登录/JWT发放/门店绑定)", "├─ gateway/", "│ ├─ cmd/gateway/main.go", "│ ├─ internal/", "│ │ ├─ http/gin_server.go", "│ │ ├─ bff/aggregators.go", "│ │ ├─ middleware/auth.go", "│ │ ├─ observability/tracing.go", "│ ├─ pkg/", "│ │ ├─ config/config.go", "│ │ ├─ rate/limiter.go", "│ │ ├─ cache/redis.go", "├─ infra/", "│ ├─ config/", "│ │ ├─ .env.example", "│ │ ├─ app.yaml", "│ │ ├─ db.yaml", "│ │ ├─ redis.yaml", "│ │ ├─ meilisearch.yaml", "│ │ ├─ nats.yaml", "│ │ ├─ otel-collector.yaml", "│ │ ├─ prometheus.yaml", "│ ├─ deploy/", "│ │ ├─ docker/", "│ │ │ ├─ order.Dockerfile", "│ │ │ ├─ inventory.Dockerfile", "│ │ │ ├─ payment.Dockerfile", "│ │ │ ├─ gateway.Dockerfile", "│ │ │ ├─ mobile.Dockerfile (可选用于Web打包)", "│ │ │ ├─ docker-compose.dev.yml", "│ │ ├─ k8s/", "│ │ │ ├─ namespace.yaml", "│ │ │ ├─ order-deploy.yaml", "│ │ │ ├─ inventory-deploy.yaml", "│ │ │ ├─ payment-deploy.yaml", "│ │ │ ├─ gateway-deploy.yaml", "│ │ │ ├─ mysql-statefulset.yaml", "│ │ │ ├─ redis-deploy.yaml", "│ │ │ ├─ meilisearch-deploy.yaml", "│ │ │ ├─ nats-deploy.yaml", "│ │ │ ├─ otel-collector-deploy.yaml", "│ │ │ ├─ prometheus-deploy.yaml", "│ │ ├─ helm/ (可选)", "│ ├─ db/", "│ │ ├─ seed/", "│ │ │ ├─ products.json", "│ │ ├─ migrations/ (复用 services//migrations)", "│ ├─ scripts/", "│ │ ├─ migrate.sh", "│ │ ├─ seed.sh", "│ │ ├─ dev_up.sh", "│ │ ├─ fmt_lint.sh", "├─ scripts/", "│ ├─ scaffold.sh (生成模块/handler/测试样板)", "│ ├─ makefile", "│ ├─ ci/", "│ │ ├─ github/", "│ │ │ ├─ workflows/ci.yml", "│ │ ├─ gitlab-ci.yml (可选)", "├─ pkg/ (后端共享库)", "│ ├─ auth/", "│ │ ├─ jwt.go", "│ ├─ observability/", "│ │ ├─ otel.go", "│ │ ├─ metrics.go", "│ ├─ http/", "│ │ ├─ response.go", "│ ├─ idempotency/", "│ │ ├─ middleware.go", "├─ .golangci.yml", "├─ go.work (多模块管理)", "├─ README.md" ] }

示例详情

📖 如何使用

30秒出活:复制 → 粘贴 → 搞定
与其花几十分钟和AI聊天、试错,不如直接复制这些经过千人验证的模板,修改几个 {{变量}} 就能立刻获得专业级输出。省下来的时间,足够你轻松享受两杯咖啡!
加载中...
💬 不会填参数?让 AI 反过来问你
不确定变量该填什么?一键转为对话模式,AI 会像资深顾问一样逐步引导你,问几个问题就能自动生成完美匹配你需求的定制结果。零门槛,开口就行。
转为对话模式
🚀 告别复制粘贴,Chat 里直接调用
无需切换,输入 / 唤醒 8000+ 专家级提示词。 插件将全站提示词库深度集成于 Chat 输入框。基于当前对话语境,系统智能推荐最契合的 Prompt 并自动完成参数化,让海量资源触手可及,从此彻底告别"手动搬运"。
即将推出
🔌 接口一调,提示词自己会进化
手动跑一次还行,跑一百次呢?通过 API 接口动态注入变量,接入批量评价引擎,让程序自动迭代出更高质量的提示词方案。Prompt 会自己进化,你只管收结果。
发布 API
🤖 一键变成你的专属 Agent 应用
不想每次都配参数?把这条提示词直接发布成独立 Agent,内嵌图片生成、参数优化等工具,分享链接就能用。给团队或客户一个"开箱即用"的完整方案。
创建 Agent

✅ 特性总结

快速解析需求,智能根据输入信息生成项目框架,帮助开发者快速上手新项目。
支持多语言和多技术栈灵活切换,无需学习新技术即可轻松构建适配项目结构。
自动生成项目目录结构以及初始化代码,将繁琐的手工作业转化为一键生成流程。
内置代码优化功能,上传代码片段即可快速优化或重构,提升代码质量。
生成的项目结构符合现代工程化标准,保障代码的可读性、清晰度与扩展性。
根据用户需求自动匹配技术栈与开发语言,无需耗时研究技术实现可行性。
专业级开发建议与配置文件生成,帮助用户进一步完善项目开发体验。
轻松满足从简单项目到复杂应用框架的需求,助力开发者高效完成任务。
确保输出内容结构化清晰,减少理解和整理文档的时间成本。
预设智能逻辑提示,善于捕捉用户输入细节,避免反复沟通,快速锁定需求。

🎯 解决的问题

帮助开发者在面对复杂需求时,高效生成多技术栈适配的项目框架,涵盖需求解析、代码初始化、优化等功能,一站式提升开发速度和代码质量。

🕒 版本历史

当前版本
v2.1 2024-01-15
优化输出结构,增强情节连贯性
  • ✨ 新增章节节奏控制参数
  • 🔧 优化人物关系描述逻辑
  • 📝 改进主题深化引导语
  • 🎯 增强情节转折点设计
v2.0 2023-12-20
重构提示词架构,提升生成质量
  • 🚀 全新的提示词结构设计
  • 📊 增加输出格式化选项
  • 💡 优化角色塑造引导
v1.5 2023-11-10
修复已知问题,提升稳定性
  • 🐛 修复长文本处理bug
  • ⚡ 提升响应速度
v1.0 2023-10-01
首次发布
  • 🎉 初始版本上线
COMING SOON
版本历史追踪,即将启航
记录每一次提示词的进化与升级,敬请期待。

💬 用户评价

4.8
⭐⭐⭐⭐⭐
基于 28 条评价
5星
85%
4星
12%
3星
3%
👤
电商运营 - 张先生
⭐⭐⭐⭐⭐ 2025-01-15
双十一用这个提示词生成了20多张海报,效果非常好!点击率提升了35%,节省了大量设计时间。参数调整很灵活,能快速适配不同节日。
效果好 节省时间
👤
品牌设计师 - 李女士
⭐⭐⭐⭐⭐ 2025-01-10
作为设计师,这个提示词帮我快速生成创意方向,大大提升了工作效率。生成的海报氛围感很强,稍作调整就能直接使用。
创意好 专业
COMING SOON
用户评价与反馈系统,即将上线
倾听真实反馈,在这里留下您的使用心得,敬请期待。
加载中...