生成
用于使用UI、模型和mcp服务器动态构建具有AI功能的应用程序的应用程序。
概述
Spawn是一个Spring Boot应用程序,使您能够配置、构建和部署基于Spring Boot/Spring AI框架构建的新AI应用程序。该应用程序提供了一个基于web的UI,其中包含服务器端渲染的HTML页面,用于管理应用程序、AI模型和MCP(模型上下文协议)服务器。
主要工作流程
- 浏览可用型号 -查看从CSV加载的AI模型列表(例如OpenAI、Anthropic Claude、Azure OpenAI)
- 浏览可用的MCP服务器 -查看从CSV加载的MCP服务器列表(例如GitHub、Notion、Stripe)
- 创建新应用程序 使用名称并选择模型提供程序
- 添加MCP服务器 从可用列表中添加到您的应用程序
- 构建和部署 基于配置的新应用
技术栈
- Java 17
- 弹簧靴3.2.0
- Spring Data JPA
- H2数据库(内存中)
- J2HTML 1.6.0(服务器端HTML渲染)
- 梅文
入门指南
先决条件
- Java 17或更高版本
- Maven 3.6或更高版本
构建并运行
- 克隆存储库
- 构建应用程序:
mvn clean install- 运行应用程序:
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/模板提供了预先配置的服务器定义,其中包含可定制用于部署的输入占位符。模板系统支持多种命名策略,用于将模板与服务器匹配:
- 精确匹配:模板文件名与服务器名称完全匹配(例如。,
GitHub.json对于“GitHub”服务器) - 不区分大小写的匹配:无论大小写差异如何,都能找到模板
- 标准化比赛:空格和特殊字符被标准化为连字符(例如。,
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:
- 查看可用型号
- 引导到 http://localhost:8080/models - 浏览可用AI模型提供者列表
- 查看可用的MCP服务器
- 引导到 http://localhost:8080/mcp-servers - 浏览带有说明的可用MCP服务器列表
- 创建应用程序
- 引导到 http://localhost:8080/applications - 点击“创建新应用程序” - 输入应用程序名称:“我的AI助手” - 选择模型提供者:“OpenAI” - 点击“保存”
- 添加MCP服务器
- 点击应用程序上的“查看” - 从下拉列表中选择MCP服务器(例如“GitHub”) - 点击“添加服务器” - 重复以添加更多服务器
- 查看应用程序配置
- 应用程序详细信息页面显示: - 应用程序详细信息(ID、名称、型号提供商、创建日期) - 带有图标和描述的关联MCP服务器 - 添加/删除服务器的选项
- 创建代理
- 引导到 http://localhost:8080/agents - 点击“创建新代理” - 输入代理名称:“代码审阅者” - (可选)输入描述 - 输入系统提示 - 从下拉列表中选择MCP服务器 - 点击“保存”
- 查看代理详细信息
- 点击您的代理上的“查看” - 查看完整的系统提示和附加的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文件。
