Das Herzstück ist PortRuntime.route_prompt() in src/runtime.py. Hier wird entschieden, welche Komponenten für einen Prompt relevant sind.
Wie der Algorithmus funktioniert
def route_prompt(self, prompt, limit=5):
tokens = self._tokenize(prompt)
scores = []
for cmd in self.commands:
score = self._score(tokens, cmd)
scores.append((cmd, score))
scores.sort(key=lambda x: x[1], reverse=True)
return scores[:limit]
Scoring-Funktion anpassen
Du kannst die Gewichtung der verschiedenen Felder anpassen:
def _score(self, tokens, entry):
score = 0
name_tokens = set(entry.name.lower().split())
resp_tokens = set(entry.responsibility.lower().split())
score += len(tokens & name_tokens) * 3.0
score += len(tokens & resp_tokens) * 1.0
return score / len(tokens)
Eigene Routing-Strategien
| Strategie | Anwendungsfall | Implementierung |
| Prefix-Match | CLI-ähnliche Befehle | Prüfe ob Prompt mit Befehls-Name startet |
| Kategorie-Boost | Gewisse Tools bevorzugen | +0.5 Score für bestimmte source_hint |
| Kontext-Aware | Session-History berücksichtigen | Häufig genutzte Befehle boosten |
| Semantic Match | Synonyme erkennen | Erweitere Tokens mit Synonymen |
💡
Testen ist wichtig
Nach jeder Änderung am Routing: python3 -m src.main route "dein test prompt". So siehst du sofort, ob deine Änderung das gewünschte Ergebnis bringt.
Route testen
$ python3 -m src.main route "Erstelle eine neue Datenbank" --limit 5
Routed Matches:
1. Command: database-create (Score: 0.92)
2. Tool: DatabaseQuery (Score: 0.75)
3. Command: setup-db (Score: 0.68)
...