使用说明
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
- Clone and configure:
cp .env.example .env
# Edit .env and add your OPENAI_API_KEY
- Build all services:
./build.sh
- Start the system:
docker-compose up -d
- 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 queriesPOST /api/register-plugin- Register new pluginsGET /api/list-plugins- List active plugins
Plugin Interface
All plugins must implement:
POST /process- Process queries with format:{ "query": "user prompt" }
Adding New Plugins
- Create plugin structure:
mkdir -p plugins/my-plugin/src/main/java/com/springai/plugins/myplugin
- 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
);
}
}
- Add to docker-compose.yml:
my-plugin:
build: ./plugins/my-plugin
ports:
- "8083:8083"
- 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 keyDB_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
- Plugin not found: Ensure plugin is registered and active
- AI classification fails: Check OpenAI API key and quota
- 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