AI应用构建工具

Spawn是一个基于Spring Boot的应用程序,用于快速配置、构建和部署基于Spring AI框架的AI应用,提供Web界面管理模型和MCP服务器。

  • by teggr
  • Java
  • 本地部署
  • 更新于

使用说明

生成

用于使用UI、模型和mcp服务器动态构建具有AI功能的应用程序的应用程序。

概述

Spawn是一个Spring Boot应用程序,使您能够配置、构建和部署基于Spring Boot/Spring AI框架构建的新AI应用程序。该应用程序提供了一个基于web的UI,其中包含服务器端渲染的HTML页面,用于管理应用程序、AI模型和MCP(模型上下文协议)服务器。

主要工作流程

  1. 浏览可用型号 -查看从CSV加载的AI模型列表(例如OpenAI、Anthropic Claude、Azure OpenAI)
  2. 浏览可用的MCP服务器 -查看从CSV加载的MCP服务器列表(例如GitHub、Notion、Stripe)
  3. 创建新应用程序 使用名称并选择模型提供程序
  4. 添加MCP服务器 从可用列表中添加到您的应用程序
  5. 构建和部署 基于配置的新应用

技术栈

  • Java 17
  • 弹簧靴3.2.0
  • Spring Data JPA
  • H2数据库(内存中)
  • J2HTML 1.6.0(服务器端HTML渲染)
  • 梅文

入门指南

先决条件

  • Java 17或更高版本
  • Maven 3.6或更高版本

构建并运行

  1. 克隆存储库

  2. 构建应用程序:

    mvn clean install
    
  3. 运行应用程序:

    mvn spring-boot:run
    

应用程序将于启动 http://localhost:8080

H2控制台

访问H2数据库控制台: http://localhost:8080/h2-console

  • JDBC网址: jdbc:h2:mem:spawndb
  • 用户名: sa
  • 密码:(空)

Web用户界面

该应用程序提供了一个基于web的用户界面,其中包含以下页面:

型号(/models)

  • 只读列表 从以下位置加载的AI模型提供程序 src/main/resources/models/models.csv
  • 显示模型功能:多模态、工具/功能、流式传输、重试、可观察性等。
  • 无创建、编辑或删除操作-模型仅用于配置

MCP服务器(/mcp-servers)

  • 只读列表 从加载的MCP服务器 src/main/resources/mcp/mcp_servers.csv
  • 显示服务器图标和说明
  • 包括GitHub MCP注册表中的48多台服务器(GitHub、Notion、Stripe等)
  • 无创建、编辑或删除操作-服务器仅用于配置
  • 查看配置模板 适用于具有可用模板的MCP服务器

MCP模板

MCP服务器配置模板是存储在中的JSON文件 src/main/resources/mcp/templates/模板提供了预先配置的服务器定义,其中包含可定制用于部署的输入占位符。模板系统支持多种命名策略,用于将模板与服务器匹配:

  1. 精确匹配:模板文件名与服务器名称完全匹配(例如。, GitHub.json 对于“GitHub”服务器)
  2. 不区分大小写的匹配:无论大小写差异如何,都能找到模板
  3. 标准化比赛:空格和特殊字符被标准化为连字符(例如。, azure-mcp-server.json 匹配“Azure MCP服务器”)

模板包括:

  • 使用占位符进行服务器配置 ${input:id} 语法
  • 指定所需配置值、类型和默认值的输入定义
  • 预览功能显示替换占位符的模板(密码字段用 *****)

通过MCP服务器列表页面上的“查看模板”按钮访问具有可用模板的服务器的模板。

应用程序(/applications)

  • 完整的CRUD操作 用于人工智能应用
  • 使用名称和模型提供程序创建应用程序
  • 查看、编辑和删除应用程序
  • 在应用程序中添加/删除MCP服务器
  • 每个应用程序存储:
    • 名字
    • 模型提供者(参考CSV)
    • MCP服务器名称集(引用CSV)
    • 创建时间戳

代理商(/agents)

  • 新领域:代理代表了针对特定任务量身定制的专业知识。
  • 每个代理存储:
    • name (必填)
    • description (可选)
    • systemPrompt (长文本,存储为CLOB)
    • createdAt 时间戳
    • 存储在中的每个代理的MCP服务器名称持久列表(自由格式字符串) agent_mcp_servers 桌子
  • 端点(服务器渲染的HTML):
    • GET /agents --列出所有代理
    • GET /agents/new --显示创建表单(已知MCP服务器下拉列表+“其他”自由添加)
    • POST /agents --创建代理(成功后重定向)
    • GET /agents/{id} --显示完整系统提示和附加MCP名称的详细页面(未知名称用警告徽章突出显示)
    • GET /agents/{id}/edit --编辑表格(预填)
    • POST /agents/{id} --更新代理
    • POST /agents/{id}/delete --删除代理
    • POST /agents/{id}/mcp-servers/add --将MCP名称附加到代理
    • POST /agents/{id}/mcp-servers/{mcpName}/remove --从代理中删除MCP名称
  • 用于下拉菜单的MCP服务器列表是从CSV(只读)加载的。代理接受自由格式的MCP名称;UI突出显示与任何已知MCP服务器都不匹配的名称。

数据架构

基于CSV的配置(只读)

模型 和 MCP服务器 在应用程序启动时从CSV文件加载:

  • CSV模型 (src/main/resources/models/models.csv):

    • 列:提供程序,多模式,工具/函数,流,重试,可观察性,内置JSON,本地,OpenAI API兼容
    • 例子: OpenAI,"In: text, image, audio Out: text, audio",yes,yes,yes,yes,yes,no,yes
  • MCP服务器CSV (src/main/resources/mcp/mcp_servers.csv):

    • 列:名称、图标、描述
    • 例子: GitHub,https://avatars.githubusercontent.com/u/9919?v=4,"Official GitHub MCP Server..."

数据库实体(CRUD)

应用程序 存储在H2数据库中:

  • 应用程序名称
  • 模型提供程序名称(根据CSV验证)
  • MCP服务器名称集合(根据CSV验证)
  • 创建时间戳

代理 存储在H2数据库中:

  • 代理名称
  • 描述
  • 系统提示
  • 创建时间戳
  • MCP服务器名称的集合(自由格式,根据CSV进行验证)

工作流示例

使用web UI:

  1. 查看可用型号

    • 引导到 http://localhost:8080/models
    • 浏览可用AI模型提供者列表
  2. 查看可用的MCP服务器

    • 引导到 http://localhost:8080/mcp-servers
    • 浏览带有说明的可用MCP服务器列表
  3. 创建应用程序

    • 引导到 http://localhost:8080/applications
    • 点击“创建新应用程序”
    • 输入应用程序名称:“我的AI助手”
    • 选择模型提供者:“OpenAI”
    • 点击“保存”
  4. 添加MCP服务器

    • 点击应用程序上的“查看”
    • 从下拉列表中选择MCP服务器(例如“GitHub”)
    • 点击“添加服务器”
    • 重复以添加更多服务器
  5. 查看应用程序配置

    • 应用程序详细信息页面显示:
      • 应用程序详细信息(ID、名称、型号提供商、创建日期)
      • 带有图标和描述的关联MCP服务器
      • 添加/删除服务器的选项
  6. 创建代理

    • 引导到 http://localhost:8080/agents
    • 点击“创建新代理”
    • 输入代理名称:“代码审阅者”
    • (可选)输入描述
    • 输入系统提示
    • 从下拉列表中选择MCP服务器
    • 点击“保存”
  7. 查看代理详细信息

    • 点击您的代理上的“查看”
    • 查看完整的系统提示和附加的MCP服务器
    • 编辑或删除代理的选项

测试

运行测试:

mvn test

测试套件包括:

  • 所有域的控制器集成测试
  • CSV加载服务测试
  • 展示完整应用程序生命周期的端到端工作流测试
  • 所有测试都使用MockMvc进行控制器测试

项目结构

src/
├── main/
│   ├── java/dev/rebelcraft/ai/spawn/
│   │   ├── SpawnApplication.java          # Main application class
│   │   ├── apps/                          # Applications domain
│   │   │   ├── Application.java           # JPA entity
│   │   │   ├── ApplicationController.java # Web controller
│   │   │   ├── ApplicationService.java    # Business logic
│   │   │   ├── ApplicationRepository.java # Spring Data repository
│   │   │   ├── ApplicationRequest.java    # DTO
│   │   │   ├── ApplicationResponse.java   # DTO
│   │   │   ├── ApplicationFormPage.java   # J2HTML view
│   │   │   ├── ApplicationDetailPage.java # J2HTML view
│   │   │   └── ApplicationsListPage.java  # J2HTML view
│   │   ├── models/                        # Models domain (read-only CSV)
│   │   │   ├── Model.java                 # Plain POJO
│   │   │   ├── ModelController.java       # Web controller
│   │   │   ├── ModelService.java          # CSV loader
│   │   │   ├── ModelResponse.java         # DTO
│   │   │   └── ModelsListPage.java        # J2HTML view
│   │   ├── mcp/                           # MCP Servers domain (read-only CSV)
│   │   │   ├── McpServer.java             # Plain POJO
│   │   │   ├── McpServerController.java   # Web controller
│   │   │   ├── McpServerService.java      # CSV loader
│   │   │   ├── McpServerResponse.java     # DTO
│   │   │   ├── McpServersListPage.java    # J2HTML view
│   │   │   ├── McpTemplate.java           # Template POJO
│   │   │   ├── McpTemplateService.java    # Template loader
│   │   │   ├── McpTemplateController.java # Template controller
│   │   │   └── McpServerTemplatePage.java # J2HTML view
│   │   ├── agents/                        # Agents domain
│   │   │   ├── Agent.java                 # JPA entity
│   │   │   ├── AgentController.java       # Web controller
│   │   │   ├── AgentService.java          # Business logic
│   │   │   ├── AgentRepository.java       # Spring Data repository
│   │   │   ├── AgentRequest.java          # DTO
│   │   │   ├── AgentResponse.java         # DTO
│   │   │   ├── AgentFormPage.java         # J2HTML view
│   │   │   ├── AgentDetailPage.java       # J2HTML view
│   │   │   └── AgentsListPage.java        # J2HTML view
│   │   ├── web/                           # Cross-cutting web concerns
│   │   │   ├── IndexController.java       # Home page
│   │   │   └── view/                      # Shared view components
│   │   ├── utils/                         # Utilities
│   │   │   └── ResourceNotFoundException.java
│   │   └── config/                        # Configuration
│   └── resources/
│       ├── application.properties         # Application configuration
│       ├── models/
│       │   └── models.csv                 # AI model providers
│       └── mcp/
│           ├── mcp_servers.csv            # MCP servers
│           └── templates/                 # MCP configuration templates
│               ├── GitHub.json            # GitHub MCP template
│               └── azure-mcp-server.json  # Azure MCP template
└── test/
    └── java/dev/rebelcraft/ai/spawn/      # Test classes

数据库模式

应用程序使用具有以下模式的内存中H2数据库:

  • 应用:存储AI应用程序配置
    • id、名称、模型提供者、创建at
  • application_mcp_servers:存储每个应用程序的MCP服务器名称
    • application_id,mcp_server_name
  • 代理:存储代理配置
    • id、名称、描述、system_prompt、created_at
  • 代理服务器:存储每个代理的MCP服务器名称
    • agent_id,mcp_server_name

备注:型号和MCP服务器未存储在数据库中。它们在启动时从CSV文件加载。

许可证

此项目在Apache License 2.0下获得许可-有关详细信息,请参阅License文件。