geekai Documentation

AI 助手全套开源解决方案,自带运营管理后台,开箱即用。集成了 ChatGPT, Azure, ChatGLM,讯飞星火,文心一言等多个平台的大语言模型。支持 MJ AI 绘画,Stable Diffusion AI 绘画,微博热搜等插件工具。采用 Go + Vue3 + element-plus 实现。

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy geekai on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name geekai -p 3307:3307 --restart always registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-api:v4.3.1-amd64
Configured Services & Ports
⚙️ geekai-mysql
image: registry.cn-shenzhen.aliyuncs.com/geekmaster/mysql:8.0.33
🔌 Ports: 3307:3306
⚙️ geekai-redis
image: registry.cn-shenzhen.aliyuncs.com/geekmaster/redis:6.0.6
🔌 Ports: 6380:6379
⚙️ geekai-tika
image: registry.cn-shenzhen.aliyuncs.com/geekmaster/tika:latest
🔌 Ports: 9999:9998
⚙️ geekai-api
image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-api:v4.3.1-amd64
🔌 Ports: 5678:5678
⚙️ geekai-web
image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-web:v4.3.1-amd64
🔌 Ports: 8080:8080
docker-compose.yml
yaml (docker-compose.yml)
services:
  # mysql
  geekai-mysql:
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/mysql:8.0.33
    container_name: geekai-mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=mhSCk0NheGhmtsha
    ports:
      - '3307:3306'
    volumes:
      - ./conf/mysql/my.cnf:/etc/mysql/my.cnf
      - ./data/mysql/data:/var/lib/mysql
      - ./logs/mysql:/var/log/mysql
      - ./data/mysql/init.d:/docker-entrypoint-initdb.d/
    healthcheck:
      test: ['CMD', 'mysqladmin', 'ping', '-h', 'localhost']
      interval: 5s
      timeout: 10s
      retries: 10

  # redis
  geekai-redis:
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/redis:6.0.6
    restart: always
    container_name: geekai-redis
    command: redis-server --requirepass mhSCk0NheGhmtsha
    volumes:
      - ./data/redis:/data
    ports:
      - '6380:6379'
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
      interval: 3s
      timeout: 10s
      retries: 5

  geekai-tika:
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/tika:latest
    container_name: geekai-tika
    restart: always
    ports:
      - '9999:9998'

  # 后端 API 程序
  geekai-api:
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-api:v4.3.1-amd64
    container_name: geekai-api
    restart: always
    depends_on:
      geekai-mysql:
        condition: service_healthy
      geekai-redis:
        condition: service_healthy
    environment:
      - DEBUG=false
      - LOG_LEVEL=info
      - CONFIG_FILE=config.toml
    ports:
      - '5678:5678'
    volumes:
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
      - ./conf/config.toml:/var/www/app/config.toml
      - ./logs/app:/var/www/app/logs
      - ./static:/var/www/app/static
      - ./data/leveldb:/var/www/app/data

  # 前端应用
  geekai-web:
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-web:v4.3.1-amd64
    container_name: geekai-web
    restart: always
    depends_on:
      - geekai-api
    ports:
      - '8080:8080'
    volumes:
      - ./logs/nginx:/var/log/nginx
      - ./conf/nginx/conf.d:/etc/nginx/conf.d
      - ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./conf/nginx/ssl:/etc/nginx/ssl

Technical Documentation: yangjian102621/geekai

ℹ️ Provenance: Multi-Tier Ingestion · CodeWiki Reference

Overview (README.md)

🚀 GeekAI:一站式 AI 创意生产力平台

让创意触手可及,让创作变得简单

一个功能完整、开箱即用的 AI 多模态内容创作平台,集成了对话、绘画、音乐、视频、思维导图等全链路 AI 创作能力。无论是个人创作者还是企业团队,都能快速搭建属于自己的 AI 创作工作台。

✨ 核心特色

🎨 **全能 AI 创作矩阵**

  • 智能对话:集成 ChatGPT、Claude 等多款顶级 AI 模型,支持角色扮演和专业对话
  • 图像生成:整合 MidJourney、DALL-E、Nano-Banana,即梦,可灵等主流 AI 绘画引擎
  • 音频创作:Suno AI 音乐生成,从旋律到歌词一键创作专属音乐
  • 视频制作:Luma 和 KeLing,即梦,Veo3 视频 AI,文本到视频,创意无限
  • 思维导图:AI 辅助思维整理,复杂想法可视化呈现

🏗️ **企业级技术架构**

  • 高性能后端:Go + Gin + MySQL + Redis,支持高并发访问
  • 现代化前端:Vue3 + Element Plus + Vant,桌面移动双端适配
  • 智能缓存:多层缓存策略,响应速度提升 80%
  • 弹性部署:Docker 容器化部署,一键启动,轻松扩展
  • 私有化部署:支持私有化部署,私有化部署不支持升级,需要手动升级
  • 文档支持:丰富且详细的部署和 API 开发文档支持,二次开发轻松上手

💼 **商业化就绪**

  • 完整用户系统:注册登录、权限管理、积分充值
  • 灵活计费模式:支持按次付费、包月订阅等多种商业模式
  • 数据统计分析:用户行为、消费记录、系统性能全方位监控
  • 管理后台:功能完备的管理员界面,运营数据一目了然

🎯 **用户体验优势**

  • 响应式设计:完美适配桌面、平板、手机等全终端设备
  • 暗黑模式:支持明暗主题切换,护眼舒适
  • 实时交互:流式响应,创作过程流畅无卡顿
  • 文件管理:支持七牛云,阿里云 OSS,腾讯云 OSS,Minio 等多种云存储,作品安全可靠

🎪 **应用场景**

  • 内容创作者:博客写作、社交媒体素材、短视频制作
  • 企业营销:品牌宣传材料、产品介绍、创意广告
  • 教育培训:课件制作、知识图谱、互动内容
  • 个人娱乐:AI 聊天、创意绘画、音乐创作

🔥 **为什么选择 GeekAI?**

  1. 技术领先:集成当前最先进的 AI 技术,始终保持创新前沿
  2. 开箱即用:完整的商业化解决方案,无需从零开发
  3. 高度定制:模块化架构设计,支持个性化功能扩展
  4. 稳定可靠:经过大量用户验证,性能稳定,安全可信
  5. 持续更新:紧跟 AI 技术发展,功能持续迭代升级

演示站点

Geek-AI 创作系统

文档地址

Geek-AI 文档

部署

  1. 安装 docker 和 docker-compose 程序,这个自行解决。
  2. 直接在项目根目录运行启动命令:
    shell
    docker-compose up -d

功能截图

请参考 GeekAI 项目介绍。


让 AI 成为你最强大的创作伙伴,开启无限创意可能!


Requirement (`docs/requirement.md`)

📄 PRD: 智能演示文稿 (PPT) 生成后端 API (Agentic Workflow)

1. 项目概述 (Project Overview)

本项目旨在开发一个基于 Go (Gin 框架) 的后端 API 服务。该服务接收用户提供的「文本大纲」和「设计提示词(可选)」,通过大语言模型 (LLM) 进行结构化内容拆解与提示词工程,并利用并发调度图像生成模型 (如 Nano Banana 2) 生成幻灯片配图。

为保证系统稳定性和极佳的用户体验,系统采用**异步任务+前端定时轮询(3秒/次)**的架构。后端负责核心的并发控制、速率限制(Rate Limiting)和状态管理。

2. 技术栈约束 (Tech Stack)

  • 语言/框架: Go 1.21+, Gin Web Framework
  • 并发控制: golang.org/x/sync/errgroup
  • 速率限制: golang.org/x/time/rate
  • 状态管理: sync.Map (内存级,后续可扩展至 Redis)
  • 数据交互: JSON 格式,RESTful 风格

3. 核心 API 规范 (API Specification)

3.1 创建生成任务 (Create Task)

接收用户的原始文本和要求,立即返回任务 ID,不阻塞等待生成结果。

  • Endpoint: POST /api/v1/tasks/generate-slides
  • Request Body:
json
{
  "content": "用户的 Markdown 笔记或大纲内容 (必填)",
  "prompt": "用户的附加设计要求,如:极简商务风、卡通手绘风 (选填)",
  "language": "用户选择的语言,如:中文、英文,必填",
  "pages": "用户选择的页数,如:5-20,必填"
}
  • Response Body:
json
{
  "code": 200,
  "message": "Task created successfully",
  "data": {
    "task_id": "uuid-v4-string",
    "status": "pending"
  }
}

3.2 查询任务进度 (Query Task Progress)

前端每隔 3 秒调用一次此接口,获取最新进度和已生成的幻灯片数据。

  • Endpoint: GET /api/v1/tasks/:task_id
  • Response Body:
json
{
  "code": 200,
  "data": {
    "task_id": "uuid-v4-string",
    "status": "processing", // 状态枚举: pending, processing, completed, failed
    "progress": {
      "total_slides": 10,
      "completed_slides": 3,
      "percentage": 30
    },
    "slides": [
      {
        "slide_index": 1,
        "theme": "早晨环节",
        "title": "第一关:起床咕噜咕噜喝温水!",
        "points": ["水量:300-500ml", "唤醒身体小怪兽"],
        "image_url": "https://example.com/generated-image-url-1.png"
      }
    ],
    "error_message": "" // 仅在 status 为 failed 时返回具体错误
  }
}

4. 核心工作流与状态机 (State Machine & Workflow)

4.1 任务初始化阶段

  1. 接收 POST 请求,生成全局唯一的 task_id。
  2. 在 TaskManager (基于 sync.Map) 中初始化任务实例,初始化状态 status = pending,并加上并发安全锁 (sync.Mutex)。
  3. 启动独立的后台 Goroutine 接管耗时业务,主线程立即向客户端返回 task_id。

4.2 后台异步执行阶段

  1. LLM 解析 (状态变更: processing)
    调用大语言模型解析传入的 content 和 prompt。必须注入以下 System Prompt 常量约束大模型输出:

    Role

你是一位顶级的专业演示文稿(PPT)策划专家和 AI 图像提示词(Prompt)工程师。任务是根据用户提供的「内容大纲」或「设计要求」,生成一套逻辑清晰、视觉风格高度统一的幻灯片分镜数据。

Rules

  1. 全局风格锚定:根据大纲推断或遵循用户要求的全局视觉风格。所有配图必须严格遵循此风格。
  2. 结构化拆解:合理拆分为多张幻灯片,单页最多 3-4 个简短要点。
  3. 视觉转译:为每页构思具体的画面描述 (image_prompt)。必须包含前缀 [全局风格描述],必须包含后缀 [画面左侧或右侧留出干净的纯色或虚化空间,用于排版文字。绝对不要在图片中生成任何英文字母、汉字或乱码。]
  4. 严格输出合法的纯 JSON 数组 [{"slide_index": 1, "theme": "...", "title": "...", "points": ["..."], "image_prompt": "..."}],禁止使用 Markdown 标记。
  1. 获取总数
    解析成功后,更新该任务的 total_slides 字段,completed_slides 保持为 0。
  2. 并发绘图与限流调度 (核心挑战)
  • 启动 errgroup.WithContext 进行并发调度,设置 g.SetLimit(3) 控制最大并发线程。
  • 引入令牌桶限流器 rate.NewLimiter(rate.Every(1*time.Second), 1) 控制 API 外部请求频率(QPS = 1)。
  • 必须实现指数退避重试 (Exponential Backoff):遇到 HTTP 429 错误时,等待 2s, 4s, 8s 后重试,最高重试 3 次。
  • 进度更新:每成功生成一张图片,必须获取 Task 实例的写锁,将 completed_slides 加 1,并将完整的 SlideData 追加到任务的 slides 数组中,以便前端下一秒轮询时能拿到最新切片。

4.3 任务收尾阶段

  • 正常结束:errgroup.Wait() 返回 nil,状态变更为 completed。
  • 异常中断:发生超过最大重试次数的错误或解析失败,状态变更为 failed,并记录错误原因至 error_message。

请按照以下顺序逐步实现 Go 后端代码,每完成一步请与我确认:

  1. 核心模型与接口定义:定义 Task 结构体(包含 sync.Mutex)、DTO 结构体以及 Gin 的路由组搭建。
  2. 状态管理器实现:实现一个基于 sync.Map 的 TaskManager,提供安全的 CreateTask、GetTask、UpdateProgress 和 MarkAsFailed 方法。
  3. 限流与重试 HTTP 客户端:实现 callImageAPIWithRetry 函数,内部封装 rate.Limiter 的等待逻辑和针对 429 状态码的指数退避重试逻辑(可先用 Mock 数据代替真实 HTTP 请求)。
  4. 组装核心 Handler:实现 POST 和 GET 控制器。在 POST 的后台 Goroutine 中,串联 LLM Mock 解析和 errgroup 并发画图流程,确保在循环中安全地调用 TaskManager.UpdateProgress 更新进度和结果数组。

--- METRICS ---