AI插件编排系统

一个基于OpenAI的模块化插件编排系统,用于理解用户意图并将请求路由到适当的微服务插件。

  • by rajusunagar
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 rajusunagar/Spring-AI-MCP

使用说明

Spring AI Plugin Hub

A modular plugin-based AI orchestration system that uses OpenAI to understand user intent and route requests to appropriate microservice plugins.

Architecture

User Request → Orchestrator → AI Intent Classification → Plugin Selection → Plugin Execution → Response

Components:

  • Orchestrator Service (Port 8080): Central hub with AI-powered intent classification
  • Weather Plugin (Port 8081): Handles weather-related queries
  • Finance Plugin (Port 8082): Handles financial data queries
  • PostgreSQL: Plugin registry and logging

Quick Start

Prerequisites

  • Java 17+
  • Maven 3.6+
  • Docker & Docker Compose
  • OpenAI API Key

Setup

  1. Clone and configure:
cp .env.example .env
# Edit .env and add your OPENAI_API_KEY
  1. Build all services:
./build.sh
  1. Start the system:
docker-compose up -d
  1. Register plugins (auto-registration coming soon):
curl -X POST http://localhost:8080/api/register-plugin \
  -H "Content-Type: application/json" \
  -d '{"name":"weather","baseUrl":"http://weather-plugin:8081","description":"Weather information service"}'

curl -X POST http://localhost:8080/api/register-plugin \
  -H "Content-Type: application/json" \
  -d '{"name":"finance","baseUrl":"http://finance-plugin:8082","description":"Financial data service"}'

Usage Examples

Query Weather

curl -X POST http://localhost:8080/api/query \
  -H "Content-Type: application/json" \
  -d '{"prompt":"What is the weather in Bangalore?"}'

Query Finance

curl -X POST http://localhost:8080/api/query \
  -H "Content-Type: application/json" \
  -d '{"prompt":"What is Apple stock price?"}'

List Active Plugins

curl http://localhost:8080/api/list-plugins

API Endpoints

Orchestrator (Port 8080)

  • POST /api/query - Process user queries
  • POST /api/register-plugin - Register new plugins
  • GET /api/list-plugins - List active plugins

Plugin Interface

All plugins must implement:

  • POST /process - Process queries with format:
    {
      "query": "user prompt"
    }
    

Adding New Plugins

  1. Create plugin structure:
mkdir -p plugins/my-plugin/src/main/java/com/springai/plugins/myplugin
  1. Implement controller:
@RestController
public class MyPluginController {
    @PostMapping("/process")
    public Map<String, Object> process(@RequestBody Map<String, String> request) {
        return Map.of(
            "result", "Your plugin response",
            "pluginName", "myplugin",
            "success", true
        );
    }
}
  1. Add to docker-compose.yml:
my-plugin:
  build: ./plugins/my-plugin
  ports:
    - "8083:8083"
  1. Register via API:
curl -X POST http://localhost:8080/api/register-plugin \
  -d '{"name":"myplugin","baseUrl":"http://my-plugin:8083","description":"My custom plugin"}'

Development

Local Development

# Start PostgreSQL
docker run -d --name postgres -p 5432:5432 -e POSTGRES_DB=plugin_hub -e POSTGRES_PASSWORD=postgres postgres:15

# Run orchestrator
mvn spring-boot:run

# Run plugins
cd plugins/weather-plugin && mvn spring-boot:run
cd plugins/finance-plugin && mvn spring-boot:run

Testing

mvn test

Configuration

Environment Variables

  • OPENAI_API_KEY: Your OpenAI API key
  • DB_USERNAME: PostgreSQL username (default: postgres)
  • DB_PASSWORD: PostgreSQL password (default: postgres)

Plugin Registration Format

{
  "name": "plugin-name",
  "baseUrl": "http://plugin-service:port",
  "description": "Plugin description for AI classification"
}

Troubleshooting

Common Issues

  1. Plugin not found: Ensure plugin is registered and active
  2. AI classification fails: Check OpenAI API key and quota
  3. Database connection: Verify PostgreSQL is running

Logs

docker-compose logs orchestrator
docker-compose logs weather-plugin

Future Enhancements

  • [ ] JWT authentication between services
  • [ ] Plugin health monitoring
  • [ ] Response caching
  • [ ] Web dashboard
  • [ ] Auto-plugin discovery
  • [ ] Plugin versioning