A visual orchestration platform for multi-agent collaboration via the A2A-T protocol.
基于 A2A-T 协议的多智能体可视化编排平台。
The Orchestration Center is a visual platform for designing and executing multi-agent workflows. It provides a drag-and-drop workflow designer, an async execution engine, and A2A-T negotiation integration — enabling teams to build, manage, and run complex agent collaboration flows without writing code.
Use cases: Telecom network assurance workflows, RAN energy-saving orchestration, SPN fault handling pipelines, enterprise multi-agent automation.
sequenceDiagram
actor User as User
participant FE as Workflow Designer<br/>(React :3003)
participant BE as Backend :5001<br/>(FastAPI)
participant LLM as LLM
participant Reg as Agent Registry
participant Agt as A2A Agents
rect rgb(240, 248, 255)
Note over User, Reg: 1. Agent Discovery
FE->>+BE: GET /rest/v1/orchestrate/agent-cards
BE->>Reg: Fetch AgentCards
Reg-->>BE: AgentCard[]
BE-->>-FE: agent-cards JSON
FE-->>User: Display agent catalog
end
rect rgb(255, 250, 240)
Note over User, Reg: 2. Workflow Creation (3 modes)
alt 2a. PDF Import
User->>FE: Upload PDF
FE->>+BE: POST /rest/v1/orchestrate/parse-pdf
BE->>LLM: Parse chapters & tasks
LLM-->>BE: Structured preflow
BE-->>-FE: PreFlow JSON
FE->>BE: POST /rest/v1/orchestrate/generate-from-preflow
BE->>LLM: Generate PSOP from PreFlow
LLM-->>BE: PSOP workflow
BE-->>FE: PSOP JSON
else 2b. Manual Drag & Drop
User->>FE: Drag agents, connect nodes, configure
FE->>FE: Build workflow graph (React Flow)
else 2c. Natural Language Intent
User->>FE: Enter intent text
FE->>+BE: POST /rest/v1/orchestrate/generate-from-intent
BE->>Reg: Fetch AgentCards
Reg-->>BE: AgentCard[]
BE->>LLM: Generate PSOP from intent
LLM-->>BE: PSOP workflow
BE-->>-FE: PSOP JSON
end
end
rect rgb(240, 255, 240)
Note over User, Reg: 3. Save Workflow
User->>FE: Click Save
FE->>+BE: POST /rest/v1/orchestrate/workflows<br/>{psop: {...}}
BE->>BE: Validate PSOP (Pydantic)
BE->>BE: Persist (File JSON / PostgreSQL)
BE-->>-FE: {workflow_id: "..."}
FE-->>User: Saved successfully
end
rect rgb(255, 245, 255)
Note over User, Agt: 4. Execute Workflow
User->>FE: Click Execute
FE->>+BE: GET /rest/v1/orchestrate/execute<br/>?psop_id=xxx&user_intent=...&lang=zh
BE-->>FE: SSE: {"type":"init"}
BE-->>FE: SSE: {"type":"start"}
BE->>Reg: Fetch AgentCards for routing
Reg-->>BE: AgentCard[]
loop Per step (DAG traversal)
BE->>BE: Build context from upstream outputs
BE-->>FE: SSE: {"type":"agent_request",...}
BE->>+Agt: A2A call (gRPC/HTTP)<br/>task + context
Agt-->>-BE: Agent response
BE-->>FE: SSE: {"type":"agent_response",...}
opt A2A-T Negotiation
BE->>Agt: Negotiation request
Agt-->>BE: Negotiation response
BE-->>FE: SSE: {"type":"negotiation_request",...}
BE-->>FE: SSE: {"type":"negotiation_resolved",...}
end
opt Conditional Routing
BE->>LLM: Route decision<br/>(JumpCondition matching)
LLM-->>BE: Next step selection
end
end
BE-->>FE: SSE: {"type":"psop_update",...}
BE->>BE: Save ExecutionRecord
BE-->>FE: SSE: {"type":"complete",...}
BE-->>-FE: SSE: {"type":"close"}
FE-->>User: Execution finished
end
| Category | Capability |
|---|---|
| Visual Designer | React Flow-based drag-and-drop workflow builder with automatic Dagre layout |
| Multi-Mode Creation | PDF document import, manual drag-and-drop, and natural-language-to-workflow via LLM |
| A2A-T Negotiation | Fulfillment negotiation between agents via a2a-t-sdk, context carried in Task.metadata |
| Execution Engine | DynamicWorkflowEngine — async DAG traversal, parallel A2A calls, conditional LLM routing, SSE streaming |
| Semantic Search | Natural-language retrieval of previously built workflows |
| Dual API Layer | Internal API (/rest/v1/orchestrate/*) for the frontend + External API (/api/v1/*) for third-party integration |
| SSE Streaming | Real-time execution progress via 11 event types (init, start, agent_request, agent_response, psop_update, negotiation_request, negotiation_resolved, negotiation_failed, complete, error, close) |
| Pluggable Storage | File-based JSON or PostgreSQL persistence via HandlerRegistry |
| Template Marketplace | Pre-built workflow templates for telecom scenarios (live broadcast, energy saving, fault handling) |
| Sample Agents | 11 sample A2A agents with negotiation support for testing and demonstration |
| Component | Requirement |
|---|---|
| Python | 3.12+ |
| Node.js | 20.19+ |
# Clone the repository
git clone https://github.com/project-openan/orchestration-center.git
cd orchestration-center
# Backend setup
python3 -m venv .venv
source .venv/bin/activate # Linux
# .venv\Scripts\activate # Windows
pip install -r requirements.txt
# Start backend (port 5001)
python -m orchestrate.start
# Frontend setup (separate terminal)
cd workflow-designer
npm install --force
npm run dev # port 3003
# (Optional) Start sample agents
cd ..
python -m samples.start_agents_server| Service | Check |
|---|---|
| Backend | Uvicorn running on http://127.0.0.1:5001 |
| Frontend | Open http://localhost:3003 in browser |
| Sample Agents | Agent startup messages in console |
flowchart TB
subgraph frontend["Frontend"]
wd["Workflow Designer<br/>React 18 + Vite + Tailwind<br/>Port 3003"]
end
subgraph backend["Orchestration Backend (Port 5001)"]
direction TB
api["Dual API Layer<br/>Internal /rest/v1/orchestrate/*<br/>External /api/v1/*"]
domain["Core Domain<br/>PSOP Generator · Intent Generator<br/>Semantic Search · Publisher"]
engine["DynamicWorkflowEngine<br/>DAG Traversal · Parallel A2A Calls<br/>LLM Routing · SSE Push"]
end
subgraph storage["Storage"]
direction LR
file[("File JSON")]
pg[("PostgreSQL")]
end
subgraph agents["A2A Agents"]
direction LR
a1["Agent A"]
a2["Agent B"]
a3["Agent C..."]
end
wd -->|"REST / SSE"| api
api --> domain
domain --> engine
engine --> file
engine --> pg
engine -->|"A2A Protocol<br/>+ A2A-T Negotiation"| a1
engine --> a2
engine --> a3
style backend fill:#e1f5fe,stroke:#0288d1
style frontend fill:#e8f5e9,stroke:#388e3c
style storage fill:#f3e5f5,stroke:#7b1fa2
style agents fill:#fff3e0,stroke:#f57c00
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/v1/orchestrate/sop |
SOP-based workflow orchestration (JSON text or file upload) |
POST |
/api/v1/orchestrate/intent |
Intent-based workflow orchestration |
GET |
/api/v1/orchestrate/psop/{id} |
Get PSOP workflow detail |
POST |
/api/v1/orchestrate/search |
Search workflows by natural language intent |
POST |
/api/v1/orchestrate/execute |
Auto-orchestrate + execute (SSE streaming) |
GET |
/api/v1/orchestrate/execute/{id} |
Execute a known PSOP (SSE streaming) |
GET |
/api/v1/executions |
List execution records |
GET |
/api/v1/executions/{id} |
Get execution result |
| Method | Endpoint | Description |
|---|---|---|
GET |
/workflows |
List workflows |
GET |
/workflows/{id} |
Get workflow detail |
POST |
/workflows |
Create workflow |
DELETE |
/workflows/{id} |
Delete workflow |
POST |
/parse-pdf |
Parse PDF SolutionPackage and extract PreFlow |
POST |
/generate-from-preflow |
Generate PSOP from PreFlow |
POST |
/generate-from-intent |
Generate PSOP from intent |
POST |
/retrieve-by-intent |
Retrieve workflow by intent |
POST |
/retrieve-topn-by-intent |
Retrieve top-N workflows by intent |
GET |
/agent-cards |
List available agent cards |
GET |
/templates |
List workflow templates |
POST |
/templates/{id}/import |
Import workflow from template |
GET |
/execute |
Start workflow execution (SSE). Query params: psop_id, user_intent, lang |
GET |
/execution-records |
List execution records |
GET |
/execution-records/{id} |
Get execution record detail |
DELETE |
/execution-records/{id} |
Delete execution record |
Full API specification: API Reference
| Config File | Purpose |
|---|---|
etc/conf/server.conf |
Server IP, port, TLS certificates, persistence mode, registry URL |
etc/conf/server.properties |
TLS versions, ciphers, rate limiting, connection limits |
etc/conf/db_config.json |
PostgreSQL connection settings |
common/config/llm_config.json |
LLM/embed/rerank model endpoints |
common/config/README_en.md |
LLM configuration guide |
This project integrates a2a-t-sdk for agent fulfillment negotiation:
A2AT_LLM_PROVIDER=deepseek
A2AT_LLM_MODEL=deepseek-chat
A2AT_LLM_API_KEY=<your-api-key>
A2AT_LLM_BASE_URL=https://api.deepseek.com
A2AT_NEGOTIATION_STATE_STORE_TYPE=in_memoryConfiguration is auto-generated by common/a2at_config.py from common/config/llm_config.json.
| Document | Description |
|---|---|
| User Guide | Features, scenarios, quick start, FAQ |
| API Reference | Full REST API specification |
| Developer Guide | Custom handlers, LLM module, extension |
| GCP Deployment Guide | Docker + GCP Cloud Run deployment guide |
| Frontend README | Workflow Designer setup and tech stack |
| LLM Config | LLM configuration reference |
This project is licensed under the Apache License 2.0. See LICENSE for details.