| Cecha | Azure AI Foundry | NLP2CMD | Podobieństwo |
|---|---|---|---|
| Multi-domain DSL Generation | Tak (SQL, REST, Python) | Tak (SQL, Shell, Docker, K8s, DQL) | âś… Wysoki |
| Model Context Protocol (MCP) | Tak - oficjalny standard | Brak | ❌ Brak |
| Visual Prompt Flow | Tak - drag & drop orchestrator | Brak GUI | ❌ Brak |
| Action Registry | Foundry Tools (1400+ connectors) | Action Registry (19 akcji) | 🟡 Podobny koncept |
| Plan Executor | Agent Service + Orchestrator | PlanExecutor z foreach/variables | âś… Podobny |
| Multi-turn Correction | Tak - iterative refinement | FeedbackAnalyzer | 🟡 Podstawowy |
| Schema Validation | Foundry IQ + built-in | SchemaRegistry (11 formatĂłw) | âś… Podobny |
| Safety Policies | Defender + Entra ID | SafetyPolicy per adapter | 🟡 Podstawowy |
| Cecha | OptiMind-SFT | NLP2CMD | Podobieństwo |
|---|---|---|---|
| NL → Executable Code | Tak (→ GurobiPy/MILP) | Tak (→ SQL/Shell/Docker/K8s) | ✅ Wysoki |
| Domain-specific Hints | Class-based error hints | Domain adapters | âś… Podobny |
| Self-correction Loop | Multi-turn z solver feedback | FeedbackLoop + Validators | 🟡 Podstawowy |
| Expert-aligned Training | SFT na cleaned datasets | Brak treningu | ❌ Brak |
| Majority Voting | K=8 samples, best-of-N | Brak | ❌ Brak |
| Structured Output | Mathematical formulation + code | ExecutionPlan + DSL command | âś… Podobny |
| Intermediate Reasoning | Chain-of-thought przed kodem | Brak explicit reasoning | ❌ Brak |
Status: BRAK
Priorytet: KRYTYCZNY
Opis: MCP to standard Azure/Anthropic dla łączenia AI z narzędziami
Zadania:
Status: Częściowy (LLMPlanner stub)
Priorytet: KRYTYCZNY
Opis: Brak rzeczywistej integracji z LLM dla NL parsing
Zadania:
Status: Podstawowy (FeedbackAnalyzer)
Priorytet: KRYTYCZNY
Opis: Iteracyjna korekcja błędów z feedback od executora
Zadania:
Status: BRAK
Priorytet: WYSOKI
Opis: Generowanie K kandydatów, wybór najczęstszego
Zadania:
Status: BRAK
Priorytet: WYSOKI
Opis: Intermediate reasoning przed generowaniem kodu
Zadania:
Status: BRAK
Priorytet: ĹšREDNI
Opis: Drag & drop interface dla budowania workflows
Zadania:
Status: 19 akcji
Priorytet: ĹšREDNI
Cel: 100+ akcji (jak Azure 1400 connectors)
Zadania:
Status: BRAK
Priorytet: ĹšREDNI
Opis: Real-time streaming wynikĂłw
Zadania:
Status: BRAK
Priorytet: NISKI
Opis: Dynamiczne ładowanie nowych adapterów/akcji
Zadania:
Status: Podstawowy (trace_id, duration)
Priorytet: NISKI
Opis: Pełna integracja z OpenTelemetry
Zadania:
Status: BRAK
Priorytet: NISKI
Opis: Szacowanie kosztĂłw przed wykonaniem
Zadania:
Status: BRAK
Priorytet: NISKI
Opis: Cache dla powtarzalnych zapytań
Zadania:
Status: BRAK
Priorytet: NISKI
Opis: Przetwarzanie wielu requestĂłw naraz
Zadania:
| Gap | Wpływ | Rozwiązanie | |—–|——-|————-| | Brak MCP | Izolacja od ekosystemu | Implementacja MCP server/client | | Brak GUI | Słaba UX dla non-devs | React-based visual builder | | 19 vs 1400 akcji | Ograniczone use cases | Plugin system + community | | Brak governance | Enterprise concerns | Role-based access + audit logs |
| Gap | Wpływ | Rozwiązanie | |—–|——-|————-| | Brak fine-tuned model | Niższa accuracy | LLM integration + domain hints | | Brak majority voting | Single point of failure | K-sample voting | | Brak CoT reasoning | Błędy w złożonych przypadkach | Structured reasoning templates | | Brak expert hints | Generic errors | Domain-specific error catalogs |
| Metryka | Obecna | Cel v0.3.0 | Cel v1.0.0 |
|---|---|---|---|
| Akcje w Registry | 19 | 50 | 200+ |
| Wspierane LLM | 0 | 3 | 10+ |
| Test coverage | ~75% | 85% | 95% |
| Self-correction turns | 0 | 5 | 10 |
| Accuracy (estimated) | ~60% | 75% | 90% |
| Execution time | <1s | <2s | <5s |
class MCPServer:
"""NLP2CMD as MCP tool provider."""
def list_tools(self) -> list[ToolDefinition]:
return self.registry.to_mcp_format()
def call_tool(self, name: str, params: dict) -> ToolResult:
action = self.registry.get(name)
return self.executor.execute_single(action, params)
class SelfCorrector:
def correct(self, plan: ExecutionPlan, max_turns: int = 5):
for turn in range(max_turns):
result = self.executor.execute(plan)
if result.success:
return result
errors = self.analyzer.extract_errors(result)
hints = self.hint_generator.for_domain(plan.domain)
plan = self.llm.regenerate(plan, errors, hints)
return result # Best effort
class MajorityVoter:
def vote(self, prompt: str, k: int = 8) -> Result:
candidates = [self.llm.generate(prompt) for _ in range(k)]
groups = self.cluster_by_similarity(candidates)
best_group = max(groups, key=len)
return self.select_representative(best_group)